커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

수식 요청드립니다.

수고 많으십니다. 시스템 수식 요청 드립니다. <매수> 1. 20일선이 우상향 2. 캔들이 5일선 밑에서 시작 3. 시가 +1틱에서 진입 <매도> 1. 20일선이 우하향 2. 캔들이 5일선 위에서 시작 3. 시가 -1틱에서 진입 그리고 20일선 우상향할때 빨간색, 우하향할때 파란색으로 해주세요 그리고 매매 시간대는 16:00~02:00 으로 설정부탁드립니다. 감사합니다.
프로필 이미지
이인
2018-06-28
226
글번호 120137
강조
답변완료

함수요청

안녕하세요? 홍콩 항셍선물 5분봉으로 거래 중입니다. 거래 중에 진입 봉에서 청산이 되면 당일 매매는 중지하고자 합니다. 함수 수정요청드립니다. 감사합니다. Vars : SP(0,data1), TickSize(0,data1); Vars : fstHH(0,data1), fstLL(0,data1), sndHH(0,data2), sndLL(0,data2); var : v1(0,data2),v2(0,data2); SP = MarketPosition; TickSize = PriceScale; v1 = data2(H); v2 = data2(L); IF v1[10] > 0 Then Begin fstHH = data1(Highest(H, 5)); fstLL = data1(Lowest(L, 5)); sndHH = Max(v1, v1[1], v1[2], v1[3], v1[4], v1[5], v1[6], v1[7], v1[8], v1[9], v1[10]); sndLL = Min(v2, v2[1], v2[2], v2[3], v2[4], v2[5], v2[6], v2[7], v2[8], v2[9], v2[10]); End; IF MarketPosition == 0 and data2(C) > sndHH[1] Then Buy("B", AtStop, fstHH - TickSize); IF MarketPosition == 0 and data2(C) < sndLL[1] Then Sell("S", AtStop, fstLL - TickSize);
프로필 이미지
흰둥이아빠
2018-06-28
208
글번호 120136
시스템
답변완료

옵션 만기일 스팟 청산로직 부탁드립니다.

옵션만기일에 계좌 잔고를 확인하여 취하고 있는 모든 포지션을 오후 15:18분에 모두 청산하는 스팟 수식 부탁드립니다. 감사합니다.
프로필 이미지
디코
2018-06-28
221
글번호 120133
시스템
답변완료

지표식 부탁드립니다.

