커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

예스스팟

항상 감사드립니다. 다름아니고 수식작성의 답변은 즉각적으로 올라오는데 반하여 예스스팟의 질문내용은 일주일째 기다리고 있는데 답변이 없어서 말쓰드립니다. 기본적으로 예스스팟의 답변은 안하는 걸로 어디에서 보았는데 1. 간단한 답변은 해 주시는 것은 어떨지.. 2. 답변이 시간상 어렵다면 예스스팟쪽만 답변 유료화를 하는것은 어떤지요.. 수식은 연습이니까 언제든지 바꾸는 것에 대한 부담감이 없는 반면에 예스스팟은 실제 주문이 들어가는 것이라 함부로 건드리기가 힘드네요.. 답변 부탁드립니다.
프로필 이미지
지킴이
2017-10-27
195
글번호 113714
시스템
답변완료

장기 피보나치 시스템 신호 입니다! 검토 좀 부탁드려요!

아래는 장기 피보나치 신호 로직입니다! 5분에서 테스트를 하고 있는데요 몇가지 오류가 있는것 같습니다! 부탁드립니다! 1. 신호가 나왔다 안나왔다 합니다! 2. 신호가 5분 늦게 발생하는 문제가 있습니다. 예> 09:30분에 장기 로그선을 터치 했으면, 09:30분에 매도 신호가 나왔어야 하는데 그런데, 09:35분에 신호가 발생했습니다. 예> 장기 피보나치 로그선을 위로 주가가 뚫고 올라갔으면, 다음봉에서 매수가 되었어야 하는데, 5분 늦게신호가 발생합니다. // 장기 피보나치 로그선 기법 시스템 코드 //----------- Var : WH(0), WL(0); // WH : 주중 최고, DH : 일중 최고 var : DH(0), DL(0); // WL : 주중 최고, DL : 일중 최고 var : i(0), j(0); // 임시변수 var : MKPos(0); // Market Position var : onetick(0.05); // 1틱 가치 var : logT(0); // 수동 손절을 하기 위해 대기가 필요한 변수 var : NoTick(2); // 수동 손절 틱수 : 2틱 array : FLog[7](0); // 장기 로그선 값을 저장할 배열 array : FLogPos[2](0); // 로그선의 위치 값을 저장(0~6), 매수 : 0, 매도 : 1MKPos = marketposition; WH = 263.25; WL = 226.90; // 장기 피보나치 로그선 값을 배열에 저장 FLog[0] = WH; // "연중 최고선" FLog[1] = 10^((LOG10(WH) -(LOG10(WH)-LOG10(WL))*0.236)); //"중기 23.6선" FLog[2] = 10^((LOG10(WH) -(LOG10(WH)-LOG10(WL))*0.382)); //"중기 38.2선" FLog[3] = 10^((LOG10(WH) -(LOG10(WH)-LOG10(WL))*0.500)); //"중기 50선" FLog[4] = 10^((LOG10(WH) -(LOG10(WH)-LOG10(WL))*0.618)); //"중기 61.8선" FLog[5] = 10^((LOG10(WH) -(LOG10(WH)-LOG10(WL))*0.764)); //"중기 76.4선" FLog[6] = WL; // "연중 최저선" // 손절매(자동 손절) : 0.6P SetStopLoss(12 * onetick, Pointstop); // >>> 매수 <<< // 현재 5분봉의 시가가 로그선의 값과 같거나 로그선 값의 아래에 있다가 // 현재 5분봉의 종가가 로그선의 위에 올라온 경우, // 다음봉 이후로 저가가 로그선 1틱 위보다 같거나 작은 경우 시장가 매수for i = 0 to 6 { if(MKPos == 0 ) and (O <= FLog[i]) and ( C > Flog[i]) then { logT = 1; FLogPos[0] = i; } } if (logT == 1) and (O >= (FLog[FLogPos[0]])) and (L <= (FLog[FLogPos[0]] + onetick * NoTick) )then { buy( "Buy" , AtStop, FLog[FLogPos[0]] + onetick * NoTick); logT = 0; } // 매수 수동 손절 : 1틱 (MIT) if (MKPos == 1) and (O >= FLog[FLogPos[0]]) and ( C < FLog[FLogPos[0]]) then { if (O <= FLog[FLogPos[0]]) and (H >= (FLog[FLogPos[0]] - onetick * NoTick )) then { ExitLong("exit_buy", atStop, FLog[FLogPos[0]] - onetick * NoTick ); // 매도로 스위칭 sell( "Sell_SW", AtStop, FLog[FLogPos[0]] - onetick * NoTick ); } } // >>> 매도 <<< // 현재 5분봉의 시가가 로그선의 값과 같거나 로그선 값의 위에 있다가 // 현재 5분봉의 종가가 로그선의 아래로 내려온 경우, // 다음봉 이후로 고가가 로그선 1틱 위보다 같거나 큰 경우 시장가 매도for i = 0 to 6 { if(MKPos ==0) and (O >= FLog[i]) and ( C < Flog[i]) then { logT = 2; FLogPos[0] = i; // MessageLog("L75> logT : %.f Fiboline %.2f Position : %.f Open : %.2f Close : %.2f", logT, FLog[i], FlogPos[0], O, C); } } if (logT == 2) and (O <= FLog[FLogPos[0]]) and (H >= (FLog[FLogPos[0]] - onetick * NoTick )) then { sell( "Sell", AtStop, FLog[FLogPos[0]] - onetick * NoTick ); logT = 0; } // MessageLog("L51> logT : %.f | Open %.2f <= %.2f | High %.2f >= %.2f MKPos : %.f", logT, O , FLog[FlogPos[0]], H, FLog[FlogPos[0]] - onetick, MKPos); // 매도 수동 손절 : 1틱 (MIT) if (MKPos == -1) and (O <= FLog[FLogPos[0]]) and ( C > FLog[FLogPos[0]]) then { // debug messageLog("Line 95"); if (O >= FLog[FLogPos[0]]) and (L <= (FLog[FLogPos[0]] - onetick * NoTick )) then { ExitShort("exit_sell", atStop, FLog[FLogPos[0]] + onetick * NoTick ); // +매수로 스위칭 buy( "Buy_SW" , AtStop, FLog[FLogPos[0]] + onetick * NoTick ); } } // 매수 청산 // if (MKPos == 1) or (MKPos == -1) then /시간 if (stime == 153000) then { SetStopEndofday(1530); }// messageLog("stime : %.f ", stime);
프로필 이미지
qha71
2017-10-27
291
글번호 113713
시스템
답변완료

