커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

차트 전체에서의 첫봉(한개)의 값

안녕하세요 차트 전체 기간(일봉) 중 첫날 종가를 알 수 있을까요? 구할 수 있다면 아래와같이 차트로 보고싶은데 수식 부탁드립니다. 차트 전체의 첫 날 종가 / 차트 전체의 첫 날 종가 * 100 차트 전체의 둘째날 종가 / 차트 전체의 첫 날 종가 * 100 차트 전체의 셋째날 종가 / 차트 전체의 첫 날 종가 * 100 차트 전체의 넷째날 종가 / 차트 전체의 첫 날 종가 *100 ... ~~~ ... 오늘 종가 / 차트 전체의 첫 날 종가*100 이렇게 일봉차트에서 조회되는 첫날부터 오늘까지의 종가를 계속 나누면서 와야하는 차트를 만들고 싶은데 부탁드립니다
프로필 이미지
퀀트드래곤
2022-11-04
1126
글번호 163508
지표
답변완료

문의드립니다

분봉차트에서 사용할 갭보정 볼린저밴드 지표식 부탁합니다 검색해서 찾아봤는데 이상하게 나오네요 감사합니다
프로필 이미지
러블리
2022-11-03
1087
글번호 163507
지표
답변완료

문의 드립니다.

아래의 기준가 매매 로직에서 무포지션 일 때 미리 자동매매 설정하면 302.00 위에서 아래로 돌파하면 매도청산 완료 신호가 매도로 진입되는데요. 이 점을 보완하고 싶습니다. 무조건 진입은 기준가 아래서 위로 돌파 시 매수 진입하고 매수 포지션 있을 때 매도 청산완료가 진행되었으면 합니다. 혹시 이부분이 가능할까요. 부탁드립니다. input : Price (302.00); if crossup(C,price) Then buy(); if CrossDown(C,price) Then ExitLong();
프로필 이미지
선물대장
2022-11-03
1344
글번호 163501
시스템
답변완료

조건을 만족하는 값 추리기

안녕하세요 항상 건강하셨으면 좋겠습니다. 코드 짜주시고 도움 주셔서 항상 고맙습니다 (__) 특정 조건을 만족하는 값만 추리길 원합니다 어떻게 해야할지 도움 주시면 감사하겠습니다 X = IFF(Y, 1, 0)이라고 가정하고 (X는 0 또는 1일수밖에 없음) X가 1이었다가 0으로 바뀌었다는 가정하에, X가 1이었을때의 봉들 중 가장 작은 거래량을 가진 봉의 저가 <--var1에 넣고싶습니다. X가 0이었다가 1로 바뀌었다면, x가 0이었을떄의 봉들 중 가장 작은 거래량을 가진 봉의 저가 <-- var2에 넣고싶습니다 var2에 새로운 값이 저장되어있는 상태이고, 다시 x가 1이었다가 0으로 바뀌면, var1에 바로 전에 x가 1인 상황이었을때 만들어진 가장 작은 거래량을 가진 봉의 저가 값'을 다시 넣고, 그 전에 있던 var1 값은 var3에 저장이 되었으면 좋겠습니다. var1에 새로운 값이 저장되어있고, x가 0이었다가 다시 1로 바뀌면, var2의 x가 1이었을때 만들어진 가장 적은 거래량을 가진 봉의 저가 값을 넣고, 그 전에있던 var2는 var4에 저장되었으면 좋겠습니다. 이렇게 하면 홀수 var에는 x가 1이었을때 값이 계속 갱신되었으면 좋겠습니다. , 짝수 var에는 x가 0이었을때의 값들이 계속 갱신되었으면 좋겠습니다. 홀수, 짝수 var들은 위와 같은 갱신은 10번까지 할 수 있도록 도와주세요(var 값은 계속 바뀌지만 실제 사용은 홀수당 10개, 짝수당 10개까지 할 수 있도록) 부탁드립니다.
프로필 이미지
이만스닥
2022-11-03
1071
글번호 163500
시스템
답변완료