<아래>는 메타트레이더5에서 공개된 지표식인데, 예.트에 맞게 부탁드려도 될런지요? 아니면 제가 제대로 이해를 했는지는 모르겠습니다만, 이것이 의미하는 다음내용으로 작성 가능한지 검토부탁드립니다. < 다음 > -요청 지표식: 엔벨로프 -중심 이평선: 21일 지수이평선. ( 21일 수치는 외부변수값 P1으로 부탁드립니다.) -엔벨로프 상하한선 : 60 일간의 종가를 95% 포함 가능하게 자동조절. (60일 수치는 외부변수값 N으로 부탁드립니다.) -엔벨로프 수정주기: 일봉기준은 1주일에 한번 수정.(주봉기준은 1달에 한번 수정) <메타트레이더에 적용되는 지표식> Elder Auto Envelopes - indicator for MetaTrader 5. //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #property copyright "www.forex-tsd.com" #property link "www.forex-tsd.com" #property indicator_chart_window #property indicator_buffers 5 #property indicator_plots 4 #property indicator_label1 "Ema" #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 clrDeepSkyBlue,clrSandyBrown #property indicator_width1 2 #property indicator_label2 "Fast ema" #property indicator_type2 DRAW_LINE #property indicator_color2 clrGray #property indicator_label3 "Upper band" #property indicator_type3 DRAW_LINE #property indicator_style4 STYLE_DASHDOTDOT #property indicator_color3 clrDimGray #property indicator_label4 "Lower band" #property indicator_type4 DRAW_LINE #property indicator_style3 STYLE_DASHDOTDOT #property indicator_color4 clrDimGray // // // // // enum enPrices { pr_close, // Close pr_open, // Open pr_high, // High pr_low, // Low pr_median, // Median pr_typical, // Typical pr_weighted, // Weighted pr_haclose, // Heiken ashi close pr_haopen , // Heiken ashi open pr_hahigh, // Heiken ashi high pr_halow, // Heiken ashi low pr_hamedian, // Heiken ashi median pr_hatypical, // Heiken ashi typical pr_haweighted, // Heiken ashi weighted pr_haaverage // Heiken ashi average }; input int EmaPeriod = 21; input int FastEmaPeriod = 13; input enPrices Price = pr_close; input double DeviationsFactor = 2.7; // Original was 2.7 best for stock markets input int DeviationsPeriod = 100; // // // // // double slowEma[]; double slowEmaColor[]; double fastEma[]; double envelopeUp[]; double envelopeDn[]; //+------------------------------------------------------------------+ //| | //|------------------------------------------------------------------| // // // // // int OnInit() { SetIndexBuffer(0,slowEma ,INDICATOR_DATA); SetIndexBuffer(1,slowEmaColor,INDICATOR_COLOR_INDEX); SetIndexBuffer(2,fastEma ,INDICATOR_DATA); SetIndexBuffer(3,envelopeUp ,INDICATOR_DATA); SetIndexBuffer(4,envelopeDn ,INDICATOR_DATA); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // double work[][2]; #define _percp 0 #define _devs 1 // // // // // int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { if (ArrayRange(work,0) != rates_total) ArrayResize(work,rates_total); // // // // // for (int i=(int)MathMax(prev_calculated-1,0); i<rates_total && !IsStopped(); i++) { double price = getPrice(Price,open,close,high,low,i,rates_total); double ema = iEma(price,EmaPeriod,i,rates_total,0); double bullp = MathAbs(high[i]-ema); double bearp = MathAbs(low[i] -ema); double maxp = MathMax(bullp,bearp); work[i][_percp] = maxp/ema; work[i][_devs] = work[(int)MathMax(i-1,0)][_devs]; // // // // // MqlDateTime curTime,prevTime; TimeToStruct(time[i],curTime); TimeToStruct((int)MathMax(i-1,0),prevTime); if (curTime.day_of_week<prevTime.day_of_week || _Period>PERIOD_W1) { double avg = 0; double sum = 0; for (int k=0; k<DeviationsPeriod && (i-k-1)>=0; k++) avg += work[i-k-1][_percp]; avg /= DeviationsPeriod; for (int k=0; k<DeviationsPeriod && (i-k-1)>=0; k++) sum += (work[i-k-1][_percp]-avg)*(work[i-k-1][_percp]-avg); // // // // // work[i][_devs] = MathSqrt(sum/DeviationsPeriod); } // // // // // slowEma[i] = ema; envelopeUp[i] = ema*(1+(DeviationsFactor*work[i][_devs])); envelopeDn[i] = ema*(1-(DeviationsFactor*work[i][_devs])); if (FastEmaPeriod>0) { fastEma[i] = iEma(price,FastEmaPeriod,i,rates_total,1); if (fastEma[i]>slowEma[i]) slowEmaColor[i] = 0; if (fastEma[i]<slowEma[i]) slowEmaColor[i] = 1; } } return(rates_total); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // double workHa[][4]; double getPrice(enPrices price, const double& open[], const double& close[], const double& high[], const double& low[], int i, int bars) { // // // // // if (price>=pr_haclose && price<=pr_haaverage) { if (ArrayRange(workHa,0)!= bars) ArrayResize(workHa,bars); // // // // // double haOpen; if (i>0) haOpen = (workHa[i-1][2] + workHa[i-1][3])/2.0; else haOpen = open[i]+close[i]; double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0; double haHigh = MathMax(high[i], MathMax(haOpen,haClose)); double haLow = MathMin(low[i] , MathMin(haOpen,haClose)); if(haOpen <haClose) { workHa[i][0] = haLow; workHa[i][1] = haHigh; } else { workHa[i][0] = haHigh; workHa[i][1] = haLow; } workHa[i][2] = haOpen; workHa[i][3] = haClose; // // // // // switch (price) { case pr_haclose: return(haClose); case pr_haopen: return(haOpen); case pr_hahigh: return(haHigh); case pr_halow: return(haLow); case pr_hamedian: return((haHigh+haLow)/2.0); case pr_hatypical: return((haHigh+haLow+haClose)/3.0); case pr_haweighted: return((haHigh+haLow+haClose+haClose)/4.0); case pr_haaverage: return((haHigh+haLow+haClose+haOpen)/4.0); } } // // // // // switch (price) { case pr_close: return(close[i]); case pr_open: return(open[i]); case pr_high: return(high[i]); case pr_low: return(low[i]); case pr_median: return((high[i]+low[i])/2.0); case pr_typical: return((high[i]+low[i]+close[i])/3.0); case pr_weighted: return((high[i]+low[i]+close[i]+close[i])/4.0); } return(0); } // // // // // double workEma[][2]; double iEma(double price, double period, int r, int totalBars, int instanceNo=0) { if (ArrayRange(workEma,0)!= totalBars) ArrayResize(workEma,totalBars); // // // // // double alpha = 2.0 / (1.0+period); if (r<1) workEma[r][instanceNo] = price; else workEma[r][instanceNo] = workEma[r-1][instanceNo]+alpha*(price-workEma[r-1][instanceNo]); return(workEma[r][instanceNo]); } 이상입니다.
프로필 이미지
theogo66
2018-06-28
383
글번호 120126
지표
답변완료

