커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

동일계좌 진입 청산 질문 입니다.

안녕하세요. ^^ "A" 라는 시스템이 있는데, 한개의 동일계좌로 30분, 60분, 90분 각각의 차트에 동일한 "A" 라는 시스템을 연결했을 때, 진입 신호는 B 또는 S , 청산 신호는 BB 또는 SS 라고 명했습니다. 매수청산은 BB , 매도청산은 SS 입니다. 한개의 동일계좌로 동일시스템을 진행 할 때, 일,분,틱에 복수로 적용했을 때, 문제 될 건 없는지요? 예를 들어, 30분 매수로 B가 진입하면, 90분 매수청산 신호로 BB 가 뜬다면, 동일계좌에서 먼저 매수로 진입한 30분 B 매수 포지션이, 90분 매수청산 신호인 BB로 청산 되면서 문제가 되지 않을까 하는 질문입니다. (증권사들은 먼저 진입한 포지션을 첫 청산으로 처리하는것 같아서 문의합니다.) 답변 부탁드립니다. 감사합니다~ ^^
프로필 이미지
postdog
2018-02-08
211
글번호 116427
시스템
답변완료

검색식 부탁드립니다..

차트상에서 적용(A)에서 검색으로 들어가면 N일 신고가 처럼 N일 거래대금 신고가 검색 부탁드립니다 따로 검색이 되는게 아니라 차트상에서 표시되게 해주시면 감사하겟습니다
프로필 이미지
그리즐리
2018-02-08
208
글번호 116426
검색
답변완료

질문있습니다.

