커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8105
글번호 230811
답변완료
안녕하십니까
안녕하십니까 ?
아래와 같이 하루에 3번만 진입코져 합니다.
그런데 여러번 진입이 됩니다.
수정 부탁합니다.
감사합니다.
// 매도/매수 3회로 제한 ######################################
var : count(0),cnt(0);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
if count < 3 and stime >= 090000 and stime < 153000 and T == 1 Then{
if L >= var2+PriceScale*4 Then
if TotalTrades == 0 or
(MarketPosition == -1 and BarsSinceEntry >= 150) or
(TotalTrades >= 1 and MarketPosition == 0 and BarsSinceExit(1) >= 150) Then
Bcond = true;
if Bcond == true and C > value3 then
buy("b",atlimit,var1);
}
2018-06-28
248
글번호 120142
답변완료
다시 수식 문의드립니다.
친절하게 답변 주셔서 감사합니다.
그럼 예스랭귀지에서 가능한 수식만 작성해주실수 없을까요?
혼자 아무리 매뉴얼 보고 수식을 짜보아도 검증을 해보면 실제 주문이 나가지 않아서요.
한 번 수식 예를 작성해주시면 그 걸 기반으로 해서 매뉴얼 보면서 공부해 나가면 좀 낫지 않을까 생각이 들어서요.
1. 당일 일중거래에 적용하고자 합니다.
당일 차트의 시봉을 1번봉으로 해서
3번봉부터 5번봉 까지 세 봉의 고가, 저가, 종가, 중간값 4개를 내부변수로 놓습니다.
(1) 세 봉의 고저폭이 당일 시가 대비 0.3프로 이하이면
가. 세 봉의 머리의 합과 꼬리의 합을 비교하여 머리 합이 더 크면 5번봉의 종가로 매도해줍니다.
매도해주었는데 세 봉의 고가+1틱에 도달하면 매도를 청산해주고 반대로 매수 진입해줍니다. 다시 세 봉의 저가-1틱에 도달하면 매수를 청산해주고 반대로 매도 진입해줍니다. 두 번 연이어 손실이 발생하면 그 날의 거래는 중단합니다.
손절은 세 봉의 중간값을 기준으로 0.2프로를 적용하고 익절은 세 봉의 중간값을 기준으로 0.4프로를 적용해줍니다.
나. 세 봉의 머리의 합과 꼬리의 합이 같으면 세 번째 봉이 양봉이면 종가로 매도 주문을 넣어주고 싶습니다.
(2) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로 이하이면
현재가가 세 봉의 고가 –1틱에 도달하면 매도주문을 넣어주고
현재가가 세 봉의 저가+1틱에 도달하면 매수주문을 넣어주고 싶습니다.
매도 주문이 먼저 걸렸을 때에는 세 봉의 중간값에 도달하면 현재가로 매도를 청산해주고 매수로 진입해줍니다. 익절은 0.4프로를 적용해주고 손절은 세 봉의 저가-1틱에 도달하면 매수청산해주고 다시 매도로 진입해줍니다.
(3) 5번째 봉의 종가와 세 봉의 중간값의 차이가 그 날 시가의 0.1프로보다 크면
/ 종가가 중간값보다 높으면 중간값에 도달하면 중간값으로 매수주문을 넣어줍니다.
중간값이 걸린 후 세 봉의 고가-1틱에 도달하면 매수를 청산해주고 매도로 바꾸어줍니다.
그리고 다시 중간값이 걸리면 매도를 청산해주고 매수로 바꾸어줍니다. 두 번째 걸린 중간값 매수는 다시 고가 –1틱 가격에 도달해도 청산해주지 않습니다.
(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
308
글번호 120141
답변완료
문의드립니다.
안녕하십니까..
오일 23:30분 종가기준
+ 0.2에 매수
- 0.2에 매도 진입
+- 0.5에 익절 또는 손절코자 합니다.
익일 02:00에는 전량 청산코자 합니다.
늘 감사합니다...
2018-06-28
247
글번호 120140
답변완료
이평선 색상변화에 따른 신호발생
20일 이동평균선이 상승하면 적색, 하락하면 청색으로 색상이 변화되고 색상이 변화되는 지점에 매수(적색), 매도(청색) 신호가 발생되도록 수식를 만들어 주시기 부탁합니다. 수식은 이메일 jrpk 0153 @ daum.net 으로 보내주시기 부탁합니다.
2018-06-28
1602
글번호 120139
답변완료
수식 요청드립니다.
수고 많으십니다.
시스템 수식 요청 드립니다.
<매수>
1. 20일선이 우상향
2. 캔들이 5일선 밑에서 시작
3. 시가 +1틱에서 진입
<매도>
1. 20일선이 우하향
2. 캔들이 5일선 위에서 시작
3. 시가 -1틱에서 진입
그리고 20일선 우상향할때 빨간색, 우하향할때 파란색으로 해주세요
그리고 매매 시간대는 16:00~02:00 으로 설정부탁드립니다.
감사합니다.
2018-06-28
289
글번호 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
277
글번호 120136
답변완료
옵션 만기일 스팟 청산로직 부탁드립니다.
옵션만기일에
계좌 잔고를 확인하여 취하고 있는 모든 포지션을
오후 15:18분에 모두 청산하는 스팟 수식 부탁드립니다.
감사합니다.
2018-06-28
297
글번호 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]);
}
이상입니다.
2018-06-28
557
글번호 120126
답변완료
문위드립니다
20 이동 평균선 기준으로 매수,매도흫 하고싶습니다
보통은 종가위에 완성봉이면 바로 매수신호 뜨는데,,,
20이평 위에 완성봉기준으로 2개가 있을때 매수신호발생,,완성봉 기준으로 2개가
20이평 아래면 매도신호 발생
봉하나로 이평을 왓다갖다 계속신호가 나와서 그래요 ㅜㅜ
부탁드립니다
2018-06-28
252
글번호 120124