커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

캔들이평돌파

캔들이 20일이평선 상향돌파하자마자 시장가로 매수 된후 30틱 손절 60틱 익절 로 1계약 식과 갵들이 20일이평선 하향돌파하자마사 시장가로 매수 된후 30틱 손절 60틱 익절로 1계약 식 알려주시면 감사하겠습니다.
프로필 이미지
100억번남
2019-06-29
246
글번호 129869
시스템
답변완료

수식부탁드립니다

캔들차트중에 하이켄아쉬라는 차트가 있던데 그걸 구현하는 수식 부탁드립니다
프로필 이미지
초보트레이더11
2019-06-29
236
글번호 129868
지표
답변완료

시스템 오류수정 부탁합니다.

아래 시스템식 오류수정 부탁합니다. Input:주가파동기간(7),지표파동기간(10),유효기간(40); Var:j(0),k(0),value(0),n1(0),n2(0),추세선(0),다이버전스(0),다이버전스Bar(0), 상승(100),하락(-100); Array:고[10](0),저[10](0),고Bar[10](0),저Bar[10](0), 지표고[10](0),지표저[10](0),지표고Bar[10](0),지표저Bar[10](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# n1 = 주가파동기간; n2 = 지표파동기간; value = ema(MACD(12, 26),9); //value = stochasticsD(12,5,5); for j = 1 to 9 { 고Bar[j] = 고Bar[j] + 1; 저Bar[j] = 저Bar[j] + 1; 지표고Bar[j] = 지표고Bar[j] + 1; 지표저Bar[j] = 지표저Bar[j] + 1; } 다이버전스Bar = 다이버전스Bar + 1; #=========================================================# # 주가 Swing 계산 #=========================================================# #---------------------------------------------------------# # 전고점(Peak) 계산 #---------------------------------------------------------# if Highest(H,n1)[n1+1] <= H[n1] and H[n1] > Highest(H,n1) then { for j = 8 downto 1 { 고[j+1]= 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1]= H[n1]; 고Bar[1] = n1; if 저Bar[1] > 고Bar[2] then { for j = 8 downto 1 { 저[j+1]= 저[j]; 저Bar[j+1] = 저Bar[j]; } k = n1 + 1; for j = n1 + 2 to 고Bar[2]-1 { if L[k] > L[j] then k = j; } 저[1]= L[k]; 저Bar[1] = k; } } #---------------------------------------------------------# # 전저점(Trough) 계산 #---------------------------------------------------------# if Lowest(L,n1)[n1+1] >= L[n1] and L[n1] < Lowest(L,n1) then { for j = 8 downto 1 { 저[j+1]= 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1]= L[n1]; 저Bar[1] = n1; if 고Bar[1] > 저Bar[2] then { for j = 8 downto 1 { 고[j+1]= 고[j]; 고Bar[j+1] = 고Bar[j]; } k = n1 + 1; for j = n1 + 2 to 저Bar[2]-1 { if H[k] < H[j] then k = j; } 고[1]= H[k]; 고Bar[1] = k; } } #=========================================================# # 지표식 Swing 계산 #=========================================================# #---------------------------------------------------------# # 전고점(Peak) 계산 #---------------------------------------------------------# if Highest(value,n2)[n2+1] <= value[n2] and value[n2] > Highest(value,n2) then { for j = 8 downto 1 {//배열값을 순차적으로 바꿔준다 지표고[j+1]= 지표고[j]; 지표고Bar[j+1] = 지표고Bar[j]; } k = n2 + 1; for j = n2 + 2 to 지표고Bar[2]-1 { if value[k] > value[j] then k = j; } 지표저[1]= value[k]; 지표저Bar[1] = k; } } #---------------------------------------------------------# # 전저점(Trough) 계산 #---------------------------------------------------------# if Lowest(value,n2)[n2+1] >= value[n2] and value[n2] < Lowest(value,n2) then { for j = 8 downto 1 { 지표저[j+1]= 지표저[j]; 지표저Bar[j+1] = 지표저Bar[j]; } 지표저[1]= value[n2]; 지표저Bar[1] = n2; if 지표고Bar[1] > 지표저Bar[2] then { for j = 8 downto 1 { 지표고[j+1]= 지표고[j]; 지표고Bar[j+1] = 지표고Bar[j]; } k = n2 + 1; for j = n2 + 2 to 지표저Bar[2]-1 { if value[k] < value[j] then k = j; } 지표고[1]= value[k]; 지표고Bar[1] = k; } } #=========================================================# # 다이버전스 계산 #=========================================================# if 고Bar[1] == n1 or 지표고Bar[1] == n2 or 저Bar[1] == n1 or 지표저Bar[1] == n2 then { if 고[2] < 고[1] and 지표고[2] > 지표고[1] then { 다이버전스= 하락; 다이버전스Bar = 0; } else if 저[2] > 저[1] and 지표저[2] < 지표저[1] then { 다이버전스= 상승; 다이버전스Bar = 0; } } if 다이버전스Bar > 유효기간 then 다이버전스 = 0; #=========================================================# # 추세선 계산 #=========================================================# if 다이버전스 == 상승 then { 추세선 = (고[1]-고[2])/(고Bar[2]-고Bar[1]) * 고Bar[2] + 고[2]; } if 다이버전스 == 하락 then { 추세선 = (저[1]-저[2])/(저Bar[2]-저Bar[1]) * 저Bar[2] + 저[2]; } if 다이버전스 == 0 then { 추세선 = 0; } #=========================================================# # 시스템 식 #=========================================================# if 다이버전스 == 상승 and C > ma(C,20) and CrossUp(C,추세선) then Buy(); if 다이버전스 == 하락 and C < ma(C,20) and CrossDown(C,추세선) then Sell();
프로필 이미지
이대표
2019-06-29
208
글번호 129867
시스템
답변완료

오류수정 부탁

아래 시스템식에서 선업되지 않은 이름 i가 사용되었습니다. 라는 오류가 떠서 오류수정부탁 드립니다. Input:n(5),미완성사용(True); Var:j(0),k(0),고점표시(0),저점표시(0); Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0), 고idx[20](0),저idx[20](0); #---------------------------------------------------------# # Index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가 #---------------------------------------------------------# for j = 1 to 19 { 저Bar[j] = 저Bar[j] + 1; 고Bar[j] = 고Bar[j] + 1; 고iDx[j] = I - 고Bar[j]; 저idx[j] = I - 저Bar[j]; } 고점표시=(O[n]+C[n])/2; 저점표시=(O[n]+C[n])/2; #=========================================================# # 주처리 (Main Routine) 파동선 계산 #=========================================================# # 전고점(Peak) 계산 #---------------------------------------------------------# //Highest(H,2)[3] <= H[2] and H[2] > Highest(H,2) if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then { if 미완성사용 == True then { for j = 18 downto 1 { //배열값을 순차적으로 바꿔준다 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; 고idx[j+1] = 고idx[j]; } 고[1]= H[n]; 고Bar[1] = n; 고idx[1] = I - 고Bar[1]; 고점표시 = 고[1]*1.005; if 저Bar[1] > 고Bar[2] then { for j = 18 downto 1 { 저[j+1]= 저[j]; 저Bar[j+1] = 저Bar[j]; 저idx[j+1] = 저idx[j]; } k = n + 1; for j = n+ 2 to 고Bar[2]-1 { if L[k] > L[j] then k = j; } 저[1]= L[K]; 저Bar[1] = k; 저idx[1] = i - 저Bar[1]; } } if 미완성사용 == False then { if 고Bar[1] > 저Bar[1] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; 고Idx[j+1] = 고Idx[j]; } } if 고Bar[1] > 저Bar[1] or 고[1] <= H[n] then { 고[1]= H[n]; 고Bar[1] = n; 고Idx[1] = i -고Bar[1]; 고점표시 = 고[1]*1.005; } } } if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then { if 미완성사용 == True then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; 저Idx[j+1] = 저Idx[j]; } 저[1]= L[n]; 저Bar[1] = n; 저Idx[1] = i - 저Bar[1]; 저점표시 = 저[1]*0.995; if 고Bar[1] > 저Bar[2] then { for j = 18 downto 1 { 고[j+1]= 고[j]; 고Bar[j+1] = 고Bar[j]; 고Idx[j+1] = 고Idx[j]; } k = n + 1; for j = n + 2 to 저Bar[2]-1 { if H[k] < H[j] then k = j; } 고[1]= H[k]; 고Bar[1] = k; 고Idx[1] = i - 고Bar[1]; } } if 미완성사용 == False then { if 저Bar[1] > 고Bar[1] then { for j = 18 downto 1 { 저[j+1]= 저[j]; 저Bar[j+1] = 저Bar[j]; 저Idx[j+1] = 저Idx[j]; } } if 저Bar[1] > 고Bar[1] or 저[1] >= L[n] then { 저[1]= L[n]; 저Bar[1] = n; 저Idx[1] = i - 저Bar[1]; 저점표시 = 저[1]*0.995; } } } if 고점표시 > H[n] then Plot1(고점표시,"전고점",RED); if 저점표시 < L[n] then Plot2(저점표시,"전저점",BLUE); if 고Bar[1]==n and 고[1] > 0 then Plot3(고[1]); if 저Bar[1]==n and 저[1] > 0 then Plot3(저[1]); if 저Bar[1]==n and 저[1] > 0 then Plot4(저[1]); if 고Bar[1]==n and 고[1] > 0 then Plot4(고[1]);
프로필 이미지
이대표
2019-06-29
209
글번호 129866
시스템
답변완료