문의드립니다.

안녕하세요 사진파일 처럼 빨간 화살표 부분 사각 박스를 그린후 박스 시작세로선과 박스 끝세로선이 캔들의 세로부분 중심부분부터 그려지는데요. 검은색으로 빗금친 부분부터 그릴 수 있을까요? 시작세로선이 캔들의 맨 왼쪽 끝세로선이 캔들의 맨오른쪽까지 그릴 수 있을까요? 감사합니다. if cond1 == True Then { if cond1[1] == False Then { Box1 = Box_New(sDate,sTime,Value10,NextBarSdate,NextBarStime,H); Box_SetColor(Box1,Black); Box_SetFill(Box1,True,70,True); } Else { Box_SetEnd(Box1,sDate,sTime,O); } }
프로필 이미지
올독
2022-11-03
836
글번호 163496
지표
답변완료

추세선 쓰리바닥

input : Period(12),선두께(1); Var:상승색(Red), 하락색(Blue); Var:j(0),T(0); Var: date11(0),date12(0),time11(0),time12(0),TL1(0),TL(0), date21(0),date22(0),time21(0),time22(0), date31(0),date32(0),time31(0),time32(0),tx(0),tx1(0),tl4(0); Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0)/*,ZZ[20](0)*/; Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0),TX2[7](0),TX3[7](0); r[0] = 0; r[1] = 2; r[2] = 3.; r[3] = -1; r[4] = -2.; r[5] = 1; r[6] = 0.5; For j = 0 To 19 { HiBar[j] = HiBar[j] + 1; LoBar[j] = LoBar[j] + 1; } if crossup(c,highest(H,Period)[1]) Then T = 1; if CrossDown(c,Lowest(L,Period)[1]) Then T = -1; If T == -1 Then { If T[1] != -1 Then { For j = 18 DownTo 0 { LoVal[j+1] = LoVal[j]; LoBar[j+1] = LoBar[j]; //ZZ[j+1] = ZZ[j]; } LoVal[0] = L; LoBar[0] = 0; //ZZ[0] = L; date11 = date[HiBar[0]]; time11 = stime[HiBar[0]]; Value11 = HiVal[0]; date12 = date[LoBar[0]]; time12 = stime[LoBar[0]]; Value12 = LoVal[0]; TL_Delete(tl); TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen); TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); TL_SetColor(TL1,하락색); Tx = Text_New(date11,time11,Value11,"●"); #동그라미 색상, 빨강 Text_SetColor(Tx,Blue); Text_SetStyle(Tx,2,2); Text_SetSize(tx,7); //tx = Text_New(date11,time11,Value11,NumToStr(value11,2)+NewLine+NumToStr(value11,2)+NewLine); //Text_SetStyle(tx,2,1); date21 = date[HiBar[0]]; time21 = stime[HiBar[0]]; date22 = date[0]; time22 = stime[0]; for j = 0 to 6 { fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]); } #TL2[1] = TL_New(date21,time21,fr[1],date22,time22,fr[1]); #TL_SetColor(TL2[1],RED); #TL_SetStyle(TL2[1], 3); #TL2[2] = TL_New(date21,time21,fr[2],date22,time22,fr[2]); #TL_SetColor(TL2[2],RED); #TL_SetSize(TL2[2],1); #TX2[2] = Text_New(date22,time22,fr[2],NumToStr(fr[2],2)); #Text_SetColor(Tx2[2],BWHITE); #Text_SetStyle(TX2[2],1,1); #TL2[3] = TL_New(date21,time21,fr[3],date22,time22,fr[3]); #TL_SetColor(TL2[3],RED); #TL_SetStyle(TL2[3], 3); #TL2[4] = TL_New(date21,time21,fr[4],date22,time22,fr[4]); #TL_SetColor(TL2[4],RED); #TL_SetSize(TL2[4],1); #TX2[4] = Text_New(date22,time22,fr[4],NumToStr(fr[4],2)); #Text_SetColor(Tx2[4],BWHITE); #Text_SetStyle(TX2[4],1,0); } If LoVal[0] > L Then { LoVal[0] = L; LoBar[0] = 0; //ZZ[0] = L; date12 = date[LoBar[0]]; time12 = stime[LoBar[0]]; Value12 = LoVal[0]; TL_SetEnd(TL1, date12,time12,Value12); date22 = date[0]; time22 = stime[0]; TL_SetEnd(TL2[0],date22,time22,fr[0]); TL_SetEnd(TL2[1],date22,time22,fr[1]); TL_SetEnd(TL2[2],date22,time22,fr[2]); Text_SetLocation(TX2[2],date22,time22,fr[2]); TL_SetEnd(TL2[3],date22,time22,fr[3]); TL_SetEnd(TL2[4],date22,time22,fr[4]); Text_SetLocation(TX2[4],date22,time22,fr[4]); TL_SetEnd(TL2[5],date22,time22,fr[5]); TL_SetEnd(TL2[6],date22,time22,fr[6]); TL_Delete(tl); TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen); } } If T == 1 Then { If T[1] != 1 Then { For j = 18 DownTo 0 { HiVal[j+1] = HiVal[j]; HiBar[j+1] = HiBar[j]; //ZZ[j+1] = ZZ[j]; } HiVal[0] = H; HiBar[0] = 0; //ZZ[0] = H; date11 = date[LoBar[0]]; time11 = stime[LoBar[0]]; Value11 = LoVal[0]; date12 = date[HiBar[0]]; time12 = stime[HiBar[0]]; Value12 = HiVal[0]; TL_Delete(tl); TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen); TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); TL_SetColor(TL1,상승색); Tx1 = Text_New(date11,time11,Value11,"●"); #동그라미 색상, 파랑 Text_SetColor(Tx1,Red); Text_SetStyle(Tx1,2,2); Text_SetSize(tx1,7); //tx = Text_New(date11,time11,Value11,NewLine+NumToStr(value11,2)+NewLine+NumToStr(value11,2)); //Text_SetStyle(tx,2,0); date31 = date[LoBar[0]]; time31 = stime[LoBar[0]]; date32 = date[0]; time32 = stime[0]; for j = 0 to 5 { fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]); } } If HiVal[0] < H Then { HiVal[0] = H; HiBar[0] = 0; //ZZ[0] = H; date12 = date[HiBar[0]]; time12 = stime[HiBar[0]]; Value12 = HiVal[0]; TL_SetEnd(TL1, date12,time12,Value12); date32 = date[0]; time32 = stime[0]; TL_SetEnd(TL3[0],date32,time32,fr[0]); TL_SetEnd(TL3[1],date32,time32,fr[1]); TL_SetEnd(TL3[2],date32,time32,fr[2]); Text_SetLocation(TX3[2],date32,time32,fr[2]); TL_SetEnd(TL3[3],date32,time32,fr[3]); TL_SetEnd(TL3[4],date32,time32,fr[4]); Text_SetLocation(TX3[4],date32,time32,fr[4]); TL_SetEnd(TL3[5],date32,time32,fr[5]); TL_SetEnd(TL3[6],date32,time32,fr[6]); TL_Delete(tl); TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen); } } TL_SetSize(TL1,선두께); //TL_SetEnd(tl,NextBarSdate,NextBarStime,NextBarOpen); 0.35p 내에서 쓰리바닥을 형성하는지를 실시간으로 보기위한 지표입니다. 1.추세선이 음전환될 때, 직전저점과 전전저점의 차이가 상하 관계없이 0.35p 이내이면 상단에 동그라미 표시. 2.동그라미 삭제 시점:직전저점과 전전저점 중에 "높은 저점"을 기준으로하여 가.아래로 -0.35p 도달 전에 양전환시. 나.계속 하락하여 -0.35p를 하향 붕괴할 때. (동그라미는 생성과 삭제를 반복합니다.) 감사합니다.
프로필 이미지
고성
2022-11-03
986
글번호 163495
지표
답변완료

타주기 참조 시스템의 연산 속도를 높이려면 ?

안녕하세요. 1. 예스트레이더에서 기본 10틱 차트에 Data2 에는 4분봉을 설정하고, 4분봉이 완성되면 지표 를 계산하여 틱차트에서 매매를 하는 시스템입니다. 지표가 연산을 많이 해야 해서 4분봉이 완성되었을 때 한번만 연산을 하게 만들고 싶습니다. 아래 시스템을 시뮬레이션 해보면 4분에 한 번씩 제대로 실행하고 있지만, 전략실행차트에서 실행을 하면 bn4 는 맞게 나오는 반면, MessageLog 가 틱봉마다 계속 프린트 되고 있습니다. MessageLog만 나오고 실제 연산은 제가 원하는 대로 4분에 한번만 하고 있는 걸까요? 만약 연산이 계속 되고 있다면 연산을 한번만 할 수 있도록 수식을 수정해 주시면 감사하겠습니다. 만약 연산이 4분에 한번만 이루어지고 있다면 틱 처리 속도를 높이기 위해 컴퓨터나 예스트레이더의 설정을 바꿔 줘야 하는 부분이 있다면 알려 주시면 감사하겠습니다. vars: T4(0), bn4(0); T4 = Data2(sTime); if (T4 != T4[1]) Then { MessageLog("%.0f %.0f T4 %.0f %.0f bn4 %.0f C4 %.2f", Date, Time, T4[1], T4, bn4, Data2(C[1])); bn4 = bn4 + 1; // 4분봉 barIndex //여기에 연산식이 있습니다 } 2. 하이투자증권예스트레이더에 64비트용이 있던데 여기서 해외선물(E-mini S&P 500, E-mini Nasdaq 100 등) 거래가 가능한가요? 감사합니다.
프로필 이미지
gemini
2022-11-03
1059
글번호 163494
시스템
답변완료

제 수식작성 구성 방식이 잘못되었나요

수식 코드 중에 아래의 수식이 들어가면 검색이 되고 이 수식을 빼면 검색이 되지 않습니다. 혹시 제가 작성하는 수식 방식에 문제가 있나요??? if ( V > nMav * 0.08 ) Then { Find(0); } 3분봉 기준으로 당일 고가를 돌파하는 종목을 검색하는 수식입니다. 당일 분봉에서만 검색하고 싶고요. 제가 작성하는 방식이 잘못된건가요?? /////////////////////////////////////////////////////////////////// //// 종목검색 수식.... input : TargetDate(20221103); var : nCnt(0), nSum(0), nMav(0), nMav1(0), nMav2(0), nMav3(0); var : dwCloseRate(0), dwLowRate(0), dwLowCloseRate(0), dwAdjustedRate(0), dwRate(0); var : bIsCond1(False), bIsCond2(False), bIsCond3(False), bIsCond4(False), bIsCond5(False); var : nCondTime1(0), nCondTime2(0); ////////////////////////////////////////////////////////////////////////////////// ////// 전역변수 설정. ////// ////// var1 ==> 당일 캔들 인덱스.... ////// var2 ==> 과거 (10/20/40일) 최소 일평균거래량 ////// var3 ==> 당일 종가 상 고가 캔들 Index ////// var4 ==> ////// Var5 ==> ////// var6 ==> ////// var7 ==> ////// var8 ==> 5EMA의 20EMA 이탈 캔들 Index ////// var9 ==> 5EMA의 60EMA 이탈 캔들 Index ////// var10 ==> 과거 일평균거래량 대비 당일 거래량 비율 ////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// ///// DataCompress = (0:틱, 1:초, 2:분, 3:일, 4:주, 5:월......) if ( date != date[1] && date == TargetDate) Then { nSum = 0; For nCnt = 1 to 40 { nSum = nSum + DayVolume(nCnt); if nCnt == 10 Then nMav1 = INT(nSum / 10); Else if nCnt == 20 Then nMav2 = INT(nSum / 20); Else if nCnt == 40 Then nMav3 = INT(nSum / 40); } ////////////////////////////////////////////////////////////////////////// //// 3분봉 기준으로으로 캔들 평균거래량 nMav = Min(nMav1, nMav2, nMav3); var3 = 1; var4 = H; Var5 = 0; Var6 = 0; bIsCond1 = False; bIsCond2 = False; bIsCond3 = False; bIsCond4 = False; bIsCond5 = False; } else if ( date == TargetDate && nMav > 80000 ) Then { dwRate = (C - C[1])/C[1]*100; dwCloseRate = (C - DayClose(1))/DayClose(1)*100; dwLowRate = (DayLow(0) - DayClose(1))/DayClose(1)*100; dwLowCloseRate = (DayClose(0) - DayLow(0))/DayLow(0)*100; //////////////////////////////////////////////////// ///// 이 코드가 들어가면 검색이 되고 이 코드를 빼면 검색이 되지 않아요. ///// 전혀 의미없는 코드 같은데....... if ( V > nMav * 0.08 ) Then { Find(0); } ////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// ////// 장시작 후 하락하다가 고점 돌파 후 상승전환 한 경우..... if ( C > H[Var3] && sTime >= 090900 && sTime <= 113000 && bIsCond1 == False ) Then { if ( dwCloseRate > 0 && dwLowRate < 0 && dwLowCloseRate > 1.5 ) Then { nCondTime1 = sTime; bIsCond1 = True; } } //////////////////////////////////////////////////////////////////////////////////////////// ////// 장시작 직후(10시이전) 거래량을 수반하면서 캔들 등락률이 1% 이상..... if ( C > H[Var3] && sTime >= 090900 && sTime <= 100100 && bIsCond2 == False ) Then { if ( dwRate > 0.8 && dwCloseRate > 0 && (V > DayVolume(1)*0.1 || V > nMav/125*5) ) Then { nCondTime2 = sTime; bIsCond2 = True; } } if ( bIsCond1 == TRUE ) Then Find(nCondTime1); if ( bIsCond2 == TRUE ) Then Find(nCondTime2); if ( H >= H[Var3] ) Then { Var3 = 1; } Else { Var3 = var3+1; } }
프로필 이미지
태공
2022-11-04
983
글번호 163493
종목검색
답변완료

MACD + 스토캐스틱 수식 질문입니다.

질문 드립니다! 하고싶은 액션은, · 스토캐스틱 %D가 과매수 구간 퇴장 후, B)%K가 %D를 하향돌파 & C)MACD가 시그널 선을 하향돌파 시 매도 · 스토캐스틱 %D가 과매도 구간 퇴장 후, B)%K가 %D를 상향돌파 & C)MACD가 시그널 선을 상향돌파 시 매수 여기서 주의점은 1) A)와C)는 누가 먼저 나오든 신호가 켜진 상태 2) 단 B)는 A)신호가 나온 후의 것만 신호접수 (ex.과매수 구간에서 이미 나온 %K %D교차는 무시) -> 2)의 코딩을 잘 못하겠어서 도움을 요청드립니다. 아래는 사용한 코딩식입니다. Var1 = StochasticsK(12,5); Var2 = StochasticsD(12,5,5); Var3 = MACD(12,26); Var4 = Ema(Var3,9); # %D 과열구간 내 추세전환(변곡점) 후, %K %D교차 if CrossDown(Var2, 80) then if CrossDown(Var1,Var2) Then Condition1 = True; if CrossDown(Var2,20) Then Condition1 = False; if CrossUp(Var2, 20) then if CrossUp(Var1,Var2) Then Condition2 = True; if Crossup(Var2,80) Then Condition2 = False; # 매수 if Condition1 == True && CrossDown(Var3,Var4) Then Sell(); # 매도 if Condition2 == True && CrossUp(Var3,Var4) Then Buy();
프로필 이미지
tsys7
2022-11-02
1245
글번호 163492
시스템