커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3666
글번호 230811
답변완료
문의드립니다
Input : Period1(5);
Var1 = ((H+L)/2)[1] - ((H+L)/2);
Var2 = (Upvol[1]) - (Upvol);
Var3 = WMA(Var1/Var2,Period1)*100;
Plot1(Var3[1]);
Var11 = ((H+L)/2)[1] - ((H+L)/2);
Var21 = (DownVol[1]) - (DownVol);
Var31 = WMA(Var11/Var21,Period1)*100;
Plot2(Var31[1]);
이렇게 수식을 만들어 보았습니다 그런데 같은 900틱챠트로 수직분할을하여 양쪽에서 보았는데 서로 다르게 나타납니다 왜그렇까요? 또 시간이지나서 다시 500틱챠트로 봤다가 다시 900틱챠트로보면 모양이 다르게 나타납니다
늘 같은 모양으로 나타나게 할수는 없을까요?
2020-08-25
911
글번호 141759
답변완료
수식변환 부탁드립니다.
안녕하세요. 하기 두개의 수식은 시그널메이커에서 작성한 것인데요, 예스트레이더로 변환 부탁드려요.
수식1)
Vars : Period1(14), Period2(179);
Vars : ST_Ma1(0), ST_Ma2(0);
ST_Ma1 = AvgFast((O+H+L+C)/4, Period1);
ST_Ma2 = AvgFast((O+H+L+C)/4, Period2);
// 일봉 기준 파란색
Vars : vShortP7(14), vLongP7(173), vSigP7(1);
Vars : vMACD7(0), vSignal7(0);
vMACD7 = MACD(C, vShortP7, vLongP7);
vSignal7 = XAverage(vMACD7, vSigP7);
param : BuyA_ShortLeng(15) // 단기 이동평균 기간
, BuyA_LongLeng(35) // 장기 이동평균 기간
;
var : BuyA_V1(0), BuyA_V2(0), BuyA_Result(FALSE);
BuyA_V1 = SMA(Volume, BuyA_ShortLeng);
BuyA_V2 = SMA(Volume, BuyA_LongLeng);
BuyA_Result = FALSE;
IF BuyA_V1 >= BuyA_V2 Then
BuyA_Result = TRUE;
param : vDn (92), vUp (700);
If BuyA_V1 > vDN And BuyA_V1 < vUp And vMACD7 < 0 And CrossDown(ST_Ma1, ST_Ma2) Then Sell("V매도");
/////////////////////////////////////////////////////////////////////////////
수식2)
Inputs : RangeLength(3), XAvgLength(49), BarstoEnter(17), Factor(13);
Vars : BuyEntry(0), BuySetup(False), BuyCounter(0), LongExitTarget(0);
Vars : SP00(0), AtrV(0);
SP00 = SignalPosition;
AtrV = ATR(30);
Condition1 = High == Highest(High, RangeLength);
Condition2 = Close > High[2];
Condition3 = ema(Close, XAvgLength) > ema(Close, XAvgLength)[1];
If SP00 <> 1 AND Condition1 AND Condition2 AND Condition3 Then
Begin
BuyEntry = MedianPrice[2];
BuyCounter = 0;
BuySetup = True;
LongExitTarget = High + Factor * (High - BuyEntry);
End;
If BuyCounter > BarstoEnter Then BuySetup = False
Else BuyCounter = BuyCounter + 1;
If SP00 = 1 Then
Begin
BuySetup = False;
ExitLong("",atlimit,LongExitTarget);
End;
If BuySetup Then Buy("B",atlimit,BuyEntry);
//# ATR Protective Stop
Inputs: ProtectiveATRs(3);
If SP00 <> 0 Then ExitLong("EL_Protective Stop", atstop, EntryPrice - (AtrV * ProtectiveATRs));
///////////////////////////////////////////////////////////////////////////////////
2020-08-25
975
글번호 141758
답변완료
수식 부탁드립니다.
거래는 분봉으로 합니다.
참조종목 data2와 data3에는 각각 다른 종목의 일봉을 엽니다.
전일까지의 두 참조종목의 종가상승률의 상관관계를 구해서, 당일 분봉 거래의 필터로 활용하고 싶습니다.
예를 들어, 전일까지 data2와 data3의 20봉 종가상승률의 상관관계를 구하는 수식을 알고 싶습니다.
2020-08-25
974
글번호 141757
답변완료
수식문의 드립니다(갭보정)
Inputs: FastLen(5), MedLen(20), SlowLen(60);
Variables: FastAvg(0), MedAvg(0), SlowAvg(0);
FastAvg = MA(Close, FastLen);
MedAvg = MA(Close, MedLen);
SlowAvg = MA(Close, SlowLen);
If (FastAvg[1] < MedAvg[1] OR MedAvg[1] < SlowAvg[1]) AND (FastAvg > MedAvg AND MedAvg > SlowAvg) Then
Buy ("MAC3_LE");
If (FastAvg[1] > MedAvg[1] OR MedAvg[1] > SlowAvg[1]) AND (FastAvg < MedAvg AND MedAvg < SlowAvg) Then
Sell ("MAC3_SE");
평범한 MA3 정배열 역배열 함수입니다
이식을 갭보정하고 싶습니다
참고로 3분봉에서 사용하려 합니다
추가로 Macd 베이스라인도 갭보정 부탁드립니다
2020-08-25
1119
글번호 141756
답변완료
부탁좀 드리겠습니다.
TRIXv = TRIX(period);
emav = ema(c,Period);
if crossup(TRIXv,0) Then
{
value1 = emav;
value3 = emav;
}
if CrossDown(TRIXv,0) Then
value2 = emav;
if value1 > 0 and emav > value1 Then
value1 = emav;
if value2 > 0 and emav < value2 Then
value2 = emav;
if value3 > 0 and emav < value3 Then
value3 = emav;
plot1(value1);
plot2(value2);
plot3(max(value1,emav));
plot4(max(value3,emav));
2) 변환부탁드립니다
highest(high,기간)
lowest(low,기간)
((highest(high,기간))+(lowest(low,기간)))/2
3)
highest(h,period)
HIL=valuewhen(1,(highest(h(1),period)<highest(h,period)),((highest(high,Period)+lowest(low,Period))/2));
highest(H, period)-(((highest(H, period)-HIL)/3)*1)
HIL=valuewhen(1,(highest(h(1),period)<highest(h,period)),((highest(high,Period)+lowest(low,Period))/2));
highest(H, period)-(((highest(H, period)-HIL)/4)*3)
HIL=valuewhen(1,(highest(h(1),period)<highest(h,period)),((highest(high,Period)+lowest(low,Period))/2));
highest(H, period)-(((highest(H, period)-HIL)/5)*3)
HIL=valuewhen(1,(highest(h(1),period)<highest(h,period)),((highest(high,Period)+lowest(low,Period))/2));
highest(H, period)-(((highest(H, period)-HIL)/6)*4)
period = 300
4)
수식1>
highest(h, period)
수식2>
A = (highest(h, period) + lowest(l, period))/2;
B = highest(h, period);
A + (B-A)*4/6
수식3>
A = (highest(h, period) + lowest(l, period))/2;
B = highest(h, period);
A + (B-A)*3/4
수식4>
A = (highest(h, period) + lowest(l, period))/3;
B = highest(h, period);
A + (B-A)*2/5
수식5>
(highest(h, period) + lowest(l, period))/4
period=2000
2020-08-25
1051
글번호 141755
답변완료
문의 드립니다.
수식 문의드립니다.
*최고가 대비 지정한 틱 수까지 하락(상승)할 때마다
해당 틱수 캔들에 수평선이 그어질 수 있도록 수식이 가능한지요.
가능하다면 부탁드립니다.
*캔들에 선이 그어지는 가격에 대한 수치는 외부변수로 조정 가능하게 부탁드립니다.
*예를 들어 크루드오일의 경우 최고점이 42.60이고 지정 틱수가 30틱이면
고점 대비 30틱 하락(상승)한 지점에 수평선이 그려지고
다시 30틱 하락할 때 캔들에 계속 수평선이 그려지게 부탁드립니다.
항상 감사드립니다.
2020-08-24
1081
글번호 141754
답변완료
buy 함수를 for 문과 함께 사용하는 방법이 있을까요?
Input : base_price(1000);
Arrays : b_price[4](0), b_qty[4](0);
Vars: cnt(1);
For cnt = 1 to 3
{
b_price[cnt] = base_price * (1 - cnt * 0.02); //가격 배열 만들기
b_qty[cnt] = cnt; //수량 배열 만들기
}
If sdate == 20200824 && sTime == 100000 Then //한줄씩 buy 사용
/* {
MessageLog("Price:%.0f, Qty:%.0f, Close:%.0f", b_price[1], b_qty[1], Close);
Buy("Buy1", AtLimit, b_price[1], b_qty[1]);
MessageLog("Price:%.0f, Qty:%.0f, Close:%.0f", b_price[2], b_qty[2], Close);
Buy("Buy2", AtLimit, b_price[2], b_qty[2]);
MessageLog("Price:%.0f, Qty:%.0f, Close:%.0f", b_price[3], b_qty[3], Close);
Buy("Buy3", AtLimit, b_price[3], b_qty[3]);
}
*/
{ //For문 사용
For cnt = 1 to 3
{
MessageLog("Price:%.0f, Qty:%.0f, Close:%.0f", b_price[cnt], b_qty[cnt], Close);
Buy("Buy", AtLimit, b_price[cnt], b_qty[cnt]);
}
}
For 문 없이 사용하면 작동하는데
For 문을 쓰면 매수 이름이 같아져 작동이 안되는듯 합니다.
For 문을 사용해서 buy 함수를 쓰는 방법이 있을까요?
항상 감사합니다. ^^!
2020-08-24
1035
글번호 141753
답변완료
부탁 드립니다.
도움에 깊이 감사 드립니다.
ADX지표에 사용되는 DIPLUS함수의
타주기 즉
1)분봉 차트에서 예를 들어 10분봉에서 60분봉지표
2)60분봉 차트에서 일봉 지표
장시간 번거로우시겠지만 부탁드리오며
미리 경배로 깊이 감사 드립니다.
Inputs: Length(NumericSimple) ;
Variables: Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0);
If CurrentBar == 1 Then Begin
MyRange = Length;
DIPlus = 0;
PlusDM14 = 0;
TRange = 0;
For Counter = 0 To MyRange - 1 Begin
If High[Counter] - High[Counter+1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[Counter] - High[Counter+1];
If Low[Counter+1] - Low[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[Counter+1] - Low[Counter];
If MinusDM >= PlusDM Then
PlusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
End;
If TRange <> 0 Then
DIPlus = 100 * PlusDM14 / TRange;
Else
DIPlus = 0 ;
End
Else
If CurrentBar > 1 Then Begin
If High[0] - High[1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[0] - High[1];
If Low [1] - Low [0] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[1] - Low[0];
If MinusDM >= PlusDM Then
PlusDM = 0;
If MyRange > 0 Then Begin
TRange = TRange[1] - (TRange[1] / MyRange) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) + PlusDM;
End;
If TRange <> 0 Then
DIPlus = 100 * PlusDM14 / TRange;
Else
DIPlus = 0 ;
End ;
참조1)
TrueRange = TrueHigh - TrueLow;
참조2)
If C[1] > H then
TrueHigh = C[1];
else
TrueHigh = H;
참조3)
If C[1] < L then
TrueLow = C[1];
else
TrueLow = L;
2020-08-24
921
글번호 141751
답변완료
외인 누적 선물평균가를 표시
90틱 챠트에 외국인 선물 누적 평균가를 수평선으로 표시하고 싶습니다.
2020-08-24
849
글번호 141748