확인좀 부탁 드립니다.

* 아래글 < 63046 > 다시 확인좁 부탁 드립니다. * 아래식으로 적용 하니까 이상 하게 청산됨니다. 즉 10틱 이상 최대 수익이면 60% 선에서 청산이 안됨니다. * 확인 좀 부탁 드립니다. ################################## var : EH(0),EL(0); if MarketPosition == 1 then { EH = highest(H,BarsSinceEntry); if EH < EntryPrice+PriceScale*10 Then ExitLong("bx1",AtStop,EH*0.50); if EH >= EntryPrice+PriceScale*10 and EH < EntryPrice+PriceScale*30 Then ExitLong("bx2",AtStop,EH*0.60); if EH >= EntryPrice+PriceScale*30 and EH < EntryPrice+PriceScale*40 Then ExitLong("bx3",AtStop,EH*0.70); if EH >= EntryPrice+PriceScale*40 and EH < EntryPrice+PriceScale*50 Then ExitLong("bx4",AtStop,EH*0.80); if EH >= EntryPrice+PriceScale*50 Then ExitLong("bx5",AtStop,EH*0.90); } if MarketPosition == -1 then { EL = highest(H,BarsSinceEntry); if EL > EntryPrice-PriceScale*10 Then ExitShort("sx1",AtStop,EL*1.50); if EL <= EntryPrice-PriceScale*10 and EL > EntryPrice-PriceScale*30 Then ExitShort("sx2",AtStop,EL*1.40); if EL <= EntryPrice-PriceScale*30 and EL > EntryPrice-PriceScale*40 Then ExitShort("sx3",AtStop,EL*1.30); if EL <= EntryPrice-PriceScale*40 and EL > EntryPrice-PriceScale*50 Then ExitShort("sx4",AtStop,EL*1.20); if EL <= EntryPrice-PriceScale*50 Then ExitShort("sx5",AtStop,EL*1.10); } ################ 고맙 습니다.
프로필 이미지
요타
2019-07-01
241
글번호 129865
강조
답변완료

