커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식부탁드립니다

캔들차트중에 하이켄아쉬라는 차트가 있던데 그걸 구현하는 수식 부탁드립니다
프로필 이미지
초보트레이더11
2019-06-29
228
글번호 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
202
글번호 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
202
글번호 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
233
글번호 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
194
글번호 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
208
글번호 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
213
글번호 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
213
글번호 129859
지표
답변완료

질문드립니다

얼마전 다음과 같은 답변을 주셨습니다 ------------------------ 수식으로 틱봉차트에서 분봉 지표가 정확히 계산이 불가능 합니다. 랭귀지는 각봉의 시고저종가만 사용하는데 하나의 틱봉에서 시간경계로 값을 나눌수가 없습니다. 문의하신 내용은 참조데이타를 이용하셔야 합니다. 틱봉차트에 분봉데이타를 참조데이타로 추가하고 아래식 적용하시면 됩니다. 참조데이타는 차트왼쪽 상단의 종목선택버튼 중 오른쪽 클릭하면 선택해서 차트에 추가할수 있습니다. 기본차트와 같은 종목을 다른주기로 셋팅이 가능합니다. input : P(15); var1 = ma(C,P); if crossup(c,var1) Then buy(); if CrossDown(c,var1) Then sell(); 즐거운 하루되세요 ------------------------------------- 이상과 같이 답변을 주셨길래 그래서 제가 보는 틱차트에 참조데이터로 5분봉을 추가했는데요 위에 주신 수식 시스템으로 넣으니까 5분봉에 대한 15 이평이 화살표가 아닌 틱차트에 대한 15 이평 화살표가 적용됩니다. 제가 뭔가 잘못 적용한건가요?
프로필 이미지
견유학자
2019-06-28
231
글번호 129851
지표