커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7872
글번호 230811
답변완료
문의드립니다
몇가지 질문좀 드리고자 합니다.
1. 차트 설정창에서 진입지연주문 설정을 하면 예스스팟으로 전달되는 매매신호도 똑같이 지연된 신호가 가는지 알고 싶습니다.
2. //Buy신호 발생
if (Signal.signalKind == 1)
{
//주문할 종콕코드
var Bcode = Option1.GetATMCallRecent(0);
//매수주문
Account1.OrderBuy(Bcode,1, Option1.GetAsk(Bcode,5),0);
//내부파일에 Buy라는 이름으로 Bcode저장
Main.SetUserValue("Buy",Bcode);
}
//예스스팟에서 이런 식으로 매수 신호가 발생되어서 종목코드가 저장된후 청산되기 전에 실수로 예스스팟을 닫았다거나 전략을 닫았다가 켜면 저 종목코드 저장된게 없어지는건지 궁금합니다.
감사합니다.
2021-06-22
1603
글번호 150176
답변완료
답변 잘 보았습니다
1.매수된 총 수량을 오늘 발생한 매도 신호에 1/2 매도
내일도 매도 신호 나오면 나머지 1/2 매도
내일 매도 신호 없으면 1/2 수량은 그냥 보유 이런식으로 하고 싶습니다
가능한지요?
2.아 그리고 오늘 매도 신호 발생해 매도 되었는데
다시 매수 신호 발생해 재 매수 되는 경우가 있네요
매도 신호 발생했으면 그 후는 진입 제한했으면 합니다
늘 많은 도움주셔서 감사합니다
2021-06-22
1861
글번호 150175
답변완료
수식 수정 의뢰드립니다!
안녕하세요!
아래 수식은 전메 만들어 주신겁니다!
매매를 하면서 전일시장과 당일 시장이 연장되지 않고
당일에 새로운 바탕선이 적용될 수 있도록 수정 부탁드립니다!
감사합니다!
Input : Af(0.02), MaxAf(0.2);
Var : direction(0), sar1(0), afval(0), ep(0),lowval(0),highval(0),count(0);
if count == 0 then //변수들의 초기화
{
highval = High;
lowval = Low;
direction = 0;
sar1 = 0;
afval = 0;
ep = 0;
count = 1;
}
if(ep != 0 ) then // 추세가 진행중
{
if(direction == 1) then // 상승추세이면
{
ep = highval;
sar1 = sar1 + afval*(ep-sar1); // 상승추세에서 SAR값 계산
if(high > highval) then // 신고가 발생
{
highval = high;
afval = afval+Af; // 상승추세에서 신고가가 발생했으므로 가속변수 증가
if(afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다)
afval = MaxAf;
}
if( low < sar1) then // 추세변경(상승->하락)
{ // 다음 SAR값을 계산할 때 필요한 전SAR값은 하락추세로 전환되기 직전의
direction = -1; // 최고가를 사용하므로 sar1 = ep (ep에는 highval 들어있다)
sar1 = ep; // 추세가 변경되었으므로 가속변수 및 EP, highval 초기화
afval = 0;
ep = 0;
lowval = low;
}
}
else // 하락 추세
{
ep = lowval; // 하락추세에서는 EP로 저가 사용
sar1 = sar1 + afval*(ep-sar1);
if(low < lowval) then // 신저가 발생
{
lowval = low;
afval = afval + Af;
if( afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다)
afval = MaxAf;
}
if(high > sar1) then // 추세 변경(하락->상승)
{ // 다음 SAR 값을 계산할 때 필요한 전SAR값은 상승추세로 전환되기 직전의
direction = 1; // 최저가를 사용하므로 sar1 = ep (ep에는 lowval값이 들어있다)
sar1 = ep; // 추세가 변경되었으므로 가속변수 및 EP, highval 초기화
afval = 0;
ep = 0;
highval = high;
}
}
}
else if(sar1 != 0 && ep == 0) then //추세가 변경된후 첫번째 SAR계산
{
if(direction == 1) then // 상승 추세
{
ep = highval; // 상승추세에서는 신고가를 EP로 사용하므로
afval = Af; // 가속변수의 초기값인 AF(0.02) 적용
sar1 = sar1 + afval*(ep-sar1);
if ( high > highval) then // 신고가가 발생
{
Highval = high;
afval = afval + Af; // 가속변수 증가
if(afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다)
afval = MaxAf;
}
}
else // 하락추세
{
ep = lowval;
afval = Af; // 가속변수의 초기값인 AF(0.02) 적용
sar1 = sar1 + afval*(ep-sar1);// 하락추세에서 SAR 계산
if(low < lowval) then // 신저가 발생
{
lowval = low;
afval = afval + Af; // 가속변수 증가
if(afval >= MaxAf) then // 가속변수가 최대값과의 비교 (가속변수는 최대 가속값 보다 클 수 없다)
afval = MaxAf;
}
}
}
else // SAR 첨 시작
{
if direction == 0 then // 추세가 없으므로
{
if(c > c[1]) then // 상승추세로 시작
direction = 1;
else if( c < c[1]) then // 하락추세로 시작
direction = -1;
}
else if direction == 1 then // 상승추세(추세변경이 일어날 경우 SAR 계산하기 시작)
{
if(c < c[1]) then // 추세 변경 (상승->하락) SAR 계산하기 시작
{
direction = -1;
sar1 = highval; // 하락추세로 전환시 다음 SAR값을 계산할 때 필요한 전 SAR값은 추세직전의 최고가를 사용하므로
}
}
else if direction == -1 then // 하락추세(추세변경이 일어날 경우 SAR 계산하기 시작)
{
if( c > c[1]) then // 추세 변경 (하락->상승) SAR 계산하기 시작
{
direction = 1;
sar1 = lowval; // 상승추세로 전환시 다음 SAR값을 계산할 때 필요한 전 SAR값은 추세직전의 최저가를 사용하므로
}
}
lowval = min(low, lowval); // 추세 변경시 전 SAR값으로 최고가나 최저가가 필요하므로
highval = max(high,highval); // low, high를 전의 최고가, 최저가와 비교하여 최고가, 최저가를 저장
}
//처음 시작할 때 다음 추세 변경이 일어날 때까지 SAR는 invalid
#if(sar1 != 0) then
# User_Func_Sar = sar1;
if sar1 > sar1[1] Then
plot1(sar1,"파리볼릭",BLUE);
else
plot1(sar1,"파리볼릭",blue);
Plot2(C,"종가");
2021-06-22
1878
글번호 150168
답변완료
시스템 질문입니다
지수선물 적용예정 입니다
1.N봉 전의 주가 보다 현재 주가가 더 높으면 매수
N봉 전의 주가 보다 현재 주가가 더 낮으면 매도
2. N일 전의 주가 보다 현재 주가가 더 높으면 매수
N일 전의 주가 보다 현재 주가가 더 낮으면 매도
신속한 답변 바랍니다
2021-06-22
1896
글번호 150167
답변완료
수식 질문드립니다.
예를들어서 현재 buy 포지션 유지중인데,
익절이 20 pt 입니다.
그런데 익절 나오기전에 또 buy 신호가 뜬다면
여기서 추가로 한개 더 진입하게할수없나요?
사진에서 피라미딩하용하면 하루에 몰아서 다 때려넣는데,
이렇게 말고
신호뜨면 하루 1개만 추가진입하게하고 싶습니다.
반대신호 뜨면 다 청산하고 다시 한개만 진입하고,,
data
---------------------
#
input : StartTime(90500),EndTime(151000);
Input : s1(120), s2(200);
//input : s11(28),s12(265);
input : 손절(5.6);
input : 익절(30.2);
//input : way(9),road(-8),road2(-8);
//input : 최소이익(2),손실범위(0.1);
input : bf11(0.2),sf11(-0.85),bf12(0.85),sf12(-0.5);
input : bf13(0.8),sf13(-0.8),bf14(0.5),sf14(-0.32);
//var : condi(0);
var : Tcond(false,Data1);
var : C2(0,Data2);
var : C3(0,Data3);
var : C4(0,Data4);
var : C5(0,Data5);
var : C6(0,Data6);
var : C7(0,Data7);
value1 = ma(c2,s1);
value2 = ma(c2,s2);
//value12 = Ma(c2,600);
//value13 = Ma(c3,600);
//value14 = Ma(c4,600);
//value15 = Ma(c5,600);
value12 = Average(c2,600);
value13 = Average(c3,600);
value14 = Average(c4,600)*4;
value15 = Average(c5,600)*4;
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
C2 = Data2(c);
C3 = Data3(c);
C4 = Data4(c);
C5 = Data5(c);
C6 = Data6(c);
C7 = Data7(c);
if Tcond == true Then
{
If #CrossUp(Value3,0)
value13 < -0.32 and (value14 < -0.32 or value14>0.32)
//and c6+c7>road #39.62
//and c2<bf11
//and c3<bf12 #47.86
//and c4<bf13
//and c5<bf14
Then
{
Buy();
}
If #CrossDown(Value3,0)
value13 > 0.32 and (value14 < -0.32 or value14 > 0.32)
//and c6+c7<-road
//and c2>sf11
//and c3>sf12
//and c4>sf13
//and c5>sf14
Then
{
Sell();
}
}
#
#SetStopEndofday(EndTime);
SetStoploss(손절,PointStop);
SetStopProfittarget(익절,PointStop);
#SetStopContract();#생략가능
#SetStopTrailing(손실범위 , 최소이익 , PointStop);
2021-06-22
1710
글번호 150161
답변완료
수식작성
input : StartTime(70000),EndTime(55000),Xtime(55500);
var : Tcond(false),entry(0);
var : B1(0),B2(0),BX1(0),BX2(0);
var : S1(0),S2(0),SX1(0),SX2(0);
if sdate != sDate[1] Then
SetStopEndofday(Xtime);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
SetStopEndofday(0);
entry = 0;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
B1 = DayLow(1)+(DayHigh(1)-DayLow(1))*5.638;
B2 = DayLow(1)+(DayHigh(1)-DayLow(1))*5.939;
BX1 = DayLow(1)+(DayHigh(1)-DayLow(1))*1.400;
BX2 = DayHigh(1);
S1 = DayHigh(1)+(DayHigh(1)-DayLow(1))*-0.118;
S2 = DayHigh(1)+(DayHigh(1)-DayLow(1))*-0.230;
SX1 = DayLow(1)+(DayHigh(1)-DayLow(1))*-0.236;
SX2 = DayLow(1)+(DayHigh(1)-DayLow(1))*-0.764;
if Tcond == true and entry < 1 Then
{
if (MarketPosition == 0 or (MarketPosition == 1 and MaxEntries == 1)) Then
{
if L > B1 Then
Buy("b1",AtLimit,B1);
if L > B2 Then
Buy("b2",AtLimit,B2);
}
if MarketPosition == 1 Then
{
ExitLong("bx1",AtLimit,BX1,"B1");
ExitLong("bx2",AtLimit,BX2,"B2");
}
if (MarketPosition == 0 or (MarketPosition == -1 and MaxEntries == 1)) Then
{
if H < S1 Then
Sell("S1",AtLimit,S1);
if H < S2 Then
Sell("s2",AtLimit,S2);
}
if MarketPosition == -1 Then
{
ExitShort("sx1",AtLimit,SX1,"S1");
ExitShort("sx2",AtLimit,SX2,"S2");
}
}
SetStopProfittarget(PriceScale*300,PointStop);
SetStopLoss(PriceScale*30,PointStop);
--------------------------------
늘 감사드립니다.
s1 (-0.118) 진입후 전일 피보나치 전체 수열의 0.236로 청산되는
수식 작성에 어려움이 있네요
수정 부탁드립니다.
2021-06-22
1897
글번호 150160
답변완료
월봉의 켈트너 채널, 볼린저 밴드
안녕하세요?
월봉의 켈트너 채널, 볼린저 밴드를 일봉에서 사용하고 싶은데요.
공식 도움 부탁드립니다.
너무 오래걸리시는 건이면 패스해주세요...
감사합니다~
2021-06-22
1982
글번호 150159
답변완료
시스템식 문의 드립니다.
예전에 요청드렸던 시스템 식입니다.
여기에 추가적인 조건을 넣고 싶은데 계속 실패해서 이렇게 요청드리게 되었습니다.
위 그림에도 적혀있다 시피
1차 매수 타점은 당일 시가 X 0.97 (-3%)하락했을 경우 인데
전일 상한가를 쳤을 경우 또는 당일 오후 1시 이후 에는
1차 매수 타점이 당일 시가 X 0.94 (-6 %)
이 되록 바꾸고 싶습니다.
지난번에 요청드린 시스템식도 같이 올려드리오니 부탁드리겠습니다.
항상 감사드리고 있습니다.
----------------------------------------------
var : entry(0),AP(0);
if Bdate != Bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if MarketPosition == 0 Then
{
if entry == 0 or
(entry >= 1 and (sTime < 115000 or Highest(H,BarsSinceExit(1)) < AP*1.06) and IsExitName("Bp1",1) == true) Then
Buy("b1",AtLimit,DayOpen*0.97);
}
if (MarketPosition == 1 and MaxEntries == 1 and IsEntryName("b1") == true) or
(MarketPosition == 0 and entry >= 1 and IsExitName("Bp2",1) == true and (sTime < 115000 or Highest(H,BarsSinceExit(1)) < AP*1.06)) Then
Buy("b2",AtLimit,DayOpen*0.94);
if (MarketPosition == 1 and MaxEntries == 2 and IsEntryName("b1") == true) or
(MarketPosition == 1 and MaxEntries == 1 and IsEntryName("b2") == true) Then
Buy("b3",AtLimit,DayOpen*0.91);
if MarketPosition == 1 Then
{
AP = AvgEntryPrice;
if MaxEntries == 1 and IsEntryName("b1") == true Then
{
ExitLong("bp1",AtLimit,AP*1.02);
if TimeToMinutes(sTime) >= TimeToMinutes(EntryTime)+60 Then
ExitLong("bx1");
}
if (MaxEntries == 2 and IsEntryName("b1") == true) or
(MaxEntries == 1 and IsEntryName("b2") == true) Then
{
ExitLong("bp2",AtLimit,AP*1.01);
if TimeToMinutes(sTime) >= TimeToMinutes(EntryTime)+60 Then
ExitLong("bx2");
}
if (MaxEntries == 3 and IsEntryName("b1") == true) or
(MaxEntries == 2 and IsEntryName("b2") == true) Then
{
ExitLong("bp3",AtLimit,AP*1.005);
if TimeToMinutes(sTime) >= TimeToMinutes(EntryTime)+60 Then
ExitLong("bx3");
}
ExitLong("bl",AtStop,DayOpen*0.88);
}
SetStopEndofday(151800);
-----------------------------------------------------------------------------
2022-02-27
2235
글번호 150158
답변완료
종목 검색 후 특정 조건 연동 관련 질문
안녕하세요,
1) 3분봉으로 A 조건에 부합하는지 검색
2) 당일 일봉 B 조건에도 부합 (예. 현재가가 일봉 5일선 위에 있는지 확인 if(Close > ma(c,50))
1) 2) 조건 둘다 해당하는 경우에만 대응을 하려고 하는데요,
예스스팟으로 다음과 같이 구현이 될까요?
1. 1) 조건으로 검색
2. 검색결과로 나온 종목들에 2)를 시스템으로 적용하여 조건부합시 매수신호 발생
3. 매수신호 받아서 대응 처리
이런식으로 테스트로 만들어봤는데
일봉으로 시스템을 적용하면 적용시점에 바로 조건부합해서 매수신호가 들어가도
예스스팟에서 매수신호를 받지 못하는것 같아서요..
분봉은 해당분이 끝나면 봉이 완성되는데 일봉은 그날 장마감이 되어야 완성되는것 같아서..
이런 경우 어떻게 풀면 좋을지 조언 부탁드립니다.
2021-06-22
2005
글번호 150157