문위드립니다

20 이동 평균선 기준으로 매수,매도&#55147; 하고싶습니다 보통은 종가위에 완성봉이면 바로 매수신호 뜨는데,,, 20이평 위에 완성봉기준으로 2개가 있을때 매수신호발생,,완성봉 기준으로 2개가 20이평 아래면 매도신호 발생 봉하나로 이평을 왓다갖다 계속신호가 나와서 그래요 ㅜㅜ 부탁드립니다
프로필 이미지
이공주7
2018-06-28
194
글번호 120124
시스템
답변완료

추가부탁드립니다

58186번 2, 120일선추가 체크활수있게해주세요 잘 부탁드립니다
프로필 이미지
용각산
2018-06-28
180
글번호 120123
시스템
답변완료

포인트를 가격(원)으로 변경

아래 조건을 선물에 사용하고 있습니다. 주식선물에 사용할 수 있도록 단위를 가격(원)으로 변경바랍니다. *************************************************************************** input : 손절(20),익절(20),TR(20),최소가격변화포인트(0.5), 봉갯수(50); if MarketPosition == -1 then { ExitShort("sl1",AtStop,EntryPrice+PriceScale*손절); ExitShort("sp1",AtLimit,EntryPrice-PriceScale*익절); ExitShort("str1",AtStop,Lowest(l,BarsSinceEntry)+PriceScale*TR); } SetStopInactivity(최소가격변화포인트,봉갯수,PointStop);
프로필 이미지
목마와숙녀
2018-06-28
193
글번호 120122
시스템
답변완료

문의드립니다..

받은 아래식입니다. 24:00에 청산이 되는군요. 조건 충족시까지 계속 가져가려면 어떻게 하나요 ? 익일 05:00에 전량 청산하려고 하면 또 어떻게 합니까..? 감사합니다.. ------------------------------- var : tcond(false); if stime >= 170000 and stime[1] < 170000 Then { tcond = true; var1 = c; } if sdate != sdate[1] Then { tcond = false; if MarketPosition == 1 Then exitlong(); if MarketPosition == -1 Then ExitShort(); } if Tcond == true then { if MarketPosition >= 0 and H < var1+0.002 Then sell("s1",Atlimit,var1+0.002,1); if MarketPosition == -1 then { ExitShort("sp",atlimit,AvgEntryPrice-0.005); ExitShort("sl",AtStop,AvgEntryPrice+0.005); if MaxEntries == 1 Then sell("s2",AtLimit,var1+0.004,1); if MaxEntries == 2 Then sell("s3",AtLimit,var1+0.006,1); } if MarketPosition <= 0 and L > var1-0.002 Then buy("b1",Atlimit,var1-0.002,1); if MarketPosition == 1 then { ExitLong("bp",atlimit,AvgEntryPrice+0.005); ExitLong("bl",AtStop,AvgEntryPrice-0.005); if MaxEntries == 1 Then Buy("b2",AtLimit,var1-0.004,1); if MaxEntries == 2 Then Buy("b3",AtLimit,var1-0.006,1); } }
프로필 이미지
호시우보
2018-06-28
179
글번호 120121
시스템
답변완료