항셍 매매 시간

항셍에서 1개 전의 캔들의 저가가 당일저가를 찍고 양봉 2개면 매수하라는 수식을 아래와 같이 작성하여 적용하면 분명 차트는 조건을 만족하는데 신호는 발생이 안됩니다. 아마도 당일 저가에 대한 기준이 다른 것 같아서 그런것 같은데요. 저는 오전 10시 15분 이후를 당일로 보고 아래 수식을 작성했으나 차트에서는 당일의 기준이 오전 10시 15분이 아닌 것 같습니다. 오전10시 15분 이후부터 당일로 적용되도록 수식 수정좀 부탁드립니다. if L[1] == daylow and countif(C > O, 2) == 2 Then buy("매수",OnClose);
프로필 이미지
천왕봉
2017-10-27
194
글번호 113708
시스템
답변완료

문의드립니다.

건강관리 잘하시구요. 1.진입조건 매수진입 : 시가가 5일선 아래일때의 현재봉이 이전 30개봉 중에서 최저점의 가격 보다 높으면 매수진입 (매도는 반대) 2.청산조건 매수청산 : 음봉이 연속 2개 나오면 다음 봉 시가에서 청산(매도청산은 반대) 3.수익합계 화면출력 시간 : 오전 10시 ~ 밤 11시 까지 매매시간 설정 합계 : 각각의 포지션 청산후 익절과 손실 및 합산 수익 최종값을 실시간으로 현재 봉의 고점 위에 출력 예> 익절 : 00 틱 손실 : 00 틱 합계 : 00 틱 4.질문 아래와 같이 지표에서 plot 으로 화면에 가로선을 그린후 지정한 범위가 되면 가로선이 없어지게 하려고 합니다. 어떻게 하면 되나요? mav1(5일선), mav2(20일선) if CrossDown(mav1,mav2) and C < mav1 Then{ value1 = C; } if mav2 > mav2[1] Then plot1(value1); 이렇게 가로선을 그린후 20일선 우하향으로 바뀌면 가로선을 사라지게 하고 싶습니다. 즐거운 주말 되세요.
프로필 이미지
웹피
2017-10-27
176
글번호 113696
시스템
답변완료

