커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1692
글번호 230811
답변완료
수식수정 문의
1. 상방 진입조건에 60선위에 5가 상방 변곡시 진입인데.
이때 조건을
1) 진입 시점 이전에 60과 240 이 데드이후에 60선이 5파이상이거나(상승변곡이 3번 이상)
2) 60선이 쌍바닥이 나왔을때
- (쌍바닥의 정의는 :
1)이평선이 꺽였을때의 지점의 이평선 가격을 비교
2)저점이 더 낮아진 쌍바닥이더라도 5틱 이내 or 국내선물 기준 0.15pt 이내는 쌍바닥으로 정의합니다)
3)60선이 턴한 지점간의 즉, 쌍바닥간의 봉의 개수는 30개 이상 나야함
이 조건을 추가하고 싶습니다
///////////////////////////////////////////
var : Period1(3),Period2(10),Period3(30),Period4(120),X5(0),X20(0),X60(0),XP(0),X(0),Y(0),Z(0),Q(0),Mav1(0), Mav2(0),Mav3(0),Mav4(0);
Input : Left(3),right(3);
var : B5(0),BP60(0),B20(0),B60(0),S5(0),S20(0),S60(0),SP60(0),Bcnt5(0),Bcnt20(0),Bcnt60(0),BcntP60(0), Scnt5(0), Scnt20(0), Scnt60(0),ScntP60(0),H1(0),H2(0),L1(0),L2(0);
InPUT : 진입시작시간(090000), 매매종료시간(153000);
if Bdate != Bdate[1] Then
{
Condition1 = False;
Condition2 = False;
}
Var26 = ema(Ema(Ema(c,period1),period1),period1); //ma(c,period1); //5선
Var27 = ema(Ema(Ema(c,period2),period2),period2); //20선
Var28 = ema(Ema(Ema(c,period3),period3),period3); //60선
Var29 = ema(Ema(Ema(c,period4),period4),period4); //240선
if CrossUp(Var26,Var27) Then
X5 = 1; //5-20 cross
if CrossDown(Var26,Var27) Then
X5 = -1;
if CrossUp(Var27,Var28) Then
X20 = 1; //20-60 cross
if CrossDown(Var27,Var28) Then
X20 = -1;
if CrossUp(Var28,Var29) Then
X60 = 1; //60-240 cross
if CrossDown(Var28,Var29) Then
X60 = -1;
if CrossUp(Var26,Var28) Then
XP = 1; //5-60 cross
if CrossDown(Var26,Var28) Then
XP = -1;
if Var26 > var26[1] Then
X = 1;
if Var26 < var26[1] Then
X = -1;
if Var27 > var27[1] Then // X5 : 5-20 Cross X : 5선
Y = 1; // X20 : 20-60 Cross Y : 20선
if Var27 < var27[1] Then // X60 : 60-240 cross Z : 60선
Y = -1; // XP : 5-60 cross
if Var28 > var28[1] Then
Z = 1;
if Var28 < var28[1] Then
Z = -1;
if X == 1 and X != X[1] and Bdate == Bdate[1] Then
Condition1 = true;
if X == -1 and X != X[1] and Bdate == Bdate[1] Then
Condition2 = true;
//////////////////////상방기준//////////////////
if XP == 1 and X == 1 and Condition1 == true Then //5-60 정배열 & 5상승
{
if X != X[1] Then //5선이 상승변곡 이면 B = 1
{
BP60 = 1;
} //5선이 상승변곡 & 20선 상승 & 5선 20선위 & 몸통이 5 BC 면 B =2
if BP60 == 1 and Y == 1 and Var26 > Var27 and C > O and (C+O)/2 >= var26 Then
{
BP60 = 2;
}
}
else
BP60 = 0;
if sDate == 20210429 and sTime < 92000 Then
MessageLog("%.2f",BP60);
//////////////////////하방기준//////////////////
if XP == -1 and X == -1 and Condition2 == true Then
{
if X!= X[1] Then
{
SP60 = 1;
}
if SP60 == 1 and Y == -1 and Var26 < Var27 and C < O and (C+O)/2 < var26 Then
{
SP60 = 2;
}
}
else
SP60 = 0;
//////////////////////////상방시그널/////////////////
if sTime >= 진입시작시간 and sTime <= 매매종료시간 and
XP == 1 Then
{
if XP != XP[1] Then
BcntP60 = 0;
if BP60 == 2 and BP60 != BP60[1] Then
{
BcntP60 = BcntP60+1;
if BcntP60 <= 1 Then
Buy("BP60");
}
}
////////////////////////하방 시그널//////////////////
if sTime >= 진입시작시간 and sTime <= 매매종료시간 and
XP == -1 Then
{
if XP != XP[1] Then
ScntP60 = 0;
if SP60 == 2 and SP60 != SP60[1] Then
{
ScntP60 = ScntP60+1;
if ScntP60 <= 1 Then
Sell("SP60");
}
}
if MarketPosition == 1 Then
{
if X5 == 1 and CountIf(X5 == -1,BarsSinceEntry) == 0 and
X == -1 and CountIf(X == -1 and X != X[1],BarsSinceEntry) >= 2 and (C+O)/2 <= Var27 then
ExitLong("콜청1",AtMarket);
if X5 == -1 and X == -1 and CountIf(X == -1 and X != X[1],BarsSinceEntry) >= 1 and (C+O)/2 <= Var27 Then
ExitLong("콜정2",AtMarket);
}
if MarketPosition == -1 Then
{
if X5 == -1 and CountIf(X5 == 1,BarsSinceEntry) == 0 and
X == 1 and CountIf(X == 1 and X != X[1],BarsSinceEntry) >= 2 and (C+O)/2 >= Var27 Then
ExitShort("풋청1",AtMarket);
if X5 == 1 and X == 1 and CountIf(X == 1 and X != X[1],BarsSinceEntry) >= 1 and (C+O)/2 >= Var27 Then
ExitShort("풋정2",AtMarket);
}
2021-05-07
1212
글번호 148792
답변완료
수식 문의
1. 입력한 시간에
data2 양봉 and data3 양봉 and data4 음봉 then
buy();
- 09시 입력결과와 13시 입력결과를 비교코자 함
2. 입력한 시간부터
data2 연속양봉 2개 and data3 연속양봉 3개 and data4 연속음봉 4개 then
buy();
- 09시 입력결과와 13시 입력결과를 비교코자 함
3. 해외선물 수식
- 데이트레이딩용
- 금일 오전 9시부터 익일 오전8시까지 거래할 수 있는 시간 수식 부탁드립니다.
2021-05-07
1183
글번호 148791
답변완료
수식도움좀 부탁드려요 ,,ㅜㅡㅜ
종가가 볼린저밴드 360선 돌파 종목검색식 부탁드려요ㅜㅡㅜ
2021-05-07
1159
글번호 148789
답변완료
손절식 추가요
안녕하세요
늘 감사합니다
아래식에서요
매수1 매도1 는 손절 65틱
매수2 매도2 는 손절 100틱 수정좀 부탁합니다
그리고 모든신호진입해서 고점대비 100틱 이상 내령오면 진입청산 좀 추가해주세요
외부 변수로 부탁합니다
input : 완전청산 (50);
input : 손절가 (15);
var : T1(0),T2(0);
#var : tX(0),BH(0),SH(0);
var : T21(0),T26(0),T23(0),T24(0),T25(0);
var : T11(0),T22(0),T33(0),T44(0),T55(0);
var : Tcond(false); # 시간제한
var : mav1(0),mav2(0),Lcnt(0),Hcnt(0),BH(0),SL(0);
var : T(0),S(0),idx(0),entry2(False); # 딱 한번 매매
var1 = ma(c,0);
var2 = ma(C,0);
var3 = ma(C,0);
var4 = ma(c,0);
if (sdate != sdate[1] and stime >= 101600) or
(sdate == sdate[1] and stime >= 101600 and stime[1] < 101600) Then
{
Tcond = true;
idx = 0;
entry2 = true;
}
idx = idx+1;
if (sdate != sdate[1] and stime >= 172000) or
(sdate == sdate[1] and stime >= 172000 and stime[1] < 172000) Then
{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
if idx <= 10 then
{
if MarketPosition != 0 and MarketPosition != MarketPosition[1] and
(IsEntryName("매수1") == true or IsEntryName("매도1") == true) Then
entry2 = False;
}
if var1 > var2 and var1 > var3 and var1 > var4 and var4 > var2 Then
T1 = 1;
if var1 < var2 and var1 < var3 and var1 < var4 and var4 < var2 Then
T1 = -1;
var5 = ma(C,30);
if CrossUp(C,var5) Then
{
T = 1;
S = 0;
}
if CrossDown(C,var5) Then
{
T = -1;
S = 0;
}
if Tcond == true then
{
if T1 == 1 and T1[1] == -1 Then
buy("매수1");
if T1 == -1 and T1[1] == 1 Then
sell("매도1");
if T == 1 Then
{
S = S+1;
if idx >= 10 and S == 10 Then
{
if entry2 == true Then
{
Buy("매수2");
}
Entry2 = False;
}
}
if T == -1 Then
{
S = S+1;
if idx >= 10 and S == 10 then
{
if entry2 == true Then
{
Sell("매도2");
}
entry2 = False;
}
}
}
if MarketPosition == 1 Then
{
ExitLong("bx5",AtLimit,EntryPrice+PriceScale*완전청산,"",5,1);
ExitLong("bx6",AtStop,EntryPrice-PriceScale*손절가,"",5,1);
}
Else
Lcnt = 0;
if MarketPosition == -1 Then
{
ExitShort("sx5",AtLimit,EntryPrice-PriceScale*완전청산,"",5,1);
ExitShort("sx6",AtStop,EntryPrice+PriceScale*손절가,"",5,1);
}
Else
Hcnt = 0;
2021-05-07
1101
글번호 148787
답변완료
문의합니다
input : 전환선기간(9),기준선기간(26),선행스팬2기간(52),시작시간(080000),종료시간(230000);
Var : 기준선(0), 전환선(0), 선행스팬1(0), 선행스팬2(0),구름상단(0),구름하단(0),Tcond(false);
전환선 = (Highest(H, 전환선기간) + Lowest(L, 전환선기간)) / 2;
기준선 = (Highest(H, 기준선기간) + Lowest(L, 기준선기간)) / 2;
선행스팬1 = (전환선[25] + 기준선[25]) / 2 ;
선행스팬2 = (Highest(H, 선행스팬2기간)[25] + Lowest(L, 선행스팬2기간)[25]) / 2;
구름상단 = max(선행스팬1,선행스팬2);
구름하단 = Min(선행스팬1,선행스팬2);
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간) Then
Tcond = true;
if (sdate != sdate[1] and stime >= 종료시간) or
(sdate == sdate[1] and stime >= 종료시간 and stime[1] < 종료시간) Then{
Tcond = false;
if MarketPosition == 1 Then
exitlong();
if MarketPosition == -1 Then
ExitShort();
}
if Tcond == true then{
if crossup(기준선,구름상단) Then
buy();
if CrossDown(기준선,구름하단) Then
sell();
}
위 수식의 발생시그널은 그대로 두고
매수는 발생시그널 봉의 저가까지 내려오는 봉에서 매수(15봉이내.변수처리).
매도는 발생시그널 봉의 고가까지 올라오는 봉에서 매도.(15봉이내, 변수처리)
수익(50틱) 및 손절(20틱) 수식추가하여 주시고 트레일링 스탑기능도 가능하면
추가 부탁드립니다.
종료시간에 맞추어 진입중인 모든계약 청산토록 설정바랍니다
만일, 발생시그널을 그대로 둘수 없다면 삼각표시(3개)의 지표추가하여주시기 바랍니다
감사합니다
2021-05-07
1377
글번호 148786
답변완료
원하던 시스템신호가 안되요.
안녕하세요
예스스탁입니다.
1
되도록 1분봉과 같은 작은주기에 적용하시면 됩니다.
2
랭귀지의 수식은 차트의 신호발생을 담당합니다.
신호가 발생하면 실제 주문가격은 시스템 트레이딩 설정창에서 매매가격에서 지정한 가격으로
주문이 집행되므로 시장가는 설정창에서 지정하시면 됩니다.
3
var : entry(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 NextBarSdate != sDate Then
{
Buy("b1",AtStop,NextBarOpen+1);
Sell("s1",AtStop,NextBarOpen-1);
}
Else
{
if entry < 1 Then
{
if MarketPosition == 0 and DayHigh < DayOpen+1 Then
Buy("b",AtStop,DayOpen+1);
if MarketPosition == 0 and DayLow > DayOpen-1 Then
Sell("s",AtStop,DayOpen-1);
}
}
SetStopLoss(1,PointStop);
SetStopProfittarget(1,PointStop);
SetStopLoss(153000);
즐거운 하루되세요
> 만복이 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
아래 문의한것에 대한 답변주신걸 적용해보니 제대로 안되는것 같아요.
시가기준 1포인트 위에서 매수하고 익절과 손절을 1포인트로 잡는데, 아래로 1포인트 가도 청산이 안되고,
매도인데 매수신호가 나타나고 뭔가 확실히 이상해요.
=====================================================
> 국내선물에서,
당일시가에서 1포인트 위로 상승하면 봉완성과 관계없이 가격도달시 바로 매수하고 익절과 손절은 1포인트로 잡는것
또 당일시가에서 1포인트 아래로 하락하면 매도하고 봉완성과 관계없이 가격도달시 익절과 손절은 역시 1포인트로 잡는것을 좀 부탁드립니다.
단, 여기서 위로든 아래로든 1포인트 익절이든 손절이든 청산이 되면, 그 날은 더이상 매매가 되지 않도록 하는것을 원합니다.
주문유형은 전부 시장가로 하시면 되겠습니다.
이게 시스템식이 가능한가요? 가능하다면 좀 부탁드립니다.
2021-05-07
1496
글번호 148785
답변완료
수식작성
input : StartTime(220000),EndTime(035000),진입횟수(5),익절틱수(40),손절틱수(25);
var : Tcond(false),entry(0);
if StartTime < EndTime Then
{
SetStopEndofday(EndTime);
}
Else
{
if sDate != sDate[1] Then
SetStopEndofday(EndTime);
}
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
{
if StartTime > EndTime Then
SetStopEndofday(0);
Tcond = true;
entry = 0;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Tcond == true Then
{
if MarketPosition == 0 and C > O and entry < 진입횟수 Then
{
Buy("b");
}
if MarketPosition == 0 and C < O and entry < 진입횟수 Then
{
Sell("s");
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
----------------------------
당일목표수익 120틱을 수식어에 추가로 부탁드립니다.
2021-05-07
1201
글번호 148783
답변완료
늘 수고많습니다
1)10분 차트서
어제 첫봉 거래량과 오늘 첫봉 거래량을 나타내는 지표를 만들고 싶습니다.
부탁드립니다
2) 일봉서 5.20.60 이동평균선 10% 이내로 밀집한 종목 검색하고 싶습니다
미리 감사드립니다
2021-05-07
1090
글번호 148782
답변완료
수정 의뢰 드립니다!
안녕하세요!
아래 키움 수식을 예스로 부탁드립니다!
감사드립니다!
빨강색선으로 표시
cond=eavg(c,10)>eavg(c,50) and eavg(c,20)>eavg(c,50) ;
valuewhen(1,crossup(cond,0),h)
초록색선으로 표시
cond=eavg(c,3)>eavg(c,20) and eavg(c,5)>eavg(c,20) ;
valuewhen(1,crossup(cond,0),l)
2021-05-07
1385
글번호 148781