현물시스템 3분봉 3000봉에 참조데이타로 지수연결선물 3분봉 3000봉으로 지수 이평선을 보고 매수매도를 결정하려고하는 시스템을 구현하려고합니다. var : mt_sum3(0),mt_sum5(0),mt_sum10(0),mt_sum15(0),mt_sum20(0); var : mt_ma3(0),mt_ma5(0),mt_ma10(0),mt_ma15(0),mt_ma20(0); var : mt_ma3Flag(0),mt_ma5Flag(0),mt_ma10Flag(0),mt_ma15Flag(0),mt_ma20Flag(0); var : mt_10(0),mt_20(0),mt_30(0),mt_40(0),mt_120(0),mt_600(0); var : mt_buyFlag(1),mt_sellFlag(0),mt_changeFlag(0),mt_change_t1(0),mt_change_t2(0); var : mt_buyfactor(0); var : i(0); if index==0 Then{ ClearDebug; mt_10=30/BarInterval; mt_20=60/BarInterval; mt_30=90/BarInterval; mt_40=120/BarInterval; mt_120=360/BarInterval; mt_600=600/BarInterval; } if DayIndex==0 Then{ mt_sum3 = 0; mt_sum5 = 0; mt_sum10 = 0; mt_sum15 = 0; mt_sum20 = 0; for i=1 to 19 { if i<3 Then mt_sum3 = mt_sum3 + DayClose(i); if i<5 Then mt_sum5 = mt_sum5 + DayClose(i); if i<10 Then mt_sum10 = mt_sum10 + DayClose(i); if i<15 Then mt_sum15 = mt_sum15 + DayClose(i); mt_sum20 = mt_sum20 + DayClose(i); } } mt_ma3 = (mt_sum3 + DayClose(0))/3; mt_ma5 = (mt_sum5 + DayClose(0))/5; mt_ma10 = (mt_sum10 + DayClose(0))/10; mt_ma15 = (mt_sum15 + DayClose(0))/15; mt_ma20 = (mt_sum20 + DayClose(0))/20; MessageLog("%.f %.f %.f",mt_ma3,mt_ma5,mt_ma10); MessageLog("%.f %.f %.f",DayClose(0),DayClose(1),DayClose(2)); if(mt_ma3<c)Then{ mt_ma3Flag=1; }Else mt_ma3Flag=0; if(mt_ma5<c)Then{ mt_ma5Flag=1; }Else mt_ma5Flag=0; if(mt_ma10<c)Then{ mt_ma10Flag=1; }Else mt_ma10Flag=0; if(mt_ma15<c)Then{ mt_ma15Flag=1; }Else mt_ma15Flag=0; if(mt_ma20*0.99<c)Then{ mt_ma20Flag=1; }Else mt_ma20Flag=0; //지수로 확인하는 것 if(DayIndex==0)Then{ mt_changeFlag = 0; mt_change_t1 = 0; mt_change_t2 = 0; mt_buyFlag = 1; mt_sellFlag = 0; } if(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma20Flag==0)Then{ mt_sellFlag = 1; mt_buyFlag = 0; MessageLog("모두팔기!1"); } if(mt_ma20Flag==0&&(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag>=2))Then{ mt_buyFlag = 1; mt_sellFlag = 0; } if(mt_changeFlag==0)Then{ if(DayHigh*0.985>c||DayClose(1)*0.985>c)Then{ mt_buyFlag = 0; } if(DayHigh*0.98>c||DayClose(1)*0.98>c)Then{ mt_buyFlag = 0; mt_sellFlag = 1; MessageLog("모두팔기!2"); } } if(mt_buyFlag==0)Then{ if(ma(c,mt_20)>ma(c,mt_120))Then{ mt_change_t1 = 1; }Else mt_change_t1 = 0; if((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c))Then{ mt_change_t2 = 1; }Else mt_change_t2 = 0; if(mt_change_t1==1||mt_change_t2==1)Then{ mt_changeFlag = 1; mt_buyFlag = 1; mt_sellFlag = 0; } } if(mt_changeFlag==1)Then{ if(ma(c,mt_20)>ma(c,mt_120))Then{ mt_change_t1 = 1; }Else mt_change_t1 = 0; if((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c))Then{ mt_change_t2 = 1; }Else mt_change_t2 = 0; if(mt_change_t1+mt_change_t2==0)Then{ mt_changeFlag = 0; mt_buyFlag = 0; } } //20선 위 if(mt_buyFlag==1&&mt_ma20Flag==1)Then{ mt_buyfactor = ((mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma10Flag)*10+60)/100; Plot1(mt_buyfactor); } //20선 아래 if(mt_buyFlag==1&&mt_ma20Flag==0)Then{ var1 = 0; if(ma(c,mt_20)>ma(c,mt_120))Then var1 = var1+1; if(Lowest(h,mt_600)[15]*1.005<c)Then var1 = var1+1; if(Lowest(h,mt_600)[30]*1.005<c)Then var1 = var1+1; if(ma(c,mt_10)*1.01<c)Then var1 = var1+1; if(Highest(h,mt_10)[2]*1.005<c)Then var1 = var1+1; mt_buyfactor = (var1*10)/100; Plot2(mt_buyfactor); } 위의 식은 일반적으로 연결선물지수 차트에 지표로 사용하는 것입니다. 위에 것을 현물 차트(3분봉 3000봉)에 참조데이터 연결선물지수(3분봉 3000봉)인 곳에서 사용할수 있도록 변환을 아래와 같이하였지만 정상작동하지않습니다. var : mt_sum3(0,data2),mt_sum5(0,data2),mt_sum10(0,data2),mt_sum15(0,data2),mt_sum20(0,data2); var : mt_ma3(0,data2),mt_ma5(0,data2),mt_ma10(0,data2),mt_ma15(0,data2),mt_ma20(0,data2); var : mt_ma3Flag(0,data2),mt_ma5Flag(0,data2),mt_ma10Flag(0,data2),mt_ma15Flag(0,data2),mt_ma20Flag(0,data2); var : mt_10(0,data2),mt_20(0,data2),mt_30(0,data2),mt_40(0,data2),mt_120(0,data2),mt_600(0,data2); var : mt_buyFlag(1,data2),mt_sellFlag(0,data2),mt_changeFlag(0,data2),mt_change_t1(0,data2),mt_change_t2(0,data2); var : mt_buyfactor(0,data2); var : i(0,data2); if index==0 Then{ ClearDebug; mt_10=30/data2(BarInterval); mt_20=60/data2(BarInterval); mt_30=90/data2(BarInterval); mt_40=120/data2(BarInterval); mt_120=360/data2(BarInterval); mt_600=600/data2(BarInterval); } if DayIndex==0 Then{ mt_sum3 = 0; mt_sum5 = 0; mt_sum10 = 0; mt_sum15 = 0; mt_sum20 = 0; for i=1 to 19 { if i<3 Then mt_sum3 = data2(mt_sum3 + CloseD(i)); if i<5 Then mt_sum5 = data2(mt_sum5 + CloseD(i)); if i<10 Then mt_sum10 = data2(mt_sum10 + CloseD(i)); if i<15 Then mt_sum15 = data2(mt_sum15 + CloseD(i)); mt_sum20 = data2(mt_sum20 + CloseD(i)); } } mt_ma3 = data2((mt_sum3 + CloseD(0))/3); mt_ma5 = data2((mt_sum5 + CloseD(0))/5); mt_ma10 = data2((mt_sum10 + CloseD(0))/10); mt_ma15 = data2((mt_sum15 + CloseD(0))/15); mt_ma20 = data2((mt_sum20 + CloseD(0))/20); MessageLog("%.f %.f %.f",data2(mt_ma3),data2(mt_ma5),data2(mt_ma10)); MessageLog("%.f %.f %.f",data2(CloseD(0)),data2(CloseD(1)),data2(CloseD(2))); if(mt_ma3<c)Then{ mt_ma3Flag=1; }Else mt_ma3Flag=0; if(mt_ma5<c)Then{ mt_ma5Flag=1; }Else mt_ma5Flag=0; if(mt_ma10<c)Then{ mt_ma10Flag=1; }Else mt_ma10Flag=0; if(mt_ma15<c)Then{ mt_ma15Flag=1; }Else mt_ma15Flag=0; if(mt_ma20*0.99<c)Then{ mt_ma20Flag=1; }Else mt_ma20Flag=0; //지수로 확인하는 것 if(DayIndex==0)Then{ mt_changeFlag = 0; mt_change_t1 = 0; mt_change_t2 = 0; mt_buyFlag = 1; mt_sellFlag = 0; } if(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma20Flag==0)Then{ mt_sellFlag = 1; mt_buyFlag = 0; //MessageLog("모두팔기!1"); } if(mt_ma20Flag==0&&(mt_ma3Flag+mt_ma5Flag+mt_ma10Flag>=2))Then{ mt_buyFlag = 1; mt_sellFlag = 0; } if(mt_changeFlag==0)Then{ if(data2(HighD(0)*0.985>c||CloseD(1)*0.985>c))Then{ mt_buyFlag = 0; } if(data2(HighD(0)*0.98>c||CloseD(1)*0.98>c))Then{ mt_buyFlag = 0; mt_sellFlag = 1; //MessageLog("모두팔기!2"); } } if(mt_buyFlag==0)Then{ if(data2(ma(c,mt_20)>ma(c,mt_120)))Then{ mt_change_t1 = 1; }Else mt_change_t1 = 0; if(data2((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c)))Then{ mt_change_t2 = 1; }Else mt_change_t2 = 0; if(mt_change_t1==1||mt_change_t2==1)Then{ mt_changeFlag = 1; mt_buyFlag = 1; mt_sellFlag = 0; } } if(mt_changeFlag==1)Then{ if(data2(ma(c,mt_20)>ma(c,mt_120)))Then{ mt_change_t1 = 1; }Else mt_change_t1 = 0; if(data2((Lowest(h,mt_600)[15]*1.005<c||Lowest(h,mt_600)[30]*1.005<c)&&(ma(c,mt_10)*1.01<c||Highest(h,mt_10)[2]*1.005<c)))Then{ mt_change_t2 = 1; }Else mt_change_t2 = 0; if(mt_change_t1+mt_change_t2==0)Then{ mt_changeFlag = 0; mt_buyFlag = 0; } } //20선 위 if(mt_buyFlag==1&&mt_ma20Flag==1)Then{ mt_buyfactor = ((mt_ma3Flag+mt_ma5Flag+mt_ma10Flag+mt_ma10Flag)*10+60)/100; Plot1(mt_buyfactor); } //20선 아래 if(mt_buyFlag==1&&mt_ma20Flag==0)Then{ var1 = 0; if(data2(ma(c,mt_20)>ma(c,mt_120)))Then var1 = var1+1; if(data2(Lowest(h,mt_600)[15]*1.005<c))Then var1 = var1+1; if(data2(Lowest(h,mt_600)[30]*1.005<c))Then var1 = var1+1; if(data2(ma(c,mt_10)*1.01<c))Then var1 = var1+1; if(data2(Highest(h,mt_10)[2]*1.005<c))Then var1 = var1+1; mt_buyfactor = (var1*10)/100; Plot2(mt_buyfactor); } 어디가어떻게 잘못되었는지 알려주시면 감사하겠습니다 감사합니다
프로필 이미지
여유로운투자
2018-02-08
237
글번호 116425
지표
답변완료

