커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
1693
글번호 230811
지표
답변완료

재문의드립니다.

안녕하세요. 아래수식을 돌리면 매매가 일어나지가 않습니다. 수정을 부탁드립니다. 그리고 if SPrice == 0 and Bdate == bdate[2] and C > mav and C <= O and C[1] > O[1] and C[2] > O[2] and C <= DayClose(1)*1.15 Then SPrice = C; 수식에서 SPrice = C; 가 아니고 종가가 아니고 시가이므로 SPrice = O; 인것 같습니다. 안녕하세요 예스스탁입니다. input : 시작날짜(20210429),시작시간(110000); input : 금액(3000000),진입횟수(3); var : mav(0),SPrice(0),tcond(False); var : 상한가(0), UpLimit(0),entry(0); var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0); if sDate == 시작날짜 and sTime >= 시작시간 Then Tcond = true; if date >= 19981207 then { if date < 20050328 && CodeCategory() == 2 then UpLimit = (BP[0] * 1.12); Else if date >= 20050328 and date < 20150615 Then UpLimit = (BP[0] * 1.15); Else UpLimit = (BP[0] * 1.30); if CodeCategory() == 2 then { if date >= 20030721 then { up1 = int(UpLimit/100+0.00001)*100; up2 = int(UpLimit/100+0.00001)*100; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/10+0.00001)*10; up7 = int(UpLimit/1+0.00001)*1; } } Else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } if CodeCategory() == 1 || CodeCategory() == 2 then { if sdate < 20101004 Then { If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up6); } Else { If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up7); } } else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF 상한가 = up6; } } mav = ma(C,33); if Bdate != Bdate[1] Then { SPrice = 0; entry = 0; } if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or (MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then entry = entry+1; if SPrice == 0 and Bdate == bdate[2] and C > mav and C <= O and C[1] > O[1] and C[2] > O[2] and C <= DayClose(1)*1.15 Then SPrice = C; if MarketPosition == 0 and Tcond == true and SPrice > 0 and CrossUp(C,SPrice) and entry < 0 and 진입횟수 Then Buy("b",OnClose,DEf,Floor(금액/C)); if MarketPosition == 1 Then { Sprice = 0; if TimeToMinutes(sTime) >= TimeToMinutes(EntryTime(0))+60 Then ExitLong("bx"); if CurrentContracts == MaxContracts Then ExitLong("bp",AtLimit,EntryPrice*1.05,"",Floor(MaxContracts*0.5),1); Else ExitLong("be",AtStop,EntryPrice); ExitLong("bu",AtLimit,상한가); } SetStopLoss(3,PercentStop); SetStopProfittarget(15,PercentStop); SetStopEndofday(151500); 즐거운 하루되세요 > 종호 님이 쓴 글입니다. > 제목 : 조건식 수정 문의합니다 > 아래에서 주문시 300만원 해당되게 매수되도록 수정하고요. 매수하고 나서 수익 청산이던지 본절,손절 어떤 청산이던지 매수 잔고가 0 이 되면 초기화하도록 부탁드립니다. 초기화 이후 조건이 만족하면 또 반복 메수되고 청산하도록 하고요. 1일에 최대 매수 횟수를 3회만 되도록 부탁드립니다. 안녕하세요 예스스탁입니다. 날짜시간을 지정해서 해당일시 이후에 신호가 발생하게 하는 방법뿐이 없습니다. input : 시작날짜(20210429),시작시간(110000); var : mav(0),SPrice(0),tcond(False); var : 상한가(0), UpLimit(0); var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0); if sDate == 시작날짜 and sTime >= 시작시간 Then Tcond = true; if date >= 19981207 then { if date < 20050328 && CodeCategory() == 2 then UpLimit = (BP[0] * 1.12); Else if date >= 20050328 and date < 20150615 Then UpLimit = (BP[0] * 1.15); Else UpLimit = (BP[0] * 1.30); if CodeCategory() == 2 then { if date >= 20030721 then { up1 = int(UpLimit/100+0.00001)*100; up2 = int(UpLimit/100+0.00001)*100; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/10+0.00001)*10; up7 = int(UpLimit/1+0.00001)*1; } } Else { up1 = int(UpLimit/1000+0.00001)*1000; up2 = int(UpLimit/500+0.00001)*500; up3 = int(UpLimit/100+0.00001)*100; up4 = int(UpLimit/50+0.00001)*50; up5 = int(UpLimit/10+0.00001)*10; up6 = int(UpLimit/5+0.00001)*5; up7 = int(UpLimit/1+0.00001)*1; } if CodeCategory() == 1 || CodeCategory() == 2 then { if sdate < 20101004 Then { If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up6); } Else { If BP >= 500000 Then 상한가 = up1; Else If BP >= 100000 Then 상한가 = iff(up2>=500000, up1, up2); Else If BP >= 50000 Then 상한가 = iff(up3>=100000, up2, up3); Else If BP >= 10000 Then 상한가 = iff(up4>=50000, up3, up4); Else If BP >= 5000 Then 상한가 = iff(up5>=10000, up4, up5); Else If BP >= 1000 Then 상한가 = iff(up5>=5000, up5, up6); Else 상한가 = iff(up6>=1000, up6, up7); } } else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF 상한가 = up6; } } mav = ma(C,33); if Bdate != Bdate[1] Then SPrice = 0; if SPrice == 0 and Bdate == bdate[2] and C > mav and C <= O and C[1] > O[1] and C[2] > O[2] and C <= DayClose(1)*1.15 Then SPrice = C; if Tcond == true and SPrice > 0 and CrossUp(C,SPrice) Then Buy(); if MarketPosition == 1 Then { if TimeToMinutes(sTime) >= TimeToMinutes(EntryTime(0))+60 Then ExitLong("bx"); if CurrentContracts == MaxContracts Then ExitLong("bp",AtLimit,EntryPrice*1.05,"",Floor(MaxContracts*0.5),1); Else ExitLong("be",AtStop,EntryPrice); ExitLong("bu",AtLimit,상한가); } SetStopLoss(3,PercentStop); SetStopProfittarget(15,PercentStop); SetStopEndofday(151500); 즐거운 하루되세요 > 종호 님이 쓴 글입니다. > 제목 : 문의합니다. > 주식종목을 검토하다 장중에 좋은 주식이 나오면 장중 시간에 들어가서 시스템으로 매매하고 싶습니다. 그런데 예를 들어 11시에 시스템을 돌렸다면 11시 이전에 매수신호가 나온 것이 있을 수 있어서 피라미딩은 안한다는 전제하에 11시 이후에는 다시 진입을 할 수가 없다는 것입니다. 그래서 input 변수로 날자와 시간을 변수로 집어넣고 11시 이후로 시간을 변경하고서 시스템을 가동되도록 하면 되겠다는 생각이 들었습니다. 이 방법밖에 없는지요? 다른 방법이 있으면 가르쳐 주시고요. 장중 중간에 들어가서도 작동할 수 있도록 부탁드립니다. 이하 매매 방법입니다. 매수 준비 : 3분봉에서 주가가 주기가 33 이평선 위에 있고 현재봉이 도지 또는 음봉이 생기면 현재봉 바로 직전 첫째봉과 둘째봉이 연속 양봉이어야 합니다. 이 때 현재봉의 도지나 음봉의 시가를 매수기준가 라고 정의합니다. 매수 : 매수 기준가가 전날의 일봉 종가 대비 115% 이하이고 현재가가 매수 기준가를 돌파할 때 매수합니다. 손절 :3% 손실시 손절합니다. 이익청산 : 매수 후 5% 이익시 절반청산하고 이후에 하락하면 매수가 본전에서 나머지 전량청산합니다. 그리고 나머지 절반을 일단 상한가 매도를 걸어놓고 또 15 % 이익이 나면 나머지 전량 청산합니다. 안팔리면 매수이후에 1시간 될 때 전량 청산하고 메수후 혹시 1시간 이전에 장이 끝나게 되면 종가에 전량 청산합니다.
프로필 이미지
종호
2021-05-04
1083
글번호 148656
시스템
답변완료