오류수정 요청드립니다

<1>아래와 같이 시스템식 입력하면 에서 연산자 앞 뒤 두데이터의 형태가 같아야 합니다.라고 오류가 뜨네요.. 수정부탁드립니다. input:shortP(12),longP(26),midP(9); var:macdVal(0),macdSig(0),disp(0); macdVal=MACD(shortP,longP); macdSig=ema(macdVal,midP); disp=ma(C,5)/ma(C,60)*100>102;//③ if CrossUP(macdVal,macdSig)and disp then Buy(); if CrossDown(macdVal,macdSig)then ExitLong(); <2>아래 시스템식에서는 오류가 2군데 나와서 수식 수정부탁드립니다. input:P1(20),P2(12),P3(10),P4(6),P5(5),P6(3),BaseLine(50); var:Sto1(0),Sto2(0),Sto3(0); Sto1=StochasticsK(P1,P2); Sto2=StochasticsK(P3,P4); Sto3=StochasticsK(P5,P6); if Sto1>BaseLine and Sto1[2]<Sto1[1] and Sto1[1]<Sto1 and Sto2>BaseLine and Sto2[2]<Sto2[1 and Sto2[1]<Sto2 and Sto3[2]>Sto3[1] and Sto3[1]<Sto3 then Buy(); if Sto1<BaseLine and Sto1[2]>Sto1[1] and Sto1[1]>Sto1 and Sto2<BaseLine and Sto2[2]>Sto2[1] and Sto2[1]>Sto2 and Sto3[2]<Sto3[1] and Sto3[1]>Sto3 then Sell();
프로필 이미지
이대표
2019-06-28
202
글번호 129864
시스템
답변완료

