커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1359
글번호 230811
답변완료
수식요청
아래 수식의 변환을 요청드립니다.
===========================================================================
A=MA(C,5);
B=MA(C,20);
골든=Crossup(A,B);
최고=HighestSince(1,골든,H);
최고가=ValueWhen(1,최고==최고(1) && 최고>H,최고);
최저=if(B>L,1,0);
최저가=sum(최저);
결론=최저가-ValueWhen(1,골든,최저가(1));
조건=Crossup(C,최고가) && 결론>0;
카운트=CountSince(골든,조건)==1;
카운트&&!카운트(1)
이면서
0봉전 RSI(20)>60
1봉전 " <59.9
이 경우를 검색코자 합니다.
2024-11-20
679
글번호 185474
답변완료
1주에서
예스랭귀지는 실주문가격을 수식에서 지정할 수 없습니다.
시스템 트레이딩 설정창에 매매가격을 시장가로 지정하시면 됩니다.
1주 매매단위를 50만원으로 변경부탁드립니다
var : 가(0),나(0),다(0),라(0),마(0);
가=MA(C,5);
나=(highest(high,9)+lowest(low,9))/2;
다=(highest(high,6)+lowest(low,6))/2;
라=(highest(high,5)+lowest(low,5))/2;
마=MA(C,6);
if C>가&&
C>나&&
C>다&&
C>라 Then
Buy("b",onclose,def,1);
if C<나 or C<마 Then
ExitLong();
2024-11-20
616
글번호 185473
답변완료
문의드립니다.
data1과 data2를 사용중인데 사진1 2사이에는 빈 간격이 많고
data2는 간격이 촘촘합니다.
이 참조데이터를 이용해 조건 만족시 var1과 var2에 데이터를 저장하는데요.
참조데이터 var1의 수치는 1인데 갑자기 var2나 var3에 2나 3이 저장되는 경우가 발생합니다.
이런 경우 어떻게 작성해야 하나요?
예로
if data2(c) > data2(c) then
var1 = data2(c) - data2(c[1]);
if var4 == 0 then
var2 = var2 + var1;
if var4 == 1 then
var3 = var3 + var1;
2에서 var1은 5였는데 var2에 var2 + 10(알수없는수치)으로 저장되거나
2에서 var4 == 0 인데 var2와 var3에 같이 var1수치인 5가 아닌 알수없는 값이 저장되는 경우가 발생합니다.
var : var1(0,Data2),var2(0,Data2);
이렇게 해줘도 발생합니다.조건이 만족하지 않는데 값이 저장되고 다른값이 저장되요.
중복으로 var2와 var3에...plot1(var4);로 현재값을 확인해줘도 var4는 0에 var1은 5가 맞는데도 말이죠.사진에서 2번째라고 체크된 봉에서...
어떻게 해결해야 될까요?
답변부탁드립니다.
2024-11-21
719
글번호 185472
답변완료
참조종목의 정보
안녕하세요.
차트의 주종목의 정보에 대해서는 symbolcode() 등의 함수가 있어 해당 종목의 코드를 가져올수 있는데,
참조차트(data2,3,4 .....)의 정보(종목명, 종목코드 등)를 알 수 있는 함수는 없는 건가요?
2024-11-20
681
글번호 185471
답변완료
청산 관련 수식 요청드립니다.
안녕하세요, 수식 작성에 늘 도움주셔서 감사합니다.
진입과는 별개로 청산 관련된 수식만을 따로 작성 중인데, 수식 검토 및 2번 부분 수식을 요청드립니다.
청산 기준을 상황에 따라 다르게 적용되는 수식이 필요한데, 구현하고자 하는 내용은 다음과 같습니다.
1) 기본 청산 : ATR의 n배수 Trailing stop
2) 1개봉에서 내 포지션에 반대되는 과도하게 큰 움직임(ATR*2)이 나왔을 때, 청산
3) 일정 수익 이상 발생한 뒤에는, 청산 라인을 더 가깝게 변경한다. (ATR*k배수)
위 내용을 토대로 구현한 수식은 아래와 같습니다.
input : AtrP(20), AtrMult(3), BigProfit(100), BigAtrMult(1.6);
var : AtrV1(0), AtrV2(0), posHigh(0), posLow(0);
# 기본청산
AtrV1 = ATR(AtrP) * AtrMult;
If BarsSinceEntry() == 0 Then PosHigh = High;
If MarketPosition() == 1 Then {
If High > PosHigh Then PosHigh = High;
ExitLong("EL1", AtStop, PosHigh - AtrV1);
}
If BarsSinceEntry() == 0 Then PosLow = Low;
If MarketPosition() == -1 Then {
If Low < PosLow Then PosLow = Low;
ExitShort("ES1", AtStop, PosLow + AtrV1);
}
# 1개봉 사이 내 포지션과 움직임이 나왔을 때 청산
-> 이 부분을 수식으로 구현하기가 어렵게 느껴져서, 도움 부탁드립니다..!
# 수익이 커졌을 때 청산 라인 변경(ATR*1.6)
AtrV2 = ATR(AtrP) * BigAtrMult;
If BarsSinceEntry() == 0 Then PosHigh = High;
If Marketposition == 1 Then {
If High > PosHigh Then PosHigh = High;
if PosHigh > entryPrice(0)+bigProfit Then
exitlong("BigEL", atstop, PosHigh - AtrV2);
}
If BarsSinceEntry() == 0 Then PosLow = Low;
If MarketPosition() == -1 Then {
If Low < PosLow Then PosLow = Low;
if PosLow < entryPrice(0)-bigProfit Then
exitshort("BigES", atstop, PosLow + AtrV2);
}
----------------------------------------------------------
현재까지 작성 내용은 위와 같은데, 수식에 겹치는 군더더기 부분들도 있고,
청산조건 2번의 경우 Atstop 주문으로 코딩하려면 어떤식으로 작성이 가능한지 헷갈리는 상황입니다.
전체 내용이 반영된 다중청산 수식(여러 다른 진입전략에 붙여넣기 가능한)을 구현해주시면 정말 감사하겠습니다.
2024-11-20
909
글번호 185470
답변완료
수식 작성 도움 부탁드립니다
안녕하세요, 수식 작성에 늘 도움주셔서 감사합니다.
이동평균 크로스 전략에 직전거래손실 확인 필터(가상으로 진입, 청산)를 추가하고자 합니다.
기본 로직은 이평선 4개 (20, 60, 120, 200)을 활용해서
a) 120ma > 200ma 일 때, 20ma가 60ma를 상향돌파 시 매수 진입(청산은 20ma가 60ma 하향돌파)
b) 120ma < 200ma 일 때, 20ma가 60ma를 하향돌파 시 매도 진입(청산은 20ma가 60ma 하향돌파)
하는 간단한 로직입니다.
다만 여기서, 가상으로 진입 후 청산한 뒤, 직전 가상거래가 손실일 경우에만 진입하는 방식의 수식을 구현 부탁드리겠습니다.
(아래는 손실필터를 검색하던 중, 다른 전략에서 손실필터가 적용된 사례가 있어 첨부합니다. 해당 로직의 필터 방식을 위의 이평 전략에 적용만 부탁드리겠습니다.직접해보려했으나 아직 어려움이 많아 부득이하게 부탁드려봅니다...)
[ 필터 참고 수식 ]
Input: shortPeriod(20),exitperiod(10);
var : trade(true),mp(0),ep(0),xp(0);
Value1 = Highest(high, shortPeriod);
Value2 = Lowest(Low, shortPeriod);
Value3 = Lowest(Low, exitperiod);
Value4 = Highest(High, exitperiod);
if TotalTrades > TotalTrades[1] Then
{
if PositionProfit(1) < 0 Then
trade = true;
Else
{
trade = False;
mp = 0;
}
}
if MarketPosition == 0 and trade == False Then
{
If mp == 0 and CrossUP(Close, Value1[1]) Then
{
ep = c;
mp = 1;
}
If mp == 0 and CrossDown(Close, Value2[1]) Then
{
ep = c;
mp = -1;
}
If mp == 1 and CrossDown(Close, Value3[1]) Then
{
mp = 0;
xp = c;
if xp < ep Then
trade = true;
}
If mp == -1 and CrossUp(Close, Value4[1]) Then
{
mp = 0;
xp = c;
if xp > ep Then
trade = true;
}
}
if trade == true Then
{
If MarketPosition == 0 and CrossUP(Close, Value1[1]) Then
Buy("LE1");
If MarketPosition ==0 and CrossDown(Close, Value2[1]) Then
Sell("SE1");
}
If entryname=="LE1" and CrossDown(Close, Value3[1]) Then
Exitlong("Lx");
If entryname == "SE1" and CrossUp(Close, Value4[1]) Then
ExitShort("Sx");
감사합니다.
2024-11-20
720
글번호 185469
답변완료
해외 선물 등락율 계산이 다르게 나옵니다.
당일 등락율을 계산하는데 예스 트레이더의 나오는 등락율 변동폭과 등락율 비율이 다릅니다.
var : 당일등락율(0), 전일등락율(0), 등락값(0), 시초가(0) ;
시초가 = DayOpen();
등락값 = (c-DayOpen()); // 이유는 모름 5.5차이
당일등락율 = (등락값)*100/시초가;
당일등락율 = Floor(당일등락율*100)/100; // 소숫점 2자리 버리기
이렇게 하는 경우 들락폭이 5.5 정도 차이가 생깁니다. 11/20일 기준 나스닥
해외 선물의 경우 시초가를 다르게 적용해야 하는지요 ?
값을 찍어서 디버깅 해봐도 예스트레이더에서 나오는 등락폭과 시초가 기준 현재가의
등락폭의 값이 다릅니다.
<첨부 사진 설명>
- 시초가가 20762.25 이므로 현재가 20803 이므로 변동폭은 40.75 인데
트레이더에서는 35.25 ( 5.5의 차이가 발생 ??? )
답변 부탁 드립니다.
2024-11-20
718
글번호 185468
답변완료
표준편차 사용예시 부탁드립니다.
안녕하세요 매번 질문에 친절한 답변 정말 감사드립니다.
1. 오늘은 제목처럼, 표준편차 사용예시 코드를 부탁드리고자 합니다.
일반적인 표준편차 산출 식이 있음에도 불구하고, 가중 이동평균의 표준편차를 구하려고 합니다.
현재 시점에서, 각 시점의 편차(시점별 값 - 평균값)를 구하는 과정이 어려워 질문드립니다.
각 시점의 편차를 구하려고 할 때, '고정된 평균'값을 어떻게 산출해야 하는지 모르겠습니다.
가령, 종가 데이터의 편차의 제곱의 합을 먼저 구한다고 한다면,
var1 = accumN(c,20)/20;
var2 = accumN(Square(c - var1),20)/20;
.
.
(이하생략)
으로 풀어나가려고 했으나 곰곰이 생각해보면 va1인 평균값은 var2에서 계산될 때 [0],[1],[2]..
순으로 이전 시점의 평균값을 뱉어내니 현재 시점의 평균과 다르게 됩니다. 이 부분을 어떻게
해결할지 모르겠습니다..
2. 곁다리로, 함수 중 하나를 여쭤보고자 합니다.
메뉴얼에 있는함수중에, AvgDeviation(Price,Length) 라는 편차평균을 구하는 놈이 있는데, 얘는
용도가 뭔가요? 편차의 합은 항상 0이라서, 평균이 0일텐데 정확한 용도가 궁금합니다..
항상 갑갑한 질문 죄송합니다....
2024-11-20
722
글번호 185467
답변완료
추가질문 드립니다.
앞질문(90070)에 대한 추가질문
첨부 파일에 보듯이 1>화살표가 너무커서..크기 조절하는 방법좀 가르쳐주세.
2>새로생긴 보조지표 어떠게 보는 건가요?
2024-11-20
639
글번호 185466