수식 질문드립니다.

아래는 이상없이 잘 되고 있습니다. 혹시 30분봉의 (20,2)를 1분봉에 그릴수있는지 궁금합니다. 부탁드립니다. 감사합니다!! ## 분봉에서 일봉 볼린져밴드 계산 시작 input : dayPeriod(20),dayDv(2); Input : Period7(1000); var : daysum(0),daycnt(0),dayma(0),daySumSqrt(0),dayStdv(0); var : dayBBup(0),dayBBdn(0),dayCounter(0); var1 = ma(C,Period7); #일봉 이동평균 계산 daysum = 0; for daycnt = 0 to dayPeriod-1{ daysum = daysum + DayClose(daycnt); } dayma = daysum/dayPeriod; #표준편차 계산 If DayClose(dayPeriod) != 0 Then { daySumSqrt = 0; For dayCounter = 0 To dayPeriod - 1 { daySumSqrt = daySumSqrt + (DayClose(dayCounter) - dayma)^2; } dayStdv = SquareRoot(daySumSqrt / dayPeriod); } Else dayStdv = 0; # 일봉 볼린져밴드 계산 dayBBup = dayma + (dayDv * dayStdv); dayBBdn = dayma - (dayDv * dayStdv); plot1(dayBBup ,"상단"); plot2(dayma,"중단"); plot3(dayBBdn,"하단"); Plot4(var1, "777");
프로필 이미지
캣피쉬
2021-05-04
1067
글번호 148655
지표
답변완료