수식부탁드립니다.

부탁드린대로 잘만들어주셔서 감사드립니다.. 제가 스스로 응용하여 만들어보려했으나 부족한능력으로 한계가있어 다시문의드리게되었습니다. 1) 3계약중 첫번째1계약 목표가가 S1 .R1이었다면 진입가에서 +- 35틱 익절로 부탁드립니다. (SetStopProfittarget(PriceScale*35,PointStop)으로하니 2회이상진입 되더라구요.. 2)당일 손절발생시에만 S3 = Dayhigh-PriceScale*120; 에서 매수 , R3 = Daylow+PriceScale*120; 에서 매도 진입, 청산은 70틱익절 3) 3번째계약은 목표가를 매수시 R3 , 매도시 S3으로 부탁드리고 트레일링스탑은 2차청산(S2,R2지점)이되면 S2,R2에서 위아래로 15틱이상움직엿을시 2차청산지점(S2,R2)에서 청산 S3 = Dayhigh-PriceScale*120; R3 = Daylow+PriceScale*120; 4) 기존전략이 35틱 움직였을시 본절청산이었는데요 1번째계약이 S1,R1에서 청산되었을시, 나머지2,3계약은 본절에서 모두청산되게 부탁드립니다. 언제나 감사드립니다 항상행복하세요.. --------------------------------------------------------- 안녕하세요 예스스탁입니다. 식을 수정했습니다. 1 input : xtime(050000); var : R2(0),R1(0),S1(0),S2(0),entry(0); var : Tcond(false),BX1(false),BX2(false),SX1(false),SX2(false); if bdate != bdate[1] then { Tcond = true; entry = 0; } if (sdate != sdate[1] and stime >= xtime) or (sdate == sdate[1] and stime >= xtime and stime[1] < xtime) then { Tcond = false; if MarketPosition == 1 Then ExitLong("BX"); if MarketPosition == -1 Then ExitShort("SX"); } R2 = DayLow+PriceScale*90; R1 = DayLow+PriceScale*55; S1 = DayHigh-PriceScale*55; S2 = DayHigh-PriceScale*90; if MarketPosition(0) != 0 and MarketPosition(0) != MarketPosition(0)[1] Then entry = entry+1; if Tcond == true then { if MarketPosition <= 0 and entry < 1 Then { if H < S1 Then buy("b1",AtStop,S1,3); if L > S1 then buy("b2",AtLimit,S1,3); } if MarketPosition >= 0 and entry < 1 Then { if L > R1 Then sell("R1",AtStop,R1,3); if H < R1 Then sell("R2",AtLimit,R1,3); } if MarketPosition == 1 then { if CurrentContracts > CurrentContracts[1] Then { BX1 = false; BX2 = false; } if CurrentContracts < CurrentContracts[1] then { if (LatestExitName(0) == "bx11" or LatestExitName(0) == "bx12") Then BX1 = true; if (LatestExitName(0) == "bx21" or LatestExitName(0) == "bx22") Then BX2 = true; } if BX1 == false Then { if H < R1 Then ExitLong("bx11",AtLimit,R1,"",1,1); if L > R1 Then ExitLong("bx12",AtStop,R1,"",1,1); } if BX2 == false Then { if H < R2 Then ExitLong("bx21",AtLimit,R2,"",1,1); if L > R2 Then ExitLong("bx22",AtStop,R2,"",1,1); } if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*35 Then ExitLong("bx3",AtStop,EntryPrice); } if MarketPosition == -1 then { if CurrentContracts > CurrentContracts[1] Then { SX1 = false; SX2 = false; } if CurrentContracts < CurrentContracts[1] then { if (LatestExitName(0) == "sx11" or LatestExitName(0) == "sx12") Then SX1 = true; if (LatestExitName(0) == "sx21" or LatestExitName(0) == "sx22") Then SX2 = true; } if SX1 == False then { if L > S1 Then ExitShort("sx11",AtLimit,S1,"",1,1); if H < S1 Then ExitShort("sx12",AtStop,S1,"",1,1); } if SX2 == false then { if L > S2 Then ExitShort("sx21",AtLimit,S2,"",1,1); if H < S2 Then ExitShort("sx22",AtStop,S2,"",1,1); } if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*35 Then ExitShort("sx3",AtStop,EntryPrice); } } SetStopLoss(PriceScale*20,PointStop); 즐거운 하루되세요
프로필 이미지
베비슬립
2019-06-29
216
글번호 129863
시스템
답변완료