문의드립니다.

1. 5봉이내 60봉 최저가 2. 1봉전기준 2봉연속 저점을 높이는 양봉발생 3. 0봉전기준 당일시가가 이전 5봉의 시, 고가보다 높게시작(갭시작) 수고하세요~
프로필 이미지
psh2255
2017-10-27
193
글번호 113695
종목검색
답변완료

부탁 드립니다.

도움 주심에 감사 드립니다. 예를 들어 10분봉 차트에서 60분봉 지표(타주기, 변수 처리)를 보고 싶습니다. 미리 감사 드립니다. input : Price(10000), Per(10),N(5); var : cnt(0),cnt1(0),cnt2(0),idx(0); Array : VV[50](0); Array : OTL[50](0),HTL[50](0),LTL[50](0),CTL[50](0); Array : OTx[50](0),HTx[50](0),LTx[50](0),CTx[50](0),TX[50](0); idx = idx+1; for cnt = 1 to 49{ VV[cnt] = 0; } #N개값 출력 for cnt1 = 1 to N{ #차트 과거봉 전체 스캔 for cnt2 = 1 to idx{ #Price대비 +- Per%안에 종가가 형성된 if C[cnt2] <= Price*(1+Per/100) and C[cnt2] >= Price*(1-Per/100) and V[cnt2] > VV[cnt1] and (cnt1 == 1 or (cnt1 >= 2 and V[cnt2] < VV[cnt1-1])) Then{ VV[cnt1] = V[cnt2]; #거래량순 상위 cnt1번째 값추세선 출력 #시가선 TL_Delete(OTL[cnt1]); OTL[cnt1] = TL_New(Sdate[cnt2],stime[cnt2],O[cnt2],sdate,stime,O[cnt2]); TL_SetExtLeft(OTL[cnt1],true); TL_SetExtRight(OTL[cnt1],true); #고가선 TL_Delete(HTL[cnt1]); HTL[cnt1] = TL_New(Sdate[cnt2],stime[cnt2],H[cnt2],sdate,stime,H[cnt2]); TL_SetExtLeft(HTL[cnt1],true); TL_SetExtRight(HTL[cnt1],true); #저가선 TL_Delete(LTL[cnt1]); LTL[cnt1] = TL_New(Sdate[cnt2],stime[cnt2],L[cnt2],sdate,stime,L[cnt2]); TL_SetExtLeft(LTL[cnt1],true); TL_SetExtRight(LTL[cnt1],true); #종가선 TL_Delete(CTL[cnt1]); CTL[cnt1] = TL_New(Sdate[cnt2],stime[cnt2],C[cnt2],sdate,stime,C[cnt2]); TL_SetExtLeft(CTL[cnt1],true); TL_SetExtRight(CTL[cnt1],true); #거래량순 상위 cnt1번째 값텍스트 출력 #시가선값 Text_Delete(OTx[cnt1]); OTx[cnt1] = Text_New(sdate,stime,O[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 시가:"+NumToStr(O[cnt2],0)); Text_SetStyle(OTx[cnt1],0,0); #고가선값 Text_Delete(HTx[cnt1]); HTx[cnt1] = Text_New(sdate,stime,H[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 고가:"+NumToStr(H[cnt2],0)); Text_SetStyle(HTx[cnt1],0,0); #저가선값 Text_Delete(LTx[cnt1]); LTx[cnt1] = Text_New(sdate,stime,L[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 저가:"+NumToStr(L[cnt2],0)); Text_SetStyle(LTx[cnt1],0,0); #종가선값 Text_Delete(CTx[cnt1]); CTx[cnt1] = Text_New(sdate,stime,C[cnt2],"상위"+NumToStr(cnt1,0)+"번째봉 종가:"+NumToStr(C[cnt2],0)); Text_SetStyle(CTx[cnt1],0,0); #점출력 Text_Delete(Tx[cnt1]); Tx[cnt1] = Text_New(sdate[cnt2],stime[cnt2],C[cnt2],"●"+NumToStr(cnt1,0)); Text_SetStyle(Tx[cnt1],2,2); } } }
프로필 이미지
yes
2017-10-27
190
글번호 113686
지표
답변완료