수식작성

진행중인 캔들 9개중 5개가 양봉으로 봉 완성시 5분선 위에 있을때 buy 진입신호 진행중인 캔들 9개중 5개가 음봉으로 봉 완성시 5분선 아래에 있을때 sell 진입신호의 수식어를 부탁드립니다. 매매시간은 10 :30 ~ 21: 30 그리고 22 :00 ~ 익일 03 :50 각각 부탁 드립니다 익절 70틱 손절 20틱 목표수익 120틱
프로필 이미지
푸른
2021-05-04
981
글번호 148654
시스템
답변완료

수식작성

진행중인 캔들 9개중 5개가 양봉으로 봉 완성시 5분선 위에 있을때 buy 진입신호 진행중인 캔들 9개중 5개가 음봉으로 봉 완성시 5분선 아래에 있을때 buy 청산신호의 수식어를 부탁드립니다. 매매시간은 10 :30 ~ 21: 30 그리고 22 :00 ~ 익일 03 :50 각각 부탁 드립니다 익절 70틱 손절 20틱 목표수익 120틱 --------------------------------------- 진행중인 캔들 9개중 5개가 음봉으로 봉 완성시 5분선 아래에 있을때 sell 진입신호 진행중인 캔들 9개중 5개가 양봉으로 봉 완성시 5분선 위에 있을때 sell 청산신호의 수식어를 부탁드립니다. 매매시간은 10 :30 ~ 21: 30 그리고 22 :00 ~ 익일 03 :50 각각 부탁 드립니다 익절 70틱 손절 20틱 목표수익 120틱
프로필 이미지
푸른
2021-05-04
894
글번호 148653
시스템
답변완료

검토좀 부탁합니다