수식 문의드립니다.

안녕하세요. 늘 친절한 답변에 감사드립니다. 수식 문의 드립니다. 1. 당일 일중거래에 적용하고자 합니다. 손절과 익절을 진입가 대비 퍼센트로 주고 싶은데 시뮬레이션 최적화를 할 수 있도록 외부변수로 설정해주고 싶습니다. 당일 차트의 시봉을 1번봉으로 해서 3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다. (1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면 가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다. 매도해주었는데 세 봉의 고가+1틱에 도달하면 1틱 아래로 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 1틱 위로 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다. 손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다. (매수 주문을 했는데 손절 계산가가 300.13이 나왔으면 손절가는 300.10으로 불리하게 해주고 손절감시가 300.05에 도달하면 300.10으로 매수청산되게 주문을 넣고 싶습니다.) (매수 주문을 했는데 익절 계산가가 300.13이 나왔으면 익절주문가는 300.10으로 넣고 싶습니다.) 나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다. (2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면 현재가가 세 봉의 고가 &#8211;1틱에 도달하면 매도주문을 넣어주고 현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주는데 오후 1시까지 한 주문이 먼저 걸리면 다른 주문은 취소해주고 싶습니다. 매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 저가로 매수청산해주고 다시 매도로 진입해줍니다. 이 때 손절은 0.3프로 적용해주고 익절은 세 봉의 중간값 기준 0.4프로를 적용해줍니다. (3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면 / 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다. (중간값이 300.13으로 계산이 되면 300.10으로 넣어주고 싶습니다.) 중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다. 그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 &#8211;1틱 가격에 도달해도 청산해주지 않습니다. / 종가가 중간값보다 낮으면 중간값으로 매도주문을 넣어줍니다. (중간값이 300.13으로 계산되면 300.15로 매도주문을 넣어주고 싶습니다.) (4) 오후 1시까지 세 봉의 고가를 돌파한 신고가가 발생하고 세 봉의 저가를 돌파하는 신저가가 발생하지 않은 경우 방향을 매수로 결정하고 오후 1시에 보유한 진입이 매도이면 모두 청산해주고자 합니다. 세 봉의 고가를 돌파한 신고가가 발생하고 다시 세 봉의 저가를 돌파한 신저가가 발생한 경우 방향을 매도로 결정해주고 오후 1시에 보유한 진입이 매수이면 모두 청산해주고자 합니다. (5) 신고가 신저가가 연속해서 발생할 때 마지막에 발생한 게 신고가이면 방향을 매수로 결정해주고 마지막에 발생한 게 신저가이면 방향을 매도로 결정해주고 싶습니다. (6) 오후 1시까지 세 봉의 저가 매도 기준 0.3프로 익절가에 도달했는데 다시 오후 1시까지 세 봉의 중위값으로 돌아온 경우 기존 매도진입을 모두 청산해주고 매수진입해주고 싶습니다. (7) 손절을 설정해줄 때 오전 1100까지의 고가와 저가를 계산한 후 매도의 손절은 오전 1100까지의 고가를 돌파하는 신고가가 발생한 경우 신고가보다 5틱 아래 가격에 0.3프로를 더한 가격으로 손절가를 설정해주고 싶습니다. (8) 그 날 진입의 손실의 합이 2.5이상이면 모든 보유 진입을 청산해주고자 합니다. (9) 그 날 진입의 수익의 합이 3.5이상이면 모든 보유 진입을 청산해주고자 합니다. (10) 보유한 모든 진입은 종가에 청산해주고 싶습니다. 질문이 많아 죄송합니다. 감사합니다.
프로필 이미지
만법귀일
2018-06-28
202
글번호 120120
시스템