커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5310
글번호 230811
답변완료
수식
1.
D-1 캔들이 20 캔들 신고가 달성한 양봉이고 현재 캔들 저가가 D-1 캔들 저가 붕괴한 음봉일때
D-1 캔들 고가와 현재 캔들 고가 가운데 가장 높은 가격 위에 고가 가격을 표시하고 그 고가 위에 (고가-당일 바닥) 변동폭을 표시한다
2.
D-2 캔들이 20 캔들 신고가 달성한 양봉이고 현재 캔들 저가가 D-2 캔들 저가 붕괴한 음봉일때
D-2 캔들 고가와 D-1 캔들 고가 그리고 현재 캔들 고가 가운데 가장 높은 가격 위에 고가 가격을 표시하고 그 고가 위에 (고가-당일 바닥) 변동폭을 표시한다
3.
D-3 캔들이 20 캔들 신고가 달성한 양봉이고 현재 캔들 저가가 D-3 캔들 저가 붕괴한 음봉일때
D-3 캔들 고가와 D-2 캔들 고가, D-1 캔들 고가 그리고 현재 캔들 고가 가운데 가장 높은 가격 위에 고가 가격을 표시하고 그 고가 위에 (고가-당일 바닥) 변동폭을 표시한다
****************************************************************************************
1.
D-1 캔들이 20 캔들 신저가 달성한 음봉이고 현재 캔들 고가가 D-1 캔들 고가 돌파한 양봉일때
D-1 캔들 저가와 현재 캔들 저가 가운데 가장 낮은 가격 아래에 저가 가격을 표시하고 그 저가 아래에 (당일 천정-저가) 변동폭을 표시한다
2.
D-2 캔들이 20 캔들 신저가 달성한 음봉이고 현재 캔들 고가가 D-2 캔들 고가 돌파한 양봉일때
D-2 캔들 저가, D-1 캔들 저가와 현재 캔들 저가 가운데 가장 낮은 가격 아래에 저가 가격을 표시하고 그 저가 아래에 (당일 천정-저가) 변동폭을 표시한다
3.
D-3 캔들이 20 캔들 신저가 달성한 음봉이고 현재 캔들 고가가 D-3 캔들 고가 돌파한 양봉일때
D-3 캔들 저가,D-2 캔들 저가, D-1 캔들 저가와 현재 캔들 저가 가운데 가장 낮은 가격 아래에 저가 가격을 표시하고 그 저가 아래에 (당일 천정-저가) 변동폭을 표시한다
********************************************************************************************************************************************************************************
1.
D-1 캔들이 당일 신고가 달성한 양봉이고 현재 캔들 저가가 D-1 캔들 저가 붕괴한 음봉일때
D-1 캔들 고가와 현재 캔들 고가 가운데 가장 높은 가격 위에 고가 가격을 표시하고 그 고가 위에 (당일 천정-당일 바닥) 변동폭을 표시하며 그 위에 상방 대칭 가격을 표시한다
2.
D-2 캔들이 당일 신고가 달성한 양봉이고 현재 캔들 저가가 D-2 캔들 저가 붕괴한 음봉일때
D-2 캔들 고가와 D-1 캔들 고가 그리고 현재 캔들 고가 가운데 가장 높은 가격 위에 고가 가격을 표시하고 그 고가 위에 (고가-당일 바닥) 변동폭을 표시하며 그 위에 상방 대칭 가격을 표시한다
3.
D-3 캔들이 당일 신고가 달성한 양봉이고 현재 캔들 저가가 D-3 캔들 저가 붕괴한 음봉일때
D-3 캔들 고가와 D-2 캔들 고가, D-1 캔들 고가 그리고 현재 캔들 고가 가운데 가장 높은 가격 위에 고가 가격을 표시하고 그 고가 위에 (고가-당일 바닥) 변동폭을 표시하며 그 위에 상방 대칭 가격을 표시한다
****************************************************************************************
1.
D-1 캔들이 당일 신저가 달성한 음봉이고 현재 캔들 고가가 D-1 캔들 고가 돌파한 양봉일때
D-1 캔들 저가와 현재 캔들 저가 가운데 가장 낮은 가격 아래에 저가 가격을 표시하고 그 저가 아래에 (당일 천정-저가) 변동폭을 표시하며 그 아래에 하방 대칭 가격을 표시한다
2.
D-2 캔들이 당일 신저가 달성한 음봉이고 현재 캔들 고가가 D-2 캔들 고가 돌파한 양봉일때
D-2 캔들 저가, D-1 캔들 저가와 현재 캔들 저가 가운데 가장 낮은 가격 아래에 저가 가격을 표시하고 그 저가 아래에 (당일 천정-저가) 변동폭을 표시하며 그 아래에 하방 대칭 가격을 표시한다
3.
D-3 캔들이 당일 신저가 달성한 음봉이고 현재 캔들 고가가 D-3 캔들 고가 돌파한 양봉일때
D-3 캔들 저가,D-2 캔들 저가, D-1 캔들 저가와 현재 캔들 저가 가운데 가장 낮은 가격 아래에 저가 가격을 표시하고 그 저가 아래에 (당일 천정-저가) 변동폭을 표시하며 그 아래에 하방 대칭 가격을 표시한다
2019-06-26
320
글번호 129753
답변완료
부탁드립니다.
-가격이 특정변수(예: var1)에 닿으면 알람이 울리는 수식 부탁드립니다.
2019-06-25
307
글번호 129752
답변완료
문의드립니다
안녕하세요
1분봉에서 1개 캔들이 10틱이상일 경우에 알람이 울리는 수식을 부탁드립니다.
2019-06-25
283
글번호 129751
답변완료
예스트레이더 수식 문의드립니다.
안녕하세요?
1) 다음 수식은 제가 '키움증권' 영웅문4에서 사용하고 있는 '지표 수식'입니다.
M = BBandsUP(20,2); --> 볼린저밴드 상한선
LL = Lowest(M, 10); --> 10일 중 최저값
NL = Valuewhen(1, M < LL(1),M); --> LL(1) : LL의 1봉전의 값
AA = Valuewhen(1,BarsSince(M < LL(1))==(10-5),NL); --> M < LL(1)를 만족한 이후의 봉의 갯수가 5개이면 NL
==> 볼린저밴드 상한선이 '아래로 볼록한 변곡점'이 될 때마다 그 최저 변곡점을 각각 수평선으로 그려주는 수식입니다.
위의 수식을 예스트레이더에서 사용할 '예스랭귀지'로 바꾸어 주실 수 있을까요? ^^
2) 또한, '최근 결산기의 이자보상배율이 1.5이상인 종목'을 검색할 수 있는 종목검색식이 있나요?
2019-06-25
400
글번호 129750
답변완료
안녕하세요
안녕하세요.
수고 많으십니다.
아래 수식은 지표식입니다.
아래 수식을 시스템식으로 부탁드립니다.
1).
1의 종가가 중심선 위로 갈때 매수
1의 종가가 중신선 아래로 갈때 매도
2).
아래 수식에서 매수신호 후 위로 10틱씩 진행시 틱수(10틱).    
매도신호 후 아래로 진행시 틱수(10)틱씩 구현하고 싶습니다
input : N(10),Per1(23.6),Per2(38.2),Per3(50.0),Per4(61.8),Per5(76.4);
var : cnt(0),HH(0),LL(0);
if DayOfWeek(bdate) < DayOfWeek(bdate[1]) Then{
Condition1 = true;
HH = H;
LL = L;
}
var1 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per1/100));
var2 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per2/100));
var3 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per3/100));
var4 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per4/100));
var5 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per5/100));
plot1(HH,"H");
plot2(var1,"23.6");
plot3(var2,"38.2");
plot4(var3,"50.0");
plot5(var4,"61.8");
plot6(var5,"76.4");
plot7(LL,"L");
}
감사합니다.
수고 하세요.
2019-06-26
313
글번호 129749
답변완료
캔들 20일선 상향돌파
캔들이 20일선 상향돌파하면 바로 시장가로 1계약만 매수되게 하는 수익은 어떻게 되나요.
알려주시면 감사하겠습니다.
2019-06-25
315
글번호 129748
답변완료
문의드립니다
스토캐스틱 (10,6,6) 기준으로 만드려고합니다
1. 15분봉, 5분봉 에서 둘 다 sto가 과매수 >= 80 이상이고 and
1분봉에서 sto[1] = 0 AND sto >= 5 이상이 되면 buy
손절, 청산은 1분봉 sto[1] - sto >= 10 차이 날 때
2. 1번과 반대조건 (과매도 <=20) 에 진입했을때 sell
서로 다른 시간 봉이라 잘 모르겠네요 ㅎㅎ
날도 더운데 건강조심하시구요 ^^ 항상 감사드립니다 :)
2019-06-25
309
글번호 129746
답변완료
문의드립니다.
안녕하세요
항상 많은 도움에 감사드립니다.
국내선물은 하이투자증권을, 해외선물은 유진투자선물을 이용하여 예스트레이더 전략에 대하여 모투를 진행중입니다.
그동한 해외선물만 하다가, 오늘 국내선물을 예스트레이더로 처음 시작했는데요,
청산 매매시 "접수오류( 주문가격이 하한가 미만입니다. 0)" 이렇게 오류가 발생합니다.
아마도 국선 시장가 청산 때문에 오류가 나는것 같습니다.
그게 맞는지 하는 질문 하나 이구요,
또하나는 모투 말고 실투에서도 국선에서 예스트레이더로 매매시에 시장가 매매는 안되는 것인지요?
(예스랭귀지와 예스스팟을 이용하여 전략 구동중입니다.)
감사합니다.
2019-06-25
355
글번호 129745
답변완료
재문의
청산한후 추세를 따라하지 못해서
익절이던 손절이던 청산 값보다 10틱이상 크면 아직도 오실레이터 값이 만족한다면
재진입 하는 식을 추가 부탁 합니다
그리고 0 교차 보다 시그널 교차로 만들려면
If CrossUp(ZzOsc,0) Then Buy("B",AtMarket);
If CrossDown(ZzOsc,0) Then sell("S",AtMarket);
value1 = ma( C, Zzosc( ));
???? 어떻게 만드나요
Input:ChgRate(3);
Var:Row(0),Col(0),hiBar(0),loBar(0),HiCond(False),LoCond(False),
LastStat(0),WorkBit(0);
Var:HA_C(0),HA_O(0),HA_H(0),HA_L(0);
Var:ZzOsc(0);
Array : HiZZ[10,4](0), // 열번호 1:가격,2:Index,3:sDate,4:sTime
LoZZ[10,4](0);
#==========================================#
HA_C = (O+H+L+C)/4;
If IsNaN(HA_O[1]) Then
HA_O = O;
Else
HA_O = (HA_O[1]+HA_C[1])/2;
HA_H = max(H,HA_O,HA_C);
HA_L = min(L,HA_O,HA_C);
If Index == 1 Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = 0;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
LoZZ[1,1] = HA_L;
LoZZ[1,2] = 0;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
}
If Index > 0 Then {
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HA_H[hiBar] < HA_H Then hiBar = 0;
If HA_L[loBar] > HA_L Then loBar = 0;
HiCond = LoZZ[1,1] * (1 + (ChgRate/100)) < HA_H and hiBar == 0;
LoCond = HiZZ[1,1] * (1 - (ChgRate/100)) > HA_L and loBar == 0;
WorkBit = 0;
If HiCond and LoCond Then {
If HiZZ[1,1] < HA_H and LoZZ[1,1] > HA_L Then {
If HA_H - HiZZ[1,1] > LoZZ[1,1] - HA_L Then
WorkBit = 1;
Else If HA_H - HiZZ[1,1] < LoZZ[1,1] - HA_L Then
WorkBit = -1;
Else If LastStat == -1 Then
WorkBit = 1;
Else
WorkBit = -1;
} Else If LoZZ[1,1] > HA_L Then WorkBit = -1;
Else If HiZZ[1,1] < HA_H Then WorkBit = 1;
Else If LastStat == -1 Then WorkBit = 1;
Else WorkBit = -1;
} Else If HiCond Then WorkBit = 1;
Else If LoCond Then WorkBit = -1;
#==========================================#
If WorkBit == 1 Then {
If LastStat == -1 Then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
HiZZ[Row,Col] = HiZZ[Row-1,Col];
}
}
HiZZ[1,1] = HA_H;
HiZZ[1,2] = Index;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
} Else If HiZZ[1,1] < HA_H Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = Index;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
}
LastStat = 1;
}
#==========================================#
If WorkBit == -1 Then {
If LastStat == 1 then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
LoZZ[Row,Col] = LoZZ[Row-1,Col];
}
}
LoZZ[1,1] = HA_L;
LoZZ[1,2] = Index;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
} Else If LoZZ[1,1] > HA_L then {
LoZZ[1,1] = HA_L;
LoZZ[1,2] = Index;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
}
LastStat = -1;
}
ZzOsc = HA_C - IFF(LastStat == -1,HiZZ[1,1],LoZZ[1,1]);
If CrossUp(ZzOsc,0) Then Buy("B",AtMarket);
If CrossDown(ZzOsc,0) Then sell("S",AtMarket);
Input : BuyATRP(46),SellATRP(6),BuyATRS1(2.5),BuyATRS2(4.0),BuyATRS3(4.0),SellATRS1(3.5),SellATRS2(6.0),SellATRS3(6.0);
Input : BuyStoploss(12), SellStoploss(6), BuyTrailing(5), BuyFloor(20), SellTrailing(5),SellFloor(8.5);
Input:break(1.9),level(0.3),big(8),sbreak(1.9),slevel(0.3),sbig(8);
var:진입후최고가(0),진입후최저가(0);
If MarketPosition == 1 Then
{
진입후최고가 = Highest(H,BarsSinceEntry + 1);
ExitLong("매수추적",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS1);
ExitLong("매수변동성",AtStop,C - ATR(BuyATRP) * BuyATRS2);
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * break Then {
ExitLong("매수손익분기",AtStop,Entryprice + ATR(BuyATRP) * level);
ExitLong("매수추적1",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS3);
}
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * big Then
{
ExitLong("매수초과수익",AtStop,Lowest(L,3));
}
SetStopLoss(BuyStoploss, PointStop);
SetStopTrailing(BuyTrailing,BuyFloor,PointStop);
}
If MarketPosition == -1 Then {
진입후최저가 = Lowest(L,BarsSinceEntry + 1);
ExitShort("매도추적",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS1);
ExitShort("매도변동성",AtStop,C + ATR(SellATRP) * SellATRS2);
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbreak Then {
ExitShort("매도손익분기",AtStop,Entryprice - ATR(SellATRP) * slevel);
ExitShort("매도추적1",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS3);
}
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbig Then {
ExitShort("매도초과수익",AtStop,Highest(H,3));
}
SetStopLoss(SellStoploss, PointStop);
SetStopTrailing(SellTrailing,SellFloor,PointStop);
}
If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김
SetStopLoss(0, PointStop);
SetStopTrailing(0, 0, PointStop);
}
If MarketPosition == 1 Then
ExitLong("스파이크청산-1", AtLimit, C + ATR(20) * 7); // 상승돌파 시 매수청산
If MarketPosition == -1 Then
Exitshort("스파이크청산+1", AtLimit, C - ATR(20) * 7); // 상승돌파 시 매도청산
Var:SpikeHigh(0), spikelow(0);
If MarketPosition == 1 Then // 매수포지션일 때
{
if MarketPosition != MarketPosition[1] Then
{
SpikeHigh = 10; // 초기화
Condition1 = false;
}
If Condition1 == false and // 스파이크 미발생
H > C[1] + ATR(20) * 7 Then // 전봉 종가보다 7 * ATR 이상 상승
{
SpikeHigh = H; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then // 스파이크 발생 후
{
If SpikeHigh < H then
SpikeHigh = H; // 신규 고점 나오면 갱신
ExitLong("스파이크청산-2", AtStop, SpikeHigh - ATR(20) * 2);
//추적청산처럼 꼭지 찍고 내려올 때
}
}
If MarketPosition == -1 Then
{
if MarketPosition != MarketPosition[1] Then
{
Spikelow = 10; // 초기화
Condition2 = false;
}
If Condition2 == false and
L < C[1] - ATR(20) * 7 Then
{
Spikelow = H;
Condition2 = true;
}
If Condition2 Then
{
If Spikelow > L then
Spikelow = L; // 신규 고점 나오면 갱신
ExitShort("스파이크low청산-2", AtStop, Spikelow + ATR(20) * 2);
}
}
2019-06-25
328
글번호 129744