안녕하세요 게시글 72215 와 기존 식을 추가 했습니다 이렇게 해도 저렇게 작동이 되지 않습니다 검토좀 해주시고요 문제점 1 틱차트 사용합니다 시간제한에 문제가 있습니다 문제점 2 문제점1의 문제를 해결하고자 게시글 72215 를 추가했는데도 역시 문제점이 해결되지 않습니다 참고로 봉갯수도 변경해보아도 같네요 이미지를 보시면 특정 이평선 위에 아래를 기준은 준것입니다 갯수제한 때문인지 작동이 되지 않습니다 수정좀 부탁합니다 input : 완전청산 (260); input : 손절가 (65); 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; if (sdate != sdate[1] and stime >= 1720000) or (sdate == sdate[1] and stime >= 1720000 and stime[1] < 1720000) Then { Tcond = false; if MarketPosition == 1 Then ExitLong(); if MarketPosition == -1 Then ExitShort(); } if Tcond == true then { 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; if T1 == 1 and T1[1] == -1 Then buy("매수"); if T1 == -1 and T1[1] == 1 Then sell("매도"); #################################################### #딱 한번 매매 if Bdate != Bdate[1] Then { idx = 0; entry2 = true; } idx = idx+1; if idx <= 10 then { if MarketPosition != 0 and MarketPosition != MarketPosition[1] and (IsEntryName("매수1") == true or IsEntryName("매도1") == true) Then entry2 = False; } var5 = ma(C,100); if CrossUp(C,var5) Then { T = 1; S = 0; } if CrossDown(C,var5) Then { T = -1; S = 0; } if T == 1 Then { S = S+1; if idx >= 10 and entry2 == true and S == 10 Then { Entry2 = False; Buy("매수2"); } } if T == -1 Then { S = S+1; if idx >= 10 and entry2 == true and S == 10 Then { entry2 = False; Sell("매도2"); } } } #매수 손절식 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;
프로필 이미지
kjdkdh
2021-05-04
893
글번호 148652
시스템
답변완료

색상 좀 요청 드립니다.

* 항상 많은 도움에 고맙습니다. * 아래 지표 스톡에서 "StoD" 지표가 80 이상이면 "RED" 80~ 20 이면 무색 20 이하면 GREEN 색상으로 부탁 좀 드립니다. Input : Period(12), Period1(5), Period2(5); var : StoK(0),StoD(0); StoK = StochasticsK(Period,Period1); StoD = StochasticsD(Period,Period1,Period2); Plot1(StoK, "StochasticsK"); Plot2(StoD, "StochasticsD"); PlotBaseLine1(20, "기준선20"); PlotBaseLine2(80, "기준선80"); 고맙습니다.
프로필 이미지
요타
2021-05-03
885
글번호 148651
지표

러블리 님에 의해서 삭제되었습니다.

프로필 이미지
러블리
2021-05-03
6
글번호 148650
지표
답변완료

도무지 이해가 되지 않습니다

var1 = dayopen(0); if C > var1 and var1 > O Then Buy("b"); if C < var1 and var1 < O Then Sell("s"); 분봉에서 예를 들어서 60분봉에서 일봉의 시가선을 그리고 싶다고 말씀 드렸는데 지표가 아닌 시스템으로 아무 의미가 없는 수식을 작성해 주셨습니다 전에 제가 질문 하셨던 거 기억하시죠? 하루가 분봉에서 일봉의 시가선을 구현하고 싶습니다 참고로 예스코인트레이더 쓰고 있씁니다 하루종일 장이 돌아 갑니다 1년 내내 쉬지 않고 장이 돌아 갑니다 방법을 찾아서 강구해 주셨으면 합니다 늘 감사드립니다 ()
프로필 이미지
백스톰
2021-05-03
656
글번호 148649
지표
답변완료

산식검토 72242번 계속입니다

작성해주신 산식이 그림에서 보듯이 일부는 수평을 보이고 일부는 변화를 하고 있습니다 그리고 N값이 0이거나 0이상이든지 변화가 전혀 없습니다 재검토 및 주석 부탁드립니다 Input : P(5),N(2); Var : Gap(0),SumGap(0),DGO(0), DGH(0), DGL(0),DGC(0),DGC1(0); var : cnt(0),DTH(0),DTL(0),Sum(0),DGatr(0); Array : DTR[100](0); If Date != Date[1] Then { #Gap = Open-Close[1]; #sumGap = sumGap+gap; DGC1 = DGC[1]; DGO = O-sumGap; DGH = H-sumGap; DGL = L-sumGap; For cnt=1 to 99 { DTR[cnt]=DTR[cnt-1][1]; } } If H-sumGap>DGH Then DGH=H-sumGap; If L-sumGap<DGL Then DGL=L-sumGap; DGC = C-sumGap; If DGC1>DGH Then DTH=DGC1; Else DTH=DGH; If DGC1<DGL Then DTL=DGC1; Else DTL=DGL; DTR[0]=DTH-DTL; If DTR[P]>0 Then { sum=0; For cnt=N To P+N-1 { sum=sum+DTR[cnt]; } DGatr=sum / P; } Plot1(DGatr);
프로필 이미지
티끌
2021-05-03
802
글번호 148648
지표