커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1671
글번호 230811
답변완료
수정 부탁드립니다!
안녕하세요!
수정해 주신 수식을 적용해보니 당일시가가 텍스트 출력이 안되네요!
한번 더 검토 부탁드립니다!
감사합니다!
input : 날짜변경시간(090000);
var : date0(0), date1(0), time0(0), time1(0);
var : HH(0),HH1(0), Hdate(0),Htime(0),Hdate1(0), Htime1(0), TX11(0), TX1(0);
var : LL(0),LL1(0), Ldate(0),Ltime(0),Ldate1(0), Ltime1(0), TX12(0), TX2(0);
var : OO(0),OO1(0), Odate(0),Otime(0),Odate1(0), Otime1(0), TX13(0), TX3(0);
var : MM(0),MM1(0), Mdate(0),Mtime(0),Mdate1(0), Mtime1(0), TX14(0), TX4(0);
if stime == 날짜변경시간 then
{
date0 = sdate;
date1 = date0[1];
time0 = stime;
time1 = time0[1];
#전일고가
HH = H;
HH1 = HH[1];
TL_Delete(var11);
var11 = TL_New(date1, time1, HH1, date0, time0, HH1);
TL_SetExtRight(var11,true);
TL_SetColor(var11, red);
#전일저가
LL = L;
LL1 = LL[1];
TL_Delete(var12);
var12 = TL_New(date1, time1, LL1, date0, time0, LL1);
TL_SetExtRight(var12,true);
TL_SetColor(var12, blue);
#전일중심선
MM1 = (HH1+LL1)/2;
Mdate1 = Mdate[1];
Mtime1 = Mtime[1];
TL_Delete(var14);
var14 = TL_New(date1, time1, MM1, date0, time0, MM1);
TL_SetExtRight(var14,true);
TL_SetColor(var14, rgb(255,128,255));
#전일시가
OO = O;
OO1 = OO[1];
Odate1 = Odate[1];
Otime1 = Otime[1];
TL_Delete(var13);
var13 = TL_New(date1, time1, OO1, date0, time0, OO1);
TL_SetExtRight(var13,true);
TL_SetColor(var13, black);
#당일시가
TL_Delete(var3);
var3 = TL_New(sdate[1], stime[1], OO, date0, time0, OO);
TL_SetExtRight(var3,true);
TL_SetColor(var3, black);
Text_delete(TX11);
TX11 = Text_New(sdate, stime, HH1, " ▶전일고가 : "+Numtostr(HH1,2));
Text_SetStyle(TX11, 0, 1);
Text_setColor(TX11, red);
Text_delete(TX12);
TX12 = Text_New(sdate, stime, LL1, " ▶전일저가 : "+Numtostr(LL1,2));
Text_SetStyle(TX12, 0, 0);
Text_setColor(TX12, blue);
Text_delete(TX13);
TX13 = Text_New(sdate, stime, OO1, " ▶전일시가 : "+Numtostr(OO1,2));
Text_SetStyle(TX13, 0, 0);
Text_setColor(TX13, black);
Text_delete(TX3);
TX3 = Text_New(sdate, stime, OO, " ▶당일시가 : "+Numtostr(OO,2));
Text_SetStyle(TX3, 0, 0);
Text_setColor(TX3, black);
Text_delete(TX14);
TX14 = Text_New(sdate, stime, MM1, " ▶전일중심 : "+Numtostr(MM1,2));
Text_SetStyle(TX14, 0, 0);
Text_setColor(TX14, rgb(255,128,255));
}
#당일고가
if stime <> 날짜변경시간 and H[1] >= HH then
{
HH = H[1];
Hdate = sdate[1];
Htime = stime[1];
TL_Delete(var1);
var1 = TL_New(date0, time0, HH, sdate, stime, HH);
TL_SetExtRight(var1,true);
TL_SetColor(var1, red);
}
#당일저가
if stime <> 날짜변경시간 and L[1] <= LL then
{
LL = L[1];
Ldate = sdate[1];
Ltime = stime[1];
TL_Delete(var2);
var2 = TL_New(date0, time0, LL, sdate, stime, LL);
TL_SetExtRight(var2,true);
TL_SetColor(var2, blue);
}
#당일중심
if stime <> 날짜변경시간 then
{
MM = (HH+LL)/2;
TL_Delete(var4);
var4 = TL_New(date0, time0, MM, sdate, stime, MM);
TL_SetExtRight(var4,true);
TL_SetColor(var4, rgb(255,128,255));
}
if stime == 날짜변경시간 then
{
var8 = TL_New(sdate, stime, H, sdate, stime, 999999999);
var9 = TL_New(sdate, stime, L, sdate, stime, 0);
TL_setColor(var8, rgb(200,150,250));
TL_setColor(var9, rgb(200,150,250));
}
Text_delete(TX1);
TX1 = Text_New(NextBarSdate,NextBarStime, HH, " ▶당일고가 : "+Numtostr(HH,2));
Text_SetStyle(TX1, 0, 1);
Text_setColor(TX1, red);
Text_delete(TX2);
TX2 = Text_New(NextBarSdate, NextBarStime, LL, " ▶당일저가 : "+Numtostr(LL,2));
Text_SetStyle(TX2, 0,0);
Text_setColor(TX2, blue);
Text_delete(TX4);
TX4 = Text_New(NextBarSdate, NextBarStime, MM, " ▶당일중심 : "+Numtostr(MM,2));
Text_SetStyle(TX4, 0,0);
Text_setColor(TX4, rgb(255,128,255));
Text_SetLocation(TX11,NextBarSdate,NextBarStime,HH1);
Text_SetLocation(TX12,NextBarSdate,NextBarStime,LL1);
Text_SetLocation(TX13,NextBarSdate,NextBarStime,OO1);
Text_SetLocation(TX3,NextBarSdate,NextBarStime,OO1);
Text_SetLocation(TX14,NextBarSdate,NextBarStime,MM1);
2021-05-27
688
글번호 149392
답변완료
수식 부탁합니다.
수식 부탁합니다.
1. 밴드 상하단 터치시 지속적으로 신호가 발생할것
2. 단 진입은 아래의 조건이 맞는 경우에만 진입할것
3. 조건.
- 매수진입은 강세구간(수식1)에서 발생한 신호만 진입
- 매도진입은 약세구간(수식1)에서 발생한 신호만 진입
- 만약, 강세구간에서 매수 신호가 발생하였다 하더라도 보조라인(수식2)이 매도 구간이라면 매수로 전환될때까지 기다려서 매수라인 가격에 진입
- 매도 또한 동일하게 적용
4. 조건 만족 후 진입시 익절은 50틱, 손절은 85틱(단 계약일 경우에만 적용)
5. 일차진입 후 -55틱시에는 1개 추가 진입
6. 추가 진입시에는 평균진입가 대비 26틱에서 전량정리, 손절은 평단대비 50틱
7. 1일 1회만 진입하며 완료시 당일 진입 금지
8. 본문의 강세약세 판단라인은 수식1로, 보조라인은 수식2로 아래 기술함. 수식1과 수식2는 동일하며, 지표조건 설정값만 달리함
수식1 : 강세약세 판단라인
강세 :
a=MACD(short1,long1)-eavg(MACD(short1,long1),signal1);
valuewhen(1,a>0 ,avg(c,10))
약세 :
a=MACD(short1,long1)-eavg(MACD(short1,long1),signal1);
valuewhen(1,a<0 ,avg(c,10))
수식2 : 보조라인
강세 :
a=MACD(short2,long2)-eavg(MACD(short2,long2),signal2);
valuewhen(1,a>0 ,avg(c,10))
약세 :
a=MACD(short2,long2)-eavg(MACD(short2,long2),signal2);
valuewhen(1,a<0 ,avg(c,10))
수식 부탁합니다.
2021-05-27
989
글번호 149391
답변완료
이미 진입되어 있는 상태에서 매도부터 진행 후 진입하는 방법
이미 진입되어 있는 상태에서 매도부터 진행 후 진입하는 방법
컴퓨터를 껐다가 켰는데 시그널이 되는건지 의심이 가서 다시 버튼을 눌렀더니
새로 매수신호를 기다리는 상황이 되었습니다.
어떻게 해야 하나요?(매도신호를 기다려야 하는상황)
if문으로 잔고에 물량이 있으면 먼저 해당잔고를 처리 then
sell인가요? 잔고를 기준으로 모두 1% 익절하고 청산하는 명령어 코딩을 부탁 드립니다.
2021-05-27
1061
글번호 149376
답변완료
당일 고점/저점 선을 과거로 plotting
업무에 수고 많으십니다.
다름 아니고
당일 고/저점 선을 차트 왼쪽(전일~과거 40일 전까지) plotting 하는,
지표식을 도움 주시면 고맙겠습니다.
2021-05-27
1170
글번호 149371
답변완료
문의
Inputs: Length(9), StdDevDn(2), BarsBlw(2);
Variables: BBBot(0);
BBBot = BollBanddown(Length, -StdDevDn);
If CountIF(Close < BBBot, BarsBlw) == BarsBlw Then
Buy("BB", AtStop, BBBot);
위 수식과 반대인 sell 수식 부탁드립니다.
2021-05-27
1102
글번호 149370
답변완료
지표 문의드립니다
안녕하세요,
아래와 같은 식을 사용하고 있는데,
해당 수치의 근처에 왔을 때만 선을 나타내고 싶습니다.(평상 시 다 나타나면 화면을 보기가 불편해서요)
감사합니다.
Plot1(DayOpen+(abs(dayHigh(1)-DayLow(1))+abs(dayHigh(2)-DayLow(2))+abs(dayHigh(3)-DayLow(3))+abs(dayHigh(4)-DayLow(4))+abs(dayHigh(5)-DayLow(5)))/5/2);
Plot2(DayOpen-(abs(dayHigh(1)-DayLow(1))+abs(dayHigh(2)-DayLow(2))+abs(dayHigh(3)-DayLow(3))+abs(dayHigh(4)-DayLow(4))+abs(dayHigh(5)-DayLow(5)))/5/2);
Plot11(DayOpen+(abs(dayHigh(1)-DayLow(1))+abs(dayHigh(2)-DayLow(2))+abs(dayHigh(3)-DayLow(3))+abs(dayHigh(4)-DayLow(4))+abs(dayHigh(5)-DayLow(5)))/5/4);
Plot22(DayOpen-(abs(dayHigh(1)-DayLow(1))+abs(dayHigh(2)-DayLow(2))+abs(dayHigh(3)-DayLow(3))+abs(dayHigh(4)-DayLow(4))+abs(dayHigh(5)-DayLow(5)))/5/4);
2021-05-27
969
글번호 149369
답변완료
진입횟수 오류
if loss < 2 Then
{
if T == 1 and 조건1 Then
{
T = 2;
Buy();
}
}
if loss >= 2 Then
{
if T == 1 and 조건2 Then
{
T = 2;
Buy();
}
}
이렇게 프로그램을 짰는데 왜 손실이 3회부터는 해당 조건으로 적용이 되는데
2회차에는 첫번째 조건으로 처리가 될까요?
어떻게 수정해야 2번째 손실발생부터 해당조건 2로 처리가 되는지 궁금합니다.
항상 빠른 답변과 지도편달 많은 도움을 받고 있습니다.
감사합니다.^^
2021-05-27
923
글번호 149367
답변완료
2차원배열 질문입니다
아래식은 2차원배열을 이용한 MACD매매인데요
Input: FastMA(20),SlowMA(30),MacdMA(40), NCos(4), NBars(60), AtrMult(0.0), Trailbar(30), stopPer(1.0);
Vars: MVal(0), MAvg(0), MDif(0),counter(0), MVunter(0), TotalBars(0), HighestHi(0), LowestLo(0);
Array: MV[2,50](0);
MVal = MACD(FastMA,SlowMA);
MAvg = ema(MACD(FastMA,SlowMA),MacdMA);
MDif = MVal - MAvg;
counter = 0;
If CrossUp(MDif , 0) OR CrossDown(MDIF , 0) Then Begin
For counter = 0 to 49 Begin
MV[ 0 , 50 - Counter ] = MV[ 0 , 49 - Counter ];
MV[ 1 , 50 - Counter ] = MV[ 1 , 49 - Counter ];
MV[ 2 , 50 - Counter ] = MV[ 2 , 49 - Counter ];
End;
MV[ 0 , 0 ] = Index;
MV[ 1, 0 ] = High;
MV[ 2, 0 ] = Low;
End;
HighestHi = -1;
LowestLo = 9999;
For counter = 0 to NCOs-1 Begin
If MV[ 1 , counter ] > HighestHi then
HighestHi = MV[ 1 , counter ];
If MV[ 2 , counter ] < LowestLo then
LowestLo = MV[ 2 , counter ];
End;
Totalbars = Index - MV[ 0 , NCOs - 1];
if date <> date[1] then var1 = date[1];
If TotalBars < NBars and exitdate(1) != var1 and stime < 150000 then Begin
Buy("B",atstop, HighestHi + ATR(30)*AtrMult) ;
Sell("S",atstop, LowestLo - ATR(30)*AtrMult) ;
End;
ExitLong("EL", atstop, Lowest( Low , TrailBar ));
ExitShort("ES", atstop, Highest( High , TrailBar));
SetStopLoss(StopPer);
SetStopEndofday(150000);
여기서 이해가 안가는 점이
HighestHi = -1;
LowestLo = 9999;
For counter = 0 to NCOs-1 Begin
If MV[ 1 , counter ] > HighestHi then
HighestHi = MV[ 1 , counter ];
If MV[ 2 , counter ] < LowestLo then
LowestLo = MV[ 2 , counter ];
End;
요 단락입니다.
1. 왜 굳이 NCOs -1 인가요? 그냥 처음부터 NCOs값을 한단계 줄여주면 되는거 아닌지?(NCOs를 4가아닌 3으로 설정한다던가..) 그냥 개인 스타일인지 문법적으로 이유가 있는건지 궁금합니다.
2. 애초에 최근 4개시점을 찾는데 왜 50개씩이나 저장해놓는건지 궁금합니다. NCOs값을 변경할수도 있으니 그냥 50개까지 저장해놓는건가요?
3. 해당단락에서 주석에 의하면 가장 높은 고가와 저가를 찾는것이라고 써져있는데, HighestHi 값이나 LowestLo 값을 보면 counter값은 무조건 3에서 끝나는거 아닌가요? 해당식이 어떤식으로 최근4개값중 가장 저가 고가를 골라내는것인지 궁금합니다
언제나 감사합니다 예스스탁화이팅!!
2021-05-27
903
글번호 149366
답변완료
수식 작성 부탁드립니다.
안녕하세요.
아래의 수식이 이동평균선 골드때 매도, 데드때 매수 하는 역추세 수식인데
여기에다가 피라미딩 방식으로 추가했으면 합니다.
예를 들어 골드크로스 때 매도 들어갔는데 매도 들어간 시점 기준해서 +0.001pt 상승때마다
추가로 1계약씩 매도가 들어갔다가 청산은 다음 골드크로스 때 일괄청산 하는 방식입니다.
데드크로스 때는 매수 들어간 후 매수 들어간 시점 기준해서 -0.001pt 하락때마다
추가로 1계약씩 매수가 들어갔다가 청산은 다음 데드크로스 때 일괄청산 하는 방식입니다.
만약에 추가로 피라미딩이 안들어갔을 경우에는 골드 때 매도, 데드 때 매수가 계속 진행이
되고요.
수식 작성 좀 부탁드립니다.
매매종목 : 해외선물(AUD) 5분봉 기준 입니다.
===============================================
Input : shortPeriod(5), longPeriod(20);
value1 = ma(C, shortPeriod);
value2 = ma(C, longPeriod);
# 매도/매수청산
If CrossUP(value1, value2) Then
{
Sell();
}
# 매수/매도청산
If CrossDown(value1, value2) Then
{
Buy();
}
2021-05-27
944
글번호 149365