질문있씁니다

var : R2(0,data2),m2(0,data2); var : D2전환선(0,data2),D2기준선(0,data2),D2선행스팬1(0,data2),D2선행스팬2(0,data2); var : D2구름상단(0,data2),D2구름하단(0,data2); R2 = data2((C-CloseD(1))/CloseD(1)*100); M2 = data2(ma(C,20)); D2전환선 = data2((highest(H,9)+lowest(L,9))/2); D2기준선 = data2((highest(H,26)+lowest(L,26))/2); D2선행스팬1 = data2((D2전환선[25]+D2기준선[25])/2); D2선행스팬2 = data2((highest(H,52)[25]+lowest(L,52)[25])/2); D2구름상단 = max(D2선행스팬2,D2선행스팬2); D2구름하단 = min(D2선행스팬2,D2선행스팬2); d어제 답변을 위와 같이주셨는데요 문법적으로 궁금한것이있는데요 data2 참조를 해서 그값을 이용해서 출력하고 혹은 또다른 계산을 할때 거쳐가는 변수에는 모두다 D2기준선(0,data2) 이것처럼 ,data2가 붙어야만하나요? 작성하신 것을 보면 모두다 ,data2 를 변수 선언시 붙여주셨는데요 제가 그걸 빼고 돌려도 잘작동하는데 왜 굳이 ,data2를 써야하는 이유가 무엇인지궁금합니다. data2((highest(H,9)+lowest(L,9))/2); 에서는 그 data2 를 가져오기위해서 사용하는것은 당연해보이지만 이값을 저장하는 변수형태도 ,data2를 붙여서 선언해야하는게 꼭필요한것인지 아님 알아보기 쉽게하기위해서 그렇게작성하는것인지궁금합니다
프로필 이미지
여유로운투자
2018-02-08
230
글번호 116424
지표

