커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1693
글번호 230811
답변완료
시스템
안녕하세요
5분봉 싯가가 볼링저밴드 상단선을 돌파하면 매수
5분봉 싯가가 볼린저밴드 하단선을 돌파하면 매도
5분봉 종가가 볼린저밴드 중간선을 돌파하면 청산
수고하세요 감사합니다
2022-06-29
1747
글번호 160268
답변완료
수식 변환 문의드립니다
트레이딩뷰 전략을 예스트레이더로 전환하여 이베스트에서 시스템트레이딩을 하려구요
trailPoints = input.int(50, "Trail Points (in ticks)")
trailOffset = input.int(10, "Trail Offset (in ticks)")
stopSize = input.int(100, "Stop Offset (in ticks)")
longCondition = bar_index % 25 == 0 and not (strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index)
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Exit", loss = stopSize, trail_points = trailPoints, trail_offset = trailOffset )
2022-06-29
1805
글번호 160267
답변완료
문의
타플렛폼 수식인데요 예스차트로 변환부탁드립니다.
(dayhigh()+daylow())/1.74
2022-06-29
1254
글번호 160266
답변완료
수식어 부탁드립니다
var : entry(0);
if bdate != bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if MarketPosition <= 0 and entry < 1 Then
buy("b",atlimit,dayhigh-PriceScale*12000);
if MarketPosition == 1 Then
exitlong("bx",atlimit,lowest(L,BarsSinceEntry)+PriceScale*120);
if MarketPosition >= 0 and entry < 1 Then
sell("s",atlimit,daylow+PriceScale*70);
if MarketPosition == -1 Then
ExitShort("sx",atlimit,Highest(H,BarsSinceEntry)-PriceScale*185);
if sdate != sdate[1] Then
SetStopEndofday(60000);
if bdate != bdate[1] Then
SetStopEndofday(0);
----------------------
진입신호이후 상하 변동폭에 익절이 정해지는 식이여서 원하는 익절이 불가합니다.
진입신호에서 익절로 청산되는 식으로 변경을 부탁드리고 손절은 20틱입니다.
----------------------------
위 수식어에서 청산을 틱이 아닌 특정시간으로 설정할 수있는지요.
청산이 아침 05시30분이 가능하다면 그런 청산의 수식어를 추가로 부탁드립니다.
2022-06-29
1472
글번호 160265
답변완료
매수 주문에 관한 질문
안녕하세요~
제가 매수 A라는 시스템 로직을 짰는데요 이게 처음 신호가 나왔을때 1계약 매수하고, 청산할때까지 추가 매수는 없었으면 좋겠는데 계속 추가 주문이 들어가는데 어떻게 해야할까요?
피라미딩 체크도 허용안함입니다.
예를들어 MACD가 우상향할때 매수해서 우하향할때 매도해라 라는 수식을 쓰면
IF
A=MACD(12,26,9)
A>A[1] THEN
Buy(s);
if MarketPosition == 1 Then
{
if A<A[1] Then
ExitLong();
}
이런 식으로 되어 있는데 현재 MACD가 우사향하고 다음봉도 우상향 3번째 봉도 우상향하면
2번째, 3번째 봉에서 계속 매수 신호가 나가나요?
#질문1.
그렇다면 최초 신호에 진입하고 매도할때까지 매수를 안하려면 어떻게 설정해야하나요?
#질문2.
현재 모의투자 계좌를 쓰고 있는데, A라는 매수요건에 해당해서 1계약이 체결 이후 매도 신호가 안나오는데 B라는 다른 차트에서 매수요건에 해당하여 1계약 추가 체결 이렇게 되면 제 계좌안에 2개의 매수 계약이 있는 상태라 평단가가 달라 지는데, 이게 싫다면 계좌를 여러개 개설해서 1계자당 1개의 시스템 매매만 돌리는 수밖에 없나요?
또한 이럴 경우 A의 청산로직이 발생하거나 B의 청산 로직이 A보다 먼저 발생할 경우 2계약 모두 매도가 나가게 하려면 어떤 수식을 사용해야 하나요? 그대로 두면 A의 청산 로직이 발생하면 1계약 매도 나가고, B가 발생하면 또 1계약 매도청산이 자동으로 되는게 맞죠~?
#질문3.
Buy(s); 와 Buy();의 차이가 무엇인가요?
var : d7mav(0,Data7) 여기서 선언할때 괄호안의 0은 왜 넣어주는 건가요? 아래처럼 변수를 쓰는데 선언 이렇게 하면 제대로 한건지요?
var : d1mav1(0,Data1),d1mav2(0,Data1),d1mav3(0,data1),d1mav4(0,data1),d1mav5(0,data1),d1atan(0,data1),d1macd(0,data1),d1stoK(0,data1),d1stoD(0,data1),d1CCI(0,data1);
var : d7mav(0,Data7),d7stoK(0,Data7),d7stoD(0,Data7);
d1mav1 = data1(ma(C,5));
d1mav2 = data1(ma(C,10));
d1mav3 = data1(ma(C,15));
d1mav4 = data1(ma(C,20));
d1mav5 = data1(ma(C,30));
d1atan = Atan((d1mav1 - d1mav1[1])/2);
d1macd = data1(macd(5,20));
d1stoK = data1(FastK(5));
d1stoD = data1(FastD(5,3));
d1CCI = CCI(9);
d7mav = data7(ma(C,5));
d7stoK = data7(FastK(5));
d7stoD = data7(FastD(5,3));
#질문4.
시뮬레이션차트는 장중에 작동이 안되나요?
#질문5.
수식이 오류가 나는데 질문입니다.
매도 청산 로직이 현재 이렇게 되어 있는데요
if MarketPosition == 1 Then
{
if (data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) Then
exitshort();
if (data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) Then
exitshort();
if (data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD) Then
exitshort();
if (data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) Then
exitshort();
if (data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD) Then
exitshort();
}
=================================================================================
위에 식을 괄호로 묶어서 OR로 연결하면 매도 신호가 안나가요? 오류가 뜨네요~
if MarketPosition == 1 Then
{
if ((data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) OR
(data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) OR
(data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD OR
(data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) OR
(data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD)) Then
exitshort();
}
질문6.
현재 하나의 시스템 랭귀지 안에 4개의 부분으로 나눠놨는데 매도 청산신호가 안나갑니다
1. 매수로직
2. 매수청산
3. 매도로직
4. 매도청산
이렇게 되어 있는데 4번만 발생이 안되는데 왜 그럴까요~?
2022-06-29
1308
글번호 160264
배움이 님에 의해서 삭제되었습니다.
2022-06-29
124
글번호 160263
분당고래 님에 의해서 삭제되었습니다.
2022-06-29
0
글번호 160262
답변완료
틱차트 기간 최대가 10년째 1000틱 밖에 설정이 안되는 건가요?
안녕하세요~
저는 다른 증권사 HTS에서 틱차트 기간을 최대 30000만까지도 보고 있는데,
예스에서 구현을 하려고 보니 1000틱으로 제한이 걸려 있던데, 이걸 해제하거나, 다른 방법이 없나요?
이런 문의가 2012년에도 있었더군요... 기간 풀어주는게 어렵지 않을텐데..(이미 1000틱까지 구현 되어 있기에..)
안되어 있다면 건의사항에좀 올려주세요. 10년 전 글에도 논의해 보겠다고만 답변이 되어 있네요 ㅠㅠ
2022-06-28
1183
글번호 160261
답변완료
수식 변환 문의
수고 하십니다.
아래 식 변환 부탁드립니다.
수고하세요...
#########################
input length = 5;
def n = length;
def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def x = bn;
def y = close;
# calculate summation values
def startBar = lastBar - (n - 1);
def sumX = if bn < startBar then 0 else x + sumX[1];
def sumY = if bn < startBar then 0 else y + sumY[1];
def sumX2 = if bn < startBar then 0 else Power(x, 2) + sumX2[1];
def sumX3 = if bn < startBar then 0 else Power(x, 3) + sumX3[1];
def sumX4 = if bn < startBar then 0 else Power(x, 4) + sumX4[1];
def sumXY = if bn < startBar then 0 else x * y + sumXY[1];
def sumX2Y = if bn < startBar then 0 else Power(x, 2) * y + sumX2Y[1];
# intermediary calculations
def xx = sumX2 - Power(sumX, 2) / n;
def xy = sumXY - (sumX * sumY / n);
def xx2 = sumX3 - (sumX2 * sumX / n);
def x2y = sumX2Y - (sumX2 * sumY / n);
def x2x2 = sumX4 - (Power(sumX2, 2) / n);
# calculate coefficients
def a0 = (x2y * xx - xy * xx2) / (xx * x2x2 - Power(xx2, 2));
def b0 = (xy * x2x2 - x2y * xx2) / (xx * x2x2 - Power(xx2, 2));
def c0 = sumY / n - b0 * sumX / n - a0 * sumX2 / n;
# for a, b, and c use the final value on the last bar of the chart for all calculations
def a = GetValue(a0, bn - lastBar);
def b = GetValue(b0, bn - lastBar);
def c = GetValue(c0, bn - lastBar);
# calculate and plot
plot theCurve = if bn < startBar then Double.NaN else a * Power(x, 2) + b * x + c;
2022-06-28
1447
글번호 160260