오류 수정 요청

아래 시스템식중 ①②③에서 연산자 앞뒤 두 데이터의 형태가 같아야 합니다. 라고 오류가 뜨는데 그 이유를 알고 싶습니다. ================================================================================ input:shortPeriod(5),midPeriod(10),longPeriod(20),Percent(1),수렴조건(2),청산조건(1); var:단기이평(0),중기이평(0),장기이평(0),정배열(0),역배열(0),최대(0),최소(0),이평수렴(0); 단기이평=ma(C,shortPeriod); 중기이평=ma(C,midPeriod); 장기이평=ma(C,longPeriod); 정배열 =단기이평>중기이평 and 중기이평>장기이평;//① 역배열 =단기이평<중기이평 and 중기이평<장기이평;//② 최대=max(단기이평,중기이평,장기이평); 최소=min(단기이평,중기이평,장기이평); 이평수렴 =최대[1]/최소[1]<=(1+Percent/100);//③ if CrossUp(단기이평,중기이평) and 정배열 and ((수렴조건 == 1 and AccumN(이평수렴,5)>0) or (수렴조건 == 2 and 이평수렴)or (수렴조건 == 3 and AccumN(이평수렴,3)==3)) then Buy(); if(청산조건==1and!정배열)or (청산조건 == 2 and 역배열 ) then ExitLong(); if CrossDown(단기이평, 중기이평) and 역배열 and (( 수렴조건 == 1 and AccumN( 이평수렴 ,5) > 0) or ( 수렴조건 == 2 and 이평수렴 ) or ( 수렴조건 == 3 and AccumN( 이평수렴 ,3) == 3)) then Sell(); if ( 청산조건 == 1 and ! 역배열 ) or ( 청산조건 == 2 and 정배열 ) then ExitShort();
프로필 이미지
이대표
2019-06-28
221
글번호 129861
시스템
답변완료

63070 번 수식

20 이평이 상승에서 하락 전환시 20 캔들 최고치를 표시한다(A) 20 이평이 하락에서 상승 전환시 20 캔들 최저치를 표시한다(B) 20 이평이 하락에서 상승 전환후 다시 하락 전환할 때 20캔들 최고치를 표시한다(C) 20 이평이 상승에서 하락 전환후 다시 상승 전환할 때 20캔들 최저치를 표시한다(D) C 가 A 보다 낮은 상태에서 B 바닥 붕괴시 A~B 상향 대칭을 표시한다 C 가 A 보다 낮은 상태에서 B 바닥 붕괴시 B~A 하향 대칭을 표시한다 D 가 B 보다 높은 상태일때 C 천정 돌파시 C~B 상향 대칭을 표시한다 D 가 B 보다 높은 상태일때 A 천정 돌파시 A~B 상향 대칭을 표시한다
프로필 이미지
회원
2019-06-28
220
글번호 129859
지표