커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1595
글번호 230811
답변완료
문의 드립니다.
조건검색식을 만들때 분봉에서 지정한 봉에 대한 검색식이 가능한지요?
예을 들어 특정거래량이 발생한 분봉을 기준으로 호가가 하락을 했을때 첫번째 음봉종가 돌파 또는 저점기준으로이전 첫번째 양봉종가돌파 검색식을 만들고저 합니다.
확인되시면 회신 부탁드립니다.
수고하세요.
2022-12-27
1594
글번호 164898
답변완료
수식요청드려요
Input:Period(20);
var1 = ema(C,period);
if var1 < var1[1] Then
value1 = var1;
if var1 > var1[1] Then
value2 = var1;
if value1 > 0 Then
Plot1(value1);
if value2 > 0 Then
plot2(Value2);
하단 라인 전봉이 현재봉보다 클때 검색
2022-12-27
1415
글번호 164891
답변완료
수식문의
안녕하십니까 ?
키움 영웅문에서 사용하던 그래프를 구현하고자 하는데 잘 되지 않아 부탁 드립니다. 아래 수식 코딩 부탁 드립니다.
1. M<LL(1)의 조건을 만족하는 첫 번째 M의 값을 NL
키움 영웅문 수식관리자 식 --> NL=Valuewhen(1, M<LL(1), M);
2. M<LL(1) 조건을 만족하는 봉의 개수가 (기간-K)인 것을 첫 번째 만족할 때 NL
키움 영웅문 수식관리자 식 --> Valuewhen(1, BarsSince(M<LL(1))==(기간-K), NL)
2022-12-27
1830
글번호 164890
답변완료
문의드립니다
안녕하세요?
첨부사진처럼
가장최근 신호발생봉의 고가와 저가의 가격을 각각 빨강색과 파랑색으로
표시하고싶습니다
Input : af(0.02), maxAF(0.2) ;
Var : value(0);
value = csar(af,maxAF);
# 매수/매도청산
If C > value Then
{
Buy();
}
# 매도/매수청산
If C < value Then
{
Sell();
}
감사드립니다
2022-12-27
1794
글번호 164884
답변완료
단계별 시스템 거래를 위한 임의 변수 설정
다음의 시스템거래를 설정하려고 합니다.
1) COND1 신호 발생시 매수/매도 (B1/S1)
2) B1/S1 + 3%이익 + COND2 신호 발생시 익절 (EL/SL)
3) 익절후 COND2 신호 발생시 매수/매도 (B2/S2)
4) B2/S2에서 COND1 신호 발생시 매수/매도 (B3/S3) (1과 동일)
5) 2~4 반복
이걸 구현하기 어려워서 'Level'이라는 임의적인 변수를 만들었습니다.
각 단계별로 Level 1~3로 올라가다가
전 과정이 반복되는 4단계에서 Level1으로 다시 낮추는 수식을 작성했습니다.
For Level = 0 To Level = 1
Begin
If COND1 == 1 Then Level = Level + 1;
If COND1 == -1 Then Level = Level + 1;
If COND1 == 1 Then Buy("B1");
If COND1 == -1 Then Sell("S1");
End
For Level = 1 To Level = 2
Begin
If C > EntryPrice * 1.03 AND COND2 == -1 Then Level = Level + 1;
If C < EntryPrice * 0.97 AND COND2 == 1 Then Level = Level + 1;
If C > EntryPrice * 1.03 AND COND2 == -1 Then ExitLong("EL");
If C < EntryPrice * 0.97 AND COND2 == 1 Then ExitShort("ES");
End
For Level = 2 To Level = 3
Begin
If COND2 == 1 Then Level = Level + 1;
If COND2 == -1 Then Level = Level + 1;
If COND2 == 1 Then Buy("B2");
If COND2 == -1 Then Sell("S2");
End
For Level = 3 To Level = 1
Begin
If COND1 == 1 Then Buy("B3");
If COND1 == -1 Then Sell("S3");
If COND1 == 1 Then Level = Level - 2;
If COND1 == -1 Then Level = Level - 2;
End
일단 지표로 Level을 확인해보니 1에서 바뀌지 않는 것으로 나옵니다.
각 단계별로 Level이 변하게 할 수 있을까요?
2022-12-27
1477
글번호 164883
푸른 님에 의해서 삭제되었습니다.
2022-12-27
2
글번호 164882
답변완료
수식 문의
항상 친절한 답변에 감사드립니다.
아래의 수식에 조건을 추가하고 싶은데요,
조건 1 :
매수 신호가 나온 캔들을 기준으로
직전 n개봉 중 최저가를 찾고,
그 최저가에서 -n1틱이 빠지면 손절합니다.
조건 2 :
연속된 추가 매수 신호가 발생시,
(직전 손절한 신호도 포함) 그 값이
직전 매수신호가 나온 캔들을 기준으로
(직전 n개봉 중 최저가 - n1틱) 보다 높거나
(직전 n개봉 중 최고가 + n1틱) 보다 낮으면,
그 신호는 무시 합니다.
매도 신호는 그 반대로,
조건 1 :
매도 신호가 나온 캔들을 기준으로
직전 n개봉 중 최고가를 찾고,
그 최고가에서 -n1틱이 빠지면 손절합니다.
조건 2 :
연속된 추가 매도 신호가 발생시,
(직전 손절한 신호도 포함) 그 값이
직전 매도신호가 나온 캔들을 기준으로
(직전 n개봉 중 최저가 - n1틱) 보다 높거나
(직전 n개봉 중 최고가 + n1틱) 보다 낮으면,
그 신호는 무시 합니다.
Input : Vector(14), Period(9), 매수선(50), 매도선(50);
Var : rsi_(0), rsi_signal(0) ;
rsi_ = RSI(Period);
rsi_signal = MA(RSI(Period), Vector);
if rsi_signal < 매수선 && rsi_ > rsi_signal && rsi_[1] < rsi_signal[1] Then
{
Buy();
}
else if rsi_signal > 매도선 && rsi_ < rsi_signal && rsi_[1] > rsi_signal[1] Then
{
Sell();
}
2022-12-27
1483
글번호 164881
답변완료
추세선 폭
input : Period(120),선두께(0.05),N(30);
Var:상승색(Magenta), 하락색(Cyan);
Var:j(0),T(0),txx(0),txxx(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),tl9(0);
Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0);
Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0),TX2[7](0),TX3[7](0);
Plot1(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];
}
LoVal[0] = L;
LoBar[0] = 0;
date11 = date[HiBar[0]+N];
time11 = stime[HiBar[0]+N];
Value11 = HiVal[0];
date12 = date[LoBar[0]+N];
time12 = stime[LoBar[0]+N];
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,하락색);
date21 = date[HiBar[0]+N];
time21 = stime[HiBar[0]+N];
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]);
}
Text_SetSize(tx,25);
Text_SetColor(Tx,Red);
Text_SetStyle(tx,1,1);
Text_SetBold(tx,1);
if abs(value12[1]-value11[1]) < 0.65 Then
Text_Delete(tx);
tx = text_new(sDate,stime,value12,NumToStr(value12-value11,2));
Text_SetColor(Tx,Blue);
Text_SetStyle(tx,1,1);
Text_SetSize(tx,35);
Text_SetBold(tx,1);
}
If LoVal[0] > L Then
{
LoVal[0] = L;
LoBar[0] = 0;
date12 = date[LoBar[0]+N];
time12 = stime[LoBar[0]+N];
Value12 = LoVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date22 = date[0];
time22 = stime[0];
Text_SetString(tx,NumToStr(value12-value11,2));
Text_SetLocation(tx,sDate,sTime,value12);
}
}
If T == 1 Then
{
If T[1] != 1 Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
}
HiVal[0] = H;
HiBar[0] = 0;
date11 = date[LoBar[0]+N];
time11 = stime[LoBar[0]+N];
Value11 = LoVal[0];
date12 = date[HiBar[0]+N];
time12 = stime[HiBar[0]+N];
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,상승색);
date31 = date[LoBar[0]+N];
time31 = stime[LoBar[0]+N];
date32 = date[0];
time32 = stime[0];
for j = 0 to 5
{
fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]);
}
Text_SetSize(tx,25);
Text_SetColor(Tx,Blue);
Text_SetStyle(tx,1,0);
Text_SetBold(tx,1);
if abs(value12[1]-value11[1]) < 0.65 Then
Text_Delete(tx);
tx = text_new(sDate,stime,value12,NumToStr(value12-value11,2));
Text_SetColor(Tx,Red);
Text_SetStyle(tx,1,1);
Text_SetSize(tx,35);
Text_SetBold(tx,1);
}
If HiVal[0] < H Then
{
HiVal[0] = H;
HiBar[0] = 0;
date12 = date[HiBar[0]+N];
time12 = stime[HiBar[0]+N];
Value12 = HiVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date32 = date[0];
time32 = stime[0];
Text_SetString(tx,NumToStr(value12-value11,2));
Text_SetLocation(tx,sDate,sTime,value12);
}
}
TL_SetSize(TL1,선두께);
추세선이 양전환되면 추세선 하단에서 위로 1p 와 1.5p 두 지점에 일자그래프 표시.
음으로 바뀌면 기존 일자그래프 모두 삭제하고,상단에서 아래로 1p 와 1.5p 두 지점에 일자그래프 표시. 일자그래프는 생성과 삭제 반복.
의문:r[0]부터 r[6]까지는 없애도 되는 수식인가요? 감사합니다.
2022-12-27
1124
글번호 164880
답변완료
타분봉 VPCI
감사합니다.
아래 VPCI 지표를 타분봉 VPCI지표로 사용하고 싶습니다. (예, 10분봉 VPCI지표를 1분봉에서 사용하고 싶습니다)
inputs : P1(5), P2(20), Signal(20);
var : Sum1(0), Sum2(0), VWMA1(0), VWMA2(0), VP(0), VPR(0), VM(0), VPCI(0), AvgVPCI(0) ;
Sum1 = AccumN(v,P1);
if Sum1 > 0 then VWMA1 = AccumN(C*v,P1)/Sum1 ;
Sum2 = AccumN(v,P2);
if Sum2 > 0 then VWMA2 = AccumN(C*v,P2)/Sum2;
VP = VWMA2 - Ma(C,P2) ;
VPR = VWMA1 / Ma(Low, P1) ;
VM = Ma(v, P1) / ma(v, P2) ;
VPCI = VP * VPR * VM ; AvgVPCI = Ma( VPCI, Signal ) ;
Plot1(VPCI, "VPCI" ) ;
Plot2(AvgVPCI, "VPCIsig" ) ;
Plot3( 0, "Zero" ) ;
2022-12-26
1149
글번호 164879