매치다는 님에 의해서 삭제되었습니다.

프로필 이미지
매치다는
2018-02-08
10
글번호 116423
종목검색
답변완료

시스템식 문의드립니다

안녕하세요 알려주신 조건식 응용해서 잘 쓰고 있습니다 뼈대를 만들 능력이 없어서 다시 도움요청드립니다 항상 감사합니다!!!! 내용이 다른게 올라가서 수정합니다. 차트 3분봉 지표 3분봉 볼린저밴드 20 .2 매수전 조건 일봉상 5일선 위 ,당일 거래대금 75억 이상 매수 1차 매수 ㄱ or ㄴ ㄱ. 현재봉 포함 6봉이내 고가가 볼린저 밴드 상단터치 있고 이이전봉 시가 종가 -3%이상 음봉 & 이전봉 시가 종가 -3%이상음봉 & 현재가 볼린저 밴드 중간선 이하시 매수 ㄴ. 이전봉 시가 종가 -1.5%이상 음봉 & 현재가 볼린저 밴드 하단선 이하시 매수 추가매수 2차 매수 1차 매수가 대비 -2% 3차 매수 2차 매수가 대비 -3% 4차 매수 3차 매수가 대비 -4% 매도 ㄱ. 매수시 볼린저 밴드 상단 -1%터치시 매도 or 1 2 차 매수시 매수가대비 3%상승 시 매도 or 3차 이상 매수시 본절 매도 or ㄴ. 매수시 중단터치시 매도 or 1 2 차 매수시 매수가대비 3%상승 시 매도 or 3차 이상 매수시 본절 매도 매수 매도 모두 조건 만족하면 시장가 주문입니다 모자라는 부분있으면 알려주세요 보충하겠습니다
프로필 이미지
kosto1
2018-02-08
199
글번호 116422
시스템
답변완료

안녕하세요

아래식에서 당일이익 과 당일손실강제청산후 진입이안되야되는데 계속 추가진입이 나옵니다 당일 손실이나 익절후에 진입안하도록 수정 부탁합니다^^ Inputs: Length(10), Consec(2); Input : 당일손실틱수(100),당일수익틱수(100); var : DH(0),DL(0); var : HH(0),LL(0),T1(0),entry(0); var : cnt(0),count(0),dayPl(0),당일손실(0),당일수익(0); 당일수익 = PriceScale*당일수익틱수; 당일손실 = PriceScale*당일손실틱수; if (sdate != sdate[1] and stime >= 100000) or (sdate == sdate[1] and stime >= 100000 and stime[1] < 100000) Then{ Condition1 = true; DH = H; DL = L; } if Condition1 == true then{ if H > DH Then DH = H; if L < DL Then DL = L; } If DL > 0 and C < DL+PriceScale*300 and stime > 100000 and stime < 172000 and CountIf(Close > Highest(High, Length)[1], Consec) == Consec Then Buy ("매수"); If DH > 0 and C > DH-PriceScale*300 and stime > 100000 and stime < 172000 and CountIf(Close < Lowest(Low, Length)[1], Consec) == Consec Then Sell ("매도"); SetStopLoss(PriceScale*30,PointStop); SetStopProfittarget(PriceScale*60,PointStop); if MarketPosition == 1 then{ ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts)); ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts)); } if MarketPosition == -1 then{ ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts)); ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts)); }
프로필 이미지
수원
2018-02-07
173
글번호 116421
시스템
답변완료

ETF로 주문내기

차트를 파일로 첨부합니다 유첨 차트를 보면 화살표 매매신호가 발생합니다. 이것을 실제 매매로 연계 시킬려고 하는데 ETF로 연계 시킬려고 합니다 지표는 macd 로 상정해서 알려주시면 감사하겠습니다.
프로필 이미지
국민대표
2018-02-07
231
글번호 116420
시스템
답변완료

수식부탁합니다

안녕하세요 수고많으십니다. 1),변동성지표 Band%B 지표에서 과열,침체구간에서 소리발생식을 출력하고 싶습니다, 2),해선1시간봉 적용시 현재봉 직전봉의 중심선을 오른쪽그리기 하면 좋겠습니다. $,도움부탁드립니다, 미리감사드립니다.
프로필 이미지
회원
2018-02-07
218
글번호 116419
지표