특정 진입수식에 대해서만 손절 청산하는 수식 부탁합니다.

매도1, 매도2, 매도3, .... 이런식으로 다수의 진입 수식에서 매도2의 수식에 대해서만 당일 고점을 돌파하면 손절 청산하는 수식좀 부탁합니다.
프로필 이미지
천왕봉
2017-10-27
162
글번호 113684
시스템
답변완료

문의드립니다.

안녕하세요. 예전에 짜주신 지표인데요. 또 부탁드리고 싶은것이 있어서요. 아래의 변수를 Nday(1),dayPeriod(2),dayDv(1); 바꾸면 plot1 또는 plot3 둘 중에 하나는 수평선이 나오게 되는데요. plot1-plot3 를 선으로 나타낼려고 하다보니 항상 0보다 큰 선이 나오게 되서 말인데요. 예를들어, 1. plot1값은 수평선이고 plot3 값은 곡선형태라면 plot1-plot3 선이 0보다 작은 - 형태의 곡선이 나오게 해주시고요. 2. plot1값은 곡선이고 plot3 값은 수평선형태라면 plot1-plot3 선이 0보다 큰 + 형태의 곡선이 나오게 해주시면 고맙겠습니다. 항상 감사드립니다. ######################################################## input : Nday(1),dayPeriod(20),dayDv(2); var : daysum(0),daycnt(0),dayma(0),daySumSqrt(0),dayStdv(0); var : dayBBup(0),dayBBdn(0),dayCounter(0); #일봉 이동평균 계산 daysum = 0; for daycnt = 0 to Nday*dayPeriod-Nday step Nday{ daysum = daysum + DayClose(daycnt); } dayma = daysum/dayPeriod; #표준편차 계산 If DayClose(dayPeriod) != 0 Then { daySumSqrt = 0; For dayCounter = 0 To Nday*dayPeriod-Nday step Nday { 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,"하단");
프로필 이미지
예스매니아
2017-10-27
182
글번호 113683
지표
답변완료

문의드립니다.

아래식은 지그재그 식입니다. 이식에서는 각고점과 저점에서 수치가 출력되는데요 1. 현재봉을 기준으로 최근 각 고점수치 5개의 평균 현재봉을 기준으로 최근 각 저점수치 5개의 평균 을 지표식으로 표시하고싶습니다. 2. 위 식의 고점의 평균 저점의평균으로 중앙선을 그리고 싶습니다. #==========================================# # 지 표 명 : 고저라인 지그재그 파동선 # 버 전 : 1.2 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me # 업데이트 : 2017-03-10 #==========================================# Input:length(10),종가사용여부(0),파동선두께(2),수치표시(1); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# HH = IFF(종가사용여부==1,C,H); LL = IFF(종가사용여부==1,C,L); If Index == 0 Then { 고[1,1] = HH; 저[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); If 수치표시 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,RED); } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 수치표시 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,BLUE); } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } } 최종꼭지점 = "저점"; }
프로필 이미지
진팡이
2017-10-27
256
글번호 113679
지표