커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1536
글번호 230811
답변완료
부탁드립니다.
data2의 전일종가를 표시하는 지표식 부탁드립니다.
2023-05-15
1364
글번호 168976
답변완료
지표 및 시스템 문의드립니다
수고많으십니다~~
번거롭게 해드렸네요...
간단하게 작성법을 알고, 응용하면 될줄알았는데 쉽지가않네요
다시한번 재문의 드립니다.
=================================
키움에서 쓰던
1. 시스템 매매를 예스트레이더에 맞게 변경하고 싶습니다.
2. 매수식을 이용한 검색 도 부탁드립니다
================================
1. 시스템 트레이딩
> 제목 : 매매식 및 매수매도 조건 설정 문의
조건설정
1차매수 : 2000주
2차매수 : 500주 ... 2차까지만 매수하고 싶습니다.
매도는
1차매도 : 평단대비 3.5% 상승시 비중의 30%만 매도 (최초 3.5%상승시 1번만 매도)
2차매도 : 평단대비 10% 상승시 비중의 50% 매도
나머지 전량매도 :
1. 매도조건 달성시
2. 평단대비 50% 달성시 (목표가)
3. 평단대비 -15% 하락시 손절
시간설정
1. 오전 09:10 부터 매수시작
2. 오후 02:30 부터는 신규매수 중지
3. 오후 03:15 보유종목 모두 청산
이렇게 하고 싶은데 어떻게 설정을 해야할까요??
(아래 매매식)
period = 10
multiple = 3
기본
base = (h + l) /2;
상단선
upper_band=base + atr(period)*multiple;
downtrend=valuewhen(1,lowest(upper_band(1),period)>upper_band,upper_band);
하단선
lower_band=base - atr(period)*multiple;
uptrend=valuewhen(1,highest(lower_band(1),period)<lower_band,lower_band);
매수
crossup( c(1), downtrend(1)) && c > downtrend
매도
crossdown( c(1), uptrend(1) ) && c < uptrend
========================================
3. 위 매수식을 이용한 "검색" 도 부탁드립니다
(아래조건에 해당하는 종목을 검색하고 싶은데 어떻게 하느지를 모르겠네요??)
period = 10
multiple = 3
기본
base = (h + l) /2;
상단선
upper_band=base + atr(period)*multiple;
downtrend=valuewhen(1,lowest(upper_band(1),period)>upper_band,upper_band);
하단선
lower_band=base - atr(period)*multiple;
uptrend=valuewhen(1,highest(lower_band(1),period)<lower_band,lower_band);
매수
crossup( c(1), downtrend(1) ) && c > downtrend
2023-05-15
1704
글번호 168975
답변완료
수식확인 요청 드립니다.
nr12 nr7로 테스트 했는데
1봉전께 나오는거 같습니다.
번거로우시겠지만 확인 부탁드립니다. 감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 지표 및 종목검색식 부탁드립니다.
>
안녕하세요
예스스탁입니다.
1. 지표(속성에서 막대그래프로 지정하고 보시기 바랍니다.)
input : length_NR(7);
var : sOpen(0),sHigh(0),sLow(0),sClose(0);
var : range_NR_Prep(0),range_NR(0),range_ATR(0);
var : range_isCurrentLowest(False),range_isLowest(False);
var : range_Break_Direction(0),range_Volume_Surge(0);
sOpen = open;
sHigh = high;
sLow = low;
sClose = close;
#NR_Check(range) => range < lowest(range, length_NR - 1)[1] ? true : false
// Calculations
range_NR_Prep = sHigh - sLow;
range_NR = sHigh[1] - sLow[1];
range_ATR = atr(length_NR);
if range_NR_Prep < lowest(range_NR_Prep,length_NR-1)[1] Then
range_isCurrentLowest = true;
Else
range_isCurrentLowest = False;
if range_NR < lowest(range_NR,length_NR-1)[1] Then
range_isLowest = true;
Else
range_isLowest = False;
range_Break_Direction = iff(range_isLowest == true , IFf(sClose > sHigh[1] and range_ATR > range_ATR[1] , 1 ,IFf(sClose < sLow[1] and range_ATR < range_ATR[1] , -1 , 0)),0);
range_Volume_Surge = iff(volume > ma(volume, length_NR)[1] , 1 , 0);
range_Break_Direction = iff(range_Break_Direction == 1 , range_Break_Direction + range_Volume_Surge ,IFf(range_Break_Direction == -1 , range_Break_Direction + range_Volume_Surge , 0));
if range_isLowest then
plot1(range_Break_Direction,"검색",green);
Else
NoPlot(1);
2 종목검색
input : length_NR(7);
var : sOpen(0),sHigh(0),sLow(0),sClose(0);
var : range_NR_Prep(0),range_NR(0),range_ATR(0);
var : range_isCurrentLowest(False),range_isLowest(False);
var : range_Break_Direction(0),range_Volume_Surge(0);
sOpen = open;
sHigh = high;
sLow = low;
sClose = close;
#NR_Check(range) => range < lowest(range, length_NR - 1)[1] ? true : false
// Calculations
range_NR_Prep = sHigh - sLow;
range_NR = sHigh[1] - sLow[1];
range_ATR = atr(length_NR);
if range_NR_Prep < lowest(range_NR_Prep,length_NR-1)[1] Then
range_isCurrentLowest = true;
Else
range_isCurrentLowest = False;
if range_NR < lowest(range_NR,length_NR-1)[1] Then
range_isLowest = true;
Else
range_isLowest = False;
range_Break_Direction = iff(range_isLowest == true , IFf(sClose > sHigh[1] and range_ATR > range_ATR[1] , 1 ,IFf(sClose < sLow[1] and range_ATR < range_ATR[1] , -1 , 0)),0);
range_Volume_Surge = iff(volume > ma(volume, length_NR)[1] , 1 , 0);
range_Break_Direction = iff(range_Break_Direction == 1 , range_Break_Direction + range_Volume_Surge ,IFf(range_Break_Direction == -1 , range_Break_Direction + range_Volume_Surge , 0));
if range_isLowest then
Find(1);
즐거운 하루되세요
> 신데렐라맨 님이 쓴 글입니다.
> 제목 : 지표 및 종목검색식 부탁드립니다.
> 종목검색식 + 지표요청입니다.
nr(x) 인디케이터라는 지표입니다.
기본은 12일이고 날짜지정이 가능하면 좋겠습니다.
제가 설명이 부족할듯 하여 원본 링크 첨부드립니다.
https://kr.tradingview.com/v/OWa0Thc7/
브레이크 업다운 같은건 없어도 되고요 nr(x) 종목 검색식과
지표 부탁드립니다.
미리 감사드려요. 꾸벅~
//@version=2
study("NR(X) Indicator", overlay = true)
// Pull traditional data
sOpen = security(tickerid, period, open)
sHigh = security(tickerid, period, high)
sLow = security(tickerid, period, low)
sClose = security(tickerid, period, close)
// Inputs
length_NR = input(defval = 7, title = "Period length of days for Narrow Range", type = integer)
NR_Check(range) =>
range < lowest(range, length_NR - 1)[1] ? true : false
// Calculations
range_NR_Prep = sHigh - sLow
range_NR = sHigh[1] - sLow[1]
range_ATR = atr(length_NR)
range_isCurrentLowest = NR_Check(range_NR_Prep)
range_isLowest = NR_Check(range_NR)
range_Break_Direction = range_isLowest == true ? sClose > sHigh[1] and range_ATR > range_ATR[1] ? 1 : sClose < sLow[1] and range_ATR < range_ATR[1] ? -1 : 0 : 0
range_Volume_Surge = volume > sma(volume, length_NR)[1] ? 1 : 0
range_Break_Direction := range_Break_Direction == 1 ? range_Break_Direction + range_Volume_Surge : range_Break_Direction == -1 ? range_Break_Direction + range_Volume_Surge : 0
// Draw out
//plot(range_isLowest == true ? range_Break_Direction : na, color = green, style = histogram, transp = 0)
plotshape(range_isCurrentLowest == true ? low : na, style = shape.diamond, color = white, transp = 0)
plotshape(range_Break_Direction > 0 ? low : na, style = shape.labeldown, color = green, transp = 0, text = "Break ₩nUP", textcolor = white, location = location.abovebar)
plotshape(range_Break_Direction < 0 ? high : na, style = shape.labelup, color = red, transp = 0, text = "Break ₩nDOWN", textcolor = white, location = location.belowbar)
2023-05-15
1616
글번호 168974
비리번 님에 의해서 삭제되었습니다.
2023-05-15
7
글번호 168973
답변완료
함수요청
안녕하세요?
국내선물을 거래하고자합니다.
아래 전략에 대해 스크립트 작성 부탁들비니다.
수요일의 종가가 전주 금요일 종가대비 상승하고 월요일 시가보다 크면 목요일 시가 매수, 15시 20분 청산
수요일의 종가가 전주 금요일 종가대비 하락하고 월요일 시가보다 작으면 목요일 시가 매도, 15시 20분 청산
2023-05-15
1394
글번호 168971
답변완료
수식문의드립니다.
항상 감사드립니다.
아래의 3 가지 수식에 이격도 (이평이 서로 너무 벌어지면 진입금지)를
추가해주시면 감사드리겠습니다,
저번처럼 외부변수로 해주시면 정말 감사드리겠습니다.(예 Input : p1(5), p2(20), Per(5);)
[1번]
Inputs: AvgLen1(10), AvgLen2(10), AvgLen3(10), AvgLen4(10), ARmult(4.5), Div(30);
Vars: Avg1(0), Avg2(0), Avg3(0), Avg4(0), MP(0), StopPrice(0);
Avg1 = ema(Close, AvgLen1);
Avg2 = ema(Close, AvgLen2);
Avg3 = ema(Close, AvgLen3);
Avg4 = ema(Close, AvgLen4);
If CrossUp(Avg1 , Avg2) AND (Avg2 > Avg3) AND (Avg3 > Avg4) then
Buy("B",AtMarket);
If CrossDown (Avg1 , Avg2) AND (Avg2 < Avg3) AND (Avg3 < Avg4) then
Sell("S",AtMarket);
If Avg1 < Avg2 then
ExitLong("EL",AtMarket);
If Avg1 > Avg2 then
ExitShort("ES",AtMarket);
MP = MarketPosition;
if MP == 1 and MP[1] <> 1 then
StopPrice = low - ma(range,40)*ARmult;
if MP == -1 and MP[1] <> -1 then
StopPrice = High + ma(range,40)*ARmult;
If MP == 1 then {
exitlong ("ExitLong", atstop, stopprice );
stopprice = stopprice + (low-stopprice)/Div;
}
If MP == -1 then {
exitshort ("ExitShort",atstop, stopprice );
stopprice = stopprice - (stopprice-high)/Div;
}
[2번]
Input: DMILen(70), ADXLen(20), entryPoint(0.2), ADXExit(30);
Vars: BuySetup(false), SellSetup(false), BuyPrice(0), SellPrice(0),
DPlus(0), DMin(0), ADXVal(0), ExitSPrc(0), ExitLPrc(0);
DPlus = DIPlus(DMILen);
DMin = DIMinus(DMILen);
ADXVal = ADX(ADXLen);
If DPlus > DMin AND CrossUp( ADXVal , DMin) and MarketPosition <> 1 then begin
BuyPrice = High + entryPoint ;
BuySetup = true;
ExitLPrc = Low - entryPoint ;
end;
If ADXVal < DMin OR MarketPosition == 1 then
BuySetup = False;
If DPlus < DMin AND CrossUp( ADXVal , DPlus) and MarketPosition <> -1 then begin
SellPrice = Low - entryPoint ;
SellSetup = true;
ExitSPrc = High + entryPoint ;
end;
If ADXVal < DPlus or MarketPosition == -1 then
SellSetup = False;
If BuySetup then
Buy("B",atstop,BuyPrice);
If SellSetup then
Sell("S",atstop,SellPrice);
/*If MarketPosition == 1 then Begin
BuySetup = false;
ExitLong("EL1",atstop,ExitLPrc);
end;
If MarketPosition == -1 then begin
SellSetup = True;
ExitShort("ES1",atstop,ExitSPrc);
end;
If ( ADXVal[1] >= ADXExit AND ADXVal < ADXVal[1] ) then Begin
If MarketPosition == 1 and barssinceentry > 1 then
ExitLong("EL2"); ;
If MarketPosition == -1 and barssinceentry > 1 then
ExitShort("ES2");;
end;
If DPlus < DMin and BarsSinceEntry > 1 then
ExitLong("EL3");
If DPlus > Dmin and BarsSinceEntry > 1 then
ExitShort("ES3");*/
[3번]
Inputs: Length(300), Const(1.4), ChanPcnt(0.8), stopLen(40), stopper(1.0);
Vars: KCU(0), KCL(0), ChanRng(0), AvgVal(0), AvgRange(0), SetBar(0), CountL(0), CountS(0);
//Assignments of Keltner calculations
AvgVal = ma(Close, Length);
AvgRange = ma(TrueRange, Length);
KCU = AvgVal + AvgRange * Const;
KCL = AvgVal - AvgRange * Const;
ChanRng = (KCU - KCL) / 2;
//Accumulates to count the bars after the SetUps below
CountL = CountL + 1;
CountS = CountS + 1;
//Buy Criteria Evaluation
IF CrossUp(Close , KCU) Then Begin
SetBar = High;
CountL = 1;
End;
IF Close > KCU AND CountL <= 5 Then
Buy("B",atstop,SetBar + (ChanRng * ChanPcnt));
//Sell Criteria Evaluation
IF CrossDown(Close , KCL) Then Begin
SetBar = Low;
CountS = 1;
End;
IF Close < KCL AND CountS <= 5 Then
Sell("S",atstop,SetBar - (ChanRng * ChanPcnt));
//System Stops
IF CrossDown( Close , AvgVal) Then
ExitLong();
IF CrossUP(Close , AvgVal) Then
ExitShort();
//Trailing Stops
ExitLong("EL2", atstop,Lowest(Low, StopLen) );
ExitShort("ES2", atstop,Highest(High, StopLen));
2023-05-15
1707
글번호 168959
답변완료
문의 드립니다.
안녕하세요.
늘 감사드립니다.
30분봉, 60분봉등 큰봉을 씁니다.
봉의 시가에서 매수하여 (200)틱 익절 (-150)틱 손절 하는 단순한 매매인데,
시뮬레이션 차트로 검증을 해보니,
진입후 해당 진입봉의 꼬리가 (-150)틱 이하로 내려갔다가 (200)틱 이상으로 가도 익절로 계산되어서 아주 과대계산 이 됩니다.
(큰시간봉에서는 한 봉내의 가격의 흐름 데이타가 없는 이유인듯)
실제 시스템 매매에는 적용하지 않더라도,
시뮬레이션 차트상에서만 이라도,
조건에 맞아 매수 진입한 해당봉의 꼬리가 input 으로 정한 손절(ex : -150) 이하이거나,
조건에 맞아 매도 진입한 해당봉의 꼬리가 input 으로 정한 손절(ex : 150) 이상이거나
진입하지 않은 다른봉의 꼬리는 상관없으나,
진입한 봉의 꼬리가 손절가이상에 해당하면
무조건 손절로 처리되어서
결과적으로는 손실로 결과 계산되어지게 하는 명령함수는 없을까요 ?
실제 매매시 실제 결과보다
시뮬레이션 결과가 과대 계산되어지는 오류를 막아보고자 합니다.
위의 사항을 구현할 수 없다면,
해당봉(진입한 봉의 꼬리가 손절가 이상) 의 갯수라도 차트상에 표기가 되었으면 좋겠는데요..
---------
개발자님 곁에 늘 좋은일 가득하길 바랍니다.
감사합니다. ~~
2023-05-15
1110
글번호 168958
답변완료
시스템신호가 조건에 맞는 경우에도 나오지 않습니다.
시스템신호를 이용하여 자동매매 프로그램 모의테스트를 진행중입니다.
예스랭기지 조건식에 맞는 경우에 처음 1번은 신호가 나오는데 이후에는 신호가 나오지 않습니다. 주기는 30틱, 60틱, 1분 등 여러가지로 바꿔 테스트를 해도 실시간 조건에서 신호가 나오지 않습니다. 지나간 신호에 대해서는 조건에 맞는 시스템 매매신호가 나오는 것을 확인했습니다.
예를들어 아래와 비슷한 조건식을 사용하여 테스트를 하는 중입니다.
- TSI가 0선 아래로 내려갈 경우 매도하고
- TSI가 0선 위로 올라갈 때 청산
실시간 매매신호가 정상적으로 나오게 하는 설정이 있는지 궁금하여 문의드립니다.
2023-05-15
1142
글번호 168956
답변완료
문의
답변 수식으로는
090300 첫봉에 진입하는 결과만 나옵니다.
체결가격도 다릅니다.
살펴주십시요.
*****************************************************************************
안녕하세요
예스스탁입니다.
input : ntime(100000);
var : T(0);
#날짜변경되면 T는 0
if Bdate != Bdate[1] Then
T = 0;
#10시 이후이면 1
if (bDate != bDate[1] and sTime >= ntime) or
(Bdate == Bdate[1] and sTime >= ntime and sTime[1] < ntime) Then
T = 1;
#10시 이후에 0.01까지 가격이 하락하면 T는 2
if T == 1 and L == 0.01 Then #(종가기준이면 C == 0.01)
T = 2;
#T는 2이고(0.01까지 하락후) 0.1이상 상승하면 즉시 매수
if T == 2 and H < 0.1 Then
{
Buy("b",AtStop,0.1);
}
즐거운 하루되세요
> 목마와숙녀 님이 쓴 글입니다.
> 제목 : Re : Re : 문의
> 수식을 그대로
콜atm+2단계에 적용했는데 가격대가 0.01과 0.10 이 아닙니다.
살펴주시기 바랍니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의
>
안녕하세요
예스스탁입니다.
input : ntime(100000);
var : T(0);
if Bdate != Bdate[1] Then
T = 0;
if (bDate != bDate[1] and sTime >= ntime) or
(Bdate == Bdate[1] and sTime >= ntime and sTime[1] < ntime) Then
{
var1 = O;
T = 1;
}
if T == 1 and C <= var1-0.01 Then
T = 2;
if T == 2 and C >= var1+0.1 Then
{
T = 3;
Buy();
}
즐거운 하루되세요
> 목마와숙녀 님이 쓴 글입니다.
> 제목 : 문의
> 국내선물
데이트레이딩
if 10시에 가격이 하락하여 0.01 을 체결한 후 다시 상승하여 0.10 을 돌파 then
buy();
입력시간부터 발생한 봉부터 계산하는 것을 반영하여 주십시요.
수식 완성 부탁드립니다.
2023-05-15
717
글번호 168948