커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1477
글번호 230811
답변완료
수식문의 드립니다.
안녕하세요.
아래는 차트 설명입니다.
=================================================================================
양봉의 거래량은 양수, 음봉의 거래량은 음수로 표시된다고 가정하고,
파란색 세로선)
전일 거래량은 포함하지 않은 당일 발생된 봉만 기준으로,
장시작 후 첫째봉을 제외한 최근 20봉 거래량 합이 +1000을 돌파할 때
하늘색 동그라미)
파란색 세로줄이 발생후, 가격상 고점을 갱신하다가,
'처음'으로 2봉연속 고점을 갱신하지 못하고 눌릴때 2봉전의 고점.
검정색 가로선)
하늘색 동그라미봉의 고가라인선.
==================================================================================
지표1)
장시작 후 발생되는 검정색 가로선을 표시하되,
이후에 발생되는 검정색 가로선은 앞서 발생 된 가로선들의 가격보다 저점이 갱신될때만 표시할 것.
감사합니다~
2023-12-18
997
글번호 174932
답변완료
문의
베이시스를 이용한 수식입니다.
입력한 시간동안 발생한 봉의 갯수를 세고 베이시스 최빈값 (m1)을 구합니다.
최빈값을 상승 돌파하면 buy
ex) 094500 ~ 104500 1분봉이며 60개를 모두 세고 최빈값을 구합니다.
진입이후 발생한 봉의 갯수를 세고 베이시스 최빈값(m2)을 구합니다.
최빈값을 하락 돌파하면 exitlong
아래 수식을 완성하여 주십시요.
항상 감사합니다.
**********************************************************************************************
input : 진입시간1(094500), 진입시간2(104500);
input : 청산봉수(30);
input : ba(0,data1), m1(0,data1), m2(0,data1);
ba=data2(c)-data3(c);
if 진입시간1 and 진입시간2 and ba>m1 then
buy("b");
if 청산봉수 and ba<m2 then
exitlong("x");
2023-12-18
1287
글번호 174930
답변완료
문의 드립니다
안녕하세요
수고 많으십니다
아래 수식 오류 검토 부탁드립니다
input : N(3);
var : A(0),B(0),A1(0),B1(0);
A=(C-BollBandDown(20,2)) / (BollBandUp(20,2) - BollBandDown(20,2)) * 100;
B=((C+O)/2-BollBandDown(20,2)) / (BollBandUp(20,2)-BollBandDown(20,2)) * 100;
A1=B>=50 && B<=100;
B1=accum(A1,N) == N;
If
B1[1] && CrossUp(A,100) Then
Find(1);
2023-12-18
1262
글번호 174929
답변완료
쿠루드오일 매매 수식 부탁드리겠습니다.
항상 도움을 주셔서 감사합니다. 자동매매로 잘 활용중에 있습니다.
다음 수식 부탁드릴께요~~
종목: 크루드 오일
차트 60분봉
적용플렛폼 유진선물 예스트레이드
최초 매수
RSI (20) < 30 일때 1계약 계약
추가매수
1.최초진입값에서 5포인트 하락시마다 1계약식 추가매수 (5%하락이 아님 )
2.추가매수는 max 20계약까지만 계약
청산
1. 각각 진입가격에서 6포인트 상승시 매수청산
예를 들어 최초매수가격이 70포인트
추가매수 65포인트 1개 추가 매수 60포인트 1추가매수 55포인트 1개 추가 매수
총 4계약 매수 처리된 상태에서 올라서 61포인트에서 55포인트에서 매수한 계약분은 청산
66포인트에서는 60포인트에서 매수한 계약분 청산
(첨부화일 차트 참조)
이런 형태로 매수-청산될수있도록 되는 수식 시스템 부탁드림니다.
첨부화일은 초기 진입을 임의로 90포인트에서 진입하는것으로 설정했습니다.
# SP 60분봉 202
# 2023년 11월 18일 매도 버전 일부 변경 익절1 1.5 --> 1.6 MFI값(18)--> 40
input : 시작일(10230524);
input : MFI기간(30),MFI값(40);
input : X(250),Y(100);
input : 매매기준선(4);
input : 분할매수포인트(0.1);
input : 익절포인트(0.1);
var : MoneyFlow(0),MoneyFlow1(0);
MoneyFlow = MFI(MFI기간);
if Data1(sDate) >= 시작일 Then
{
if MarketPosition == 0 and MoneyFlow <= MFI값 and C <= Highest(H,X)-PriceScale*Y and C < 매매기준선 Then
{
Buy("b1",OnClose,Def,1);
ExitLong("bx1",AtLimit,c+익절포인트,"b1");
}
}
if MarketPosition == 1 Then
{
if L > EntryPrice - 분할매수포인트 Then
{
Buy("b2",AtLimit,EntryPrice- 분할매수포인트,1);
ExitLong("bx2",AtLimit,min(NextBarOpen,EntryPrice)*10,"b2");
}
if L > EntryPrice-분할매수포인트*2 Then
{
Buy("b3",AtLimit,EntryPrice- 분할매수포인트*2,1);
ExitLong("bx3",AtLimit,min(NextBarOpen,EntryPrice)*10,"b3");
}
if L > EntryPrice-분할매수포인트*3 Then
{
Buy("b4",AtLimit,EntryPrice- 분할매수포인트*3,1);
ExitLong("bx4",AtLimit,min(NextBarOpen,EntryPrice)*10,"b4");
}
if L > EntryPrice-분할매수포인트*4 Then
{
Buy("b5",AtLimit,EntryPrice- 분할매수포인트*4,1);
ExitLong("bx5",AtLimit,min(NextBarOpen,EntryPrice)*10,"b5");
}
if L > EntryPrice-분할매수포인트*5 Then
{
Buy("b6",AtLimit,EntryPrice- 분할매수포인트*5,1);
ExitLong("bx6",AtLimit,min(NextBarOpen,EntryPrice)*10,"b6");
}
if L > EntryPrice-분할매수포인트*6 Then
{
Buy("b7",AtLimit,EntryPrice- 분할매수포인트*6,1);
ExitLong("bx7",AtLimit,min(NextBarOpen,EntryPrice)*10,"b7");
}
if L > EntryPrice-분할매수포인트*7 Then
{
Buy("b8",AtLimit,EntryPrice- 분할매수포인트*7,1);
ExitLong("bx8",AtLimit,min(NextBarOpen,EntryPrice)*10,"b8");
}
if L > EntryPrice-분할매수포인트*8 Then
{
Buy("b9",AtLimit,EntryPrice- 분할매수포인트*8,1);
ExitLong("bx9",AtLimit,min(NextBarOpen,EntryPrice)*10,"b9");
}
if L > EntryPrice-분할매수포인트*9 Then
{
Buy("b10",AtLimit,EntryPrice- 분할매수포인트*9,1);
ExitLong("bx10",AtLimit,min(NextBarOpen,EntryPrice)*10,"b10");
}
if L > EntryPrice-분할매수포인트*10 Then
{
Buy("b11",AtLimit,EntryPrice- 분할매수포인트*10,1);
ExitLong("bx11",AtLimit,min(NextBarOpen,EntryPrice)*10,"b11");
}
if L > EntryPrice-분할매수포인트*11 Then
{
Buy("b12",AtLimit,EntryPrice- 분할매수포인트*11,1);
ExitLong("bx12",AtLimit,min(NextBarOpen,EntryPrice)*10,"b12");
}
if L > EntryPrice-분할매수포인트*12 Then
{
Buy("b13",AtLimit,EntryPrice- 분할매수포인트*12,1);
ExitLong("bx13",AtLimit,min(NextBarOpen,EntryPrice)*10,"b13");
}
if L > EntryPrice-분할매수포인트*13 Then
{
Buy("b14",AtLimit,EntryPrice- 분할매수포인트*13,1);
ExitLong("bx14",AtLimit,min(NextBarOpen,EntryPrice)*10,"b14");
}
if L > EntryPrice-분할매수포인트*14 Then
{
Buy("b15",AtLimit,EntryPrice- 분할매수포인트*14,1);
ExitLong("bx15",AtLimit,min(NextBarOpen,EntryPrice)*10,"b15");
}
if L > EntryPrice-분할매수포인트*15 Then
{
Buy("b16",AtLimit,EntryPrice- 분할매수포인트*15,1);
ExitLong("bx16",AtLimit,min(NextBarOpen,EntryPrice)*10,"b16");
}
if L > EntryPrice-분할매수포인트*16 Then
{
Buy("b17",AtLimit,EntryPrice- 분할매수포인트*16,1);
ExitLong("bx17",AtLimit,min(NextBarOpen,EntryPrice)*10,"b17");
}
if L > EntryPrice-분할매수포인트*17 Then
{
Buy("b18",AtLimit,EntryPrice- 분할매수포인트*17,1);
ExitLong("bx18",AtLimit,min(NextBarOpen,EntryPrice)*10,"b18");
}
if L > EntryPrice-분할매수포인트*18 Then
{
Buy("b19",AtLimit,EntryPrice- 분할매수포인트*18,1);
ExitLong("bx19",AtLimit,min(NextBarOpen,EntryPrice)*10,"b19");
}
if L > EntryPrice-분할매수포인트*19 Then
{
Buy("b20",AtLimit,EntryPrice- 분할매수포인트*19,1);
ExitLong("bx20",AtLimit,min(NextBarOpen,EntryPrice)*10,"b20");
}
# SetStopProfittarget(청산퍼센트,PercentStop);
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "b1" Then
value1 = LatestEntryPrice(0);
if LatestEntryName(0) == "b2" Then
value2 = LatestEntryPrice(0);
if LatestEntryName(0) == "b3" Then
value3 = LatestEntryPrice(0);
if LatestEntryName(0) == "b4" Then
value4 = LatestEntryPrice(0);
if LatestEntryName(0) == "b5" Then
value5 = LatestEntryPrice(0);
if LatestEntryName(0) == "b6" Then
value6 = LatestEntryPrice(0);
if LatestEntryName(0) == "b7" Then
value7 = LatestEntryPrice(0);
if LatestEntryName(0) == "b8" Then
value8 = LatestEntryPrice(0);
if LatestEntryName(0) == "b9" Then
value9 = LatestEntryPrice(0);
if LatestEntryName(0) == "b10" Then
value10 = LatestEntryPrice(0);
if LatestEntryName(0) == "b11" Then
value11 = LatestEntryPrice(0);
if LatestEntryName(0) == "b12" Then
value12 = LatestEntryPrice(0);
if LatestEntryName(0) == "b13" Then
value13 = LatestEntryPrice(0);
if LatestEntryName(0) == "b14" Then
value14 = LatestEntryPrice(0);
if LatestEntryName(0) == "b15" Then
value15 = LatestEntryPrice(0);
if LatestEntryName(0) == "b16" Then
value16 = LatestEntryPrice(0);
if LatestEntryName(0) == "b17" Then
value17 = LatestEntryPrice(0);
if LatestEntryName(0) == "b18" Then
value18 = LatestEntryPrice(0);
if LatestEntryName(0) == "b19" Then
value19 = LatestEntryPrice(0);
if LatestEntryName(0) == "b20" Then
value20 = LatestEntryPrice(0);
}
if value1 > 0 Then
ExitLong("bx1.",AtLimit,value1+ 익절포인트,"b1");
if value2 > 0 Then
ExitLong("bx2.",AtLimit,value2+ 익절포인트,"b2");
if value3 > 0 Then
ExitLong("bx3.",AtLimit,value3+ 익절포인트,"b3");
if value4 > 0 Then
ExitLong("bx4.",AtLimit,value4+ 익절포인트,"b4");
if value5 > 0 Then
ExitLong("bx5.",AtLimit,value5+ 익절포인트,"b5");
if value6 > 0 Then
ExitLong("bx6.",AtLimit,value6+ 익절포인트,"b6");
if value7 > 0 Then
ExitLong("bx7.",AtLimit,value7+ 익절포인트,"b7");
if value8 > 0 Then
ExitLong("bx8.",AtLimit,value8+ 익절포인트,"b8");
if value9 > 0 Then
ExitLong("bx9.",AtLimit,value9+ 익절포인트,"b9");
if value10 > 0 Then
ExitLong("bx10.",AtLimit,value10+ 익절포인트,"b10");
if value11 > 0 Then
ExitLong("bx11.",AtLimit,value11+ 익절포인트,"b11");
if value12 > 0 Then
ExitLong("bx12.",AtLimit,value12+ 익절포인트,"b12");
if value13 > 0 Then
ExitLong("bx13.",AtLimit,value13+ 익절포인트,"b13");
if value14 > 0 Then
ExitLong("bx14.",AtLimit,value14+ 익절포인트,"b14");
if value15 > 0 Then
ExitLong("bx15.",AtLimit,value15+ 익절포인트,"b15");
if value16 > 0 Then
ExitLong("bx16.",AtLimit,value16+ 익절포인트,"b16");
if value17 > 0 Then
ExitLong("bx17.",AtLimit,value17+ 익절포인트,"b17");
if value18 > 0 Then
ExitLong("bx18.",AtLimit,value18+ 익절포인트,"b18");
if value19 > 0 Then
ExitLong("bx19.",AtLimit,value19+ 익절포인트,"b19");
if value20 > 0 Then
ExitLong("bx20.",AtLimit,value20+ 익절포인트,"b20");
}
Else
{
value1 = 0;
value2 = 0;
value3 = 0;
value4 = 0;
value5 = 0;
value6 = 0;
value7 = 0;
value8 = 0;
value9 = 0;
value10 = 0;
value11 = 0;
value12 = 0;
value13 = 0;
value14 = 0;
value15 = 0;
value16 = 0;
value17 = 0;
value18 = 0;
value19 = 0;
value20 = 0;
}
2023-12-24
1274
글번호 174928
답변완료
문의 드립니다
안녕하세요
rsi지표을 동시에3개(7,14,21)을 동시에 나타내고 rsi3선이 정배열일때 매수 화살표(빨강)
역배열일때 매도 화살표(파랑)을 지표상에 나타내고자 합니다
부탁드립니다
2023-12-18
774
글번호 174927
답변완료
문의 드립니다.
도와주셔서 감사합니다.
var : WH(0),WL(0),WH1(0),WL1(0),WO(0);
if DayOfWeek(Bdate) < DayOfWeek(Bdate[1]) Then
{
WO = O;
WH = H;
WL = L;
WH1 = WH[1];
WL1 = WL[1];
}
if H > WH Then
WH = H;
if L < WL Then
WL = L;
if WH1 > 0 and WL1 > 0 Then
{
var1 = (WH1-WL1)*3;
Var2 = WO-var1/2;
Plot1(Var2+var1*0.00);
Plot2(Var2+var1*0.50);
Plot3(Var2+var1*1.0);
}
이것에서 전월봉으로 어떻게 수정하죠?
감사합니다.
2023-12-18
1168
글번호 174924
답변완료
종목 검색시 find 뒤의 괄호안에 특정조건 발생 이후 봉 갯수를 세게끔 하고 싶습니다.
안녕하세요? 수고가 많으십니다.
종목 검색시에 붙이는 find 명령어 뒤의 괄호 안에 조건1이후 몇 봉이 지났는지를 세게끔 하고 싶습니다.
if var1>var2 then find(조건1 이후의 봉 갯수);
부탁드립니다.
감사합니다 꾸벅
2023-12-18
1091
글번호 174923
답변완료
수정 부탁드립니다.
일전에 만들어 주신 시스템식을 아래와 같이 3가지로 만들고 싶은데 가능할까요?
1. 매수신호에 매수'진입'하고, 매도신호에는 매수'청산' 만 되도록 (청산과 동시 매도진입X),
2. 매도신호에 매도'진입'하고, 매수신호에 매도'청산' 만 되도록 (청산과 동시 매수진입X).
3. ema 100 위 매수신호에 매수'진입'하고, 매도신호에는 매수'청산' 만 되도록 (청산과 동시 매도진입X),
ema 100 아래 매도신호에 매도'진입'하고, 매수신호에 매도'청산' 만 되도록 (청산과 동시 매수진입X).
항상 감사드립니다~!!
input : keyvalue(5);
input : atrperiod(10);
var : src(0),xatr(0),nloss(0),xATRTrailingStop(0),pos(0),xcolor(0);
src = close;
xATR = atr(atrperiod);
nLoss = keyvalue * xATR;
xATRTrailingStop = 0.0;
xATRTrailingStop = iff(src > iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]) and src[1] > iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), max(iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), src - nLoss),
iff(src < iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]) and src[1] < iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), min(iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), src + nLoss),
iff(src > iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), src - nLoss, src + nLoss)));
pos = 0;
pos = iff(src[1] < iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]) and src > iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), 1,
iff(src[1] > iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]) and src < iff(IsNan(xATRTrailingStop[1]) == true, 0,xATRTrailingStop[1]), -1, iff(IsNan(pos[1])==true, 0,pos[1])));
xcolor = iff(pos == -1 , red , iff(pos == 1 , green ,blue));
Condition1 = CrossUp(src,xATRTrailingStop);
Condition2 = CrossDown(src,xATRTrailingStop);
if Condition1 == true Then
Buy("Buy");
if Condition2 == true Then
Sell("Sell");
2023-12-18
1146
글번호 174922
답변완료
검색식 질문드려봅니다
1. 기준봉 조건 : 시가 대비 종가 10% 이상
시가 대비 고가 15% 이상
거래대금 100억 이상
2. 위 기준봉을 고가로 돌파한 돌파봉을 검색
3. 돌파봉은 기준봉이 출현한후 20일 내로 나와야 함
(20일 내로 나와야 한다는것은 반대로 19일 이후 출현도 가능하다는 의미)
4. 기준봉과 돌파봉의 사이의 기간이 20일인데 그 사이에
종가로 10일 이동평균선을 이탈한 캔들이 최소 하나 이상이 나와야 함
예시로 23년 12월 15일에 검색된다면
그 검색일에는 위 조건을 모두 만족하며 15일 당일에
기준봉을 돌파한 돌파봉이 검색되어야 합니다
아래는 예시입니다
(첫째날 기준봉 출현, 둘째날 10선이탈봉 출현, 셋째날 돌파봉 출현 --> 조건 만족
첫째날 기준봉 출현, 둘째날 돌파봉 출현 --> 조건 불만족
첫째날 기준봉 출현, 5일째 10선 이탈봉 출현, 15일이후 돌파봉 출현 --> 조건 만족
첫째날 기준봉 출현, 5일째 음봉 출현했으나 10선 이탈은 아님, 15일이후 돌파봉 출현 -->
조건 불만족)
위 조건을 모두 만족하는 조건검색식을
일봉 기준과 주봉 기준으로 나오게끔
답변 부탁드립니다
감사합니다
2023-12-17
1539
글번호 174920