커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3360
글번호 230811
답변완료
문의 드립니다
안녕하세요!
1, 아래 67854번 관련 어제 아래와같은 답변을 받았는데요(수식1)
제가 바라는것은
캔들이 해당 기준선에 도달한 직후부터 이후 1-2분정도만 음성신호가 발생되는 수식이었으면합니다
가능하다면 다시 부탁드리겠습니다
2, 아래 (수식2) 에서도 음성신호 수식으로 수정 부탁드립니다
* 단, plot3 부터 plot8까지의 부분만 음성이 나오면 됩니다
자꾸 번거롭게해드려서 죄송하고 감사합니다 !!!
---------------------------------------------------------------------------------------
(수식1)
Inputs: TurnLen(9), StdLen(26), PrdLen(52);
Variables: 기준선(0);
기준선 = (Highest(High, StdLen) + Lowest(Low, StdLen)) / 2;
Plot1(기준선, "기준선");
var1 = TimeToMinutes(stime);
var2 = TimeToMinutes(time);
if crossup(h,기준선) or CrossDown(l,기준선) Then
{
if var2 >= var1+50 then
PlaySound("C:₩예스트레이더₩data₩Sound₩60분기준선.wav");
}
(수식 2)
var : CC(0,data1),HH(0,data1),LL(0,data1),OO(0,data1);
var : C1(0,data1),H1(0,data1),L1(0,data1),O1(0,data1);
var : C2(0,data1),H2(0,data1),L2(0,data1),O2(0,data1);
CC = (data1(c)+data2(c))/2;
if data1(date != date[1]) Then
{
HH = CC;
LL = CC;
OO = (data1(O)+data2(O))/2;
O1 = OO[1];
O2 = O1[1];
C1 = CC[1];
C2 = C1[1];
H1 = HH[1];
H2 = H1[1];
L1 = LL[1];
L2 = L1[1];
}
if CC > HH Then
HH = CC;
if CC < LL Then
LL = CC;
plot1(HH,"중간값 중 당일 최고값");
plot2(LL,"중간값 중 당일 최저값");
plot3(C1,"전일종가합/2");
plot4(H1,"전일 중간값 중 당일 최고값");
plot5(L1,"전일 중간값 중 당일 최저값");
plot6(C2,"전전일종가합/2");
plot7(H2,"전전일 중간값 중 당일 최고값");
plot8(L2,"전전일 중간값 중 당일 최저값");
2020-06-10
2074
글번호 139670
답변완료
문의드립니다
긴시간의 분봉을 이용하여 Onclose 주문을 이용한 시스템을 작성하였을 때에
시뮬레이션상으로는 해당 봉의 종가에 청산되는 것으로 나오는데
예를 들어 120분봉을 사용한다고 가정하였을때에 하루에 봉은 4개입니다.
1번봉 9시~11시 / 2번봉 11시~1시 / 3번봉 1시~3시 / 4번봉 3시~5시
코스피 200 선물의 경우 만기일이 아닌 경우 3시36분~45분 종가 단일가인데
4번봉에서 Onclose주문이 나갔을 때에 몇시 몇분에 주문이 나가는지 궁금합니다.
만기일일 경우와 만기일이 아닐 경우에 자동적으로 알아서 분이 수정되는지도 궁금합니다.
만약 이런 기능을 제공하지 않는다면 해결법에 대해서도 알려주시면 감사하겠습니다.
2020-06-09
2020
글번호 139666
답변완료
수식 문의드려요.
과거 10개봉중 RSI(20)이하이며 전최저점인 봉을 현저점이 돌파하고 돌파한 종가의 RSI값이 전저점보다 높으면 매수 (최근 5개봉 이내 매수를 진입한 경우 재진입 금지)
과거 10개봉중 RSI(80)이상이며 전최고점인 봉을 현고점이 돌파하고 돌파한 종가의 RSI값이 전고점보다 낮으면 매도 (최근 5개봉 이내 매도를 진입한 경우 재진입 금지)
매수진입 이후 10개봉중 RSI(80)이상이며 전최고점인 봉을 현고점이 돌파하고 돌파한 종가의 RSI값이 전고점보다 낮으면 매수청산
매도진입 이후 10개봉중 RSI(20)이하이며 전최저점인 봉을 현저점이 돌파하고 돌파한 종가의 RSI값이 전저점보다 높으면 매도청산
2020-06-09
2024
글번호 139665
답변완료
문의드립니다.
늘 수고가 많습니다.
10시 15분과 18시 15분 항생장이 시작할때 갭문제로 고민중입니다.
나름 해결방안으로 직전 종가보다 150틱(조정가능) 이상 갭으로
상승 또는 하락으로 시작할때 그 시가 위에서 매수신호만 나오고
시가 아래에선 매도신호만 나오게 하고 싶습니다.
즉, 10시 15분과 18시 15분 이후 2시간 동안만 매매가 되게 하는 5, 20이평 골드/데드 시
스템신호인데 갭이 150틱이상 벌려져서 갭상승으로 시작할땐 시가 위에서만 신호가 나오고
150틱이상 벌려져서 갭하락으로 시작할땐 시가 아래에서 매도신호만 나오게 하고 싶습니
다. (시가 위나 시가 아래의 기준은 봉의 종가기준입니다)
감사드립니다.
2020-06-09
2067
글번호 139664
답변완료
수식 부탁 드립니다,
안녕하세요
1. 60봉 최저가가 상승상태이고(이후 하락안함) 5이평선이 60이평 crossup 할때 매수
2. 5이평선이 60이평선 crossup 한 상태이고(다시 5이평이 60이평 아래로 안감)
최근 60봉 최저가가 상승시 매수
부탁드립니다.
2020-06-08
2128
글번호 139662
답변완료
지표
*********************************************
내려오던 캔들중
최저가격을 찍은 캔들 이후
이전캔들의 고가를 높인 캔들이 후
다음 캔들이 최저의 가격과 동일 하거나 최저가격보다 1틱 높고
다음캔들에서 신호
******************************************************
말로 하기도 이렇게 어려운데
수식으로 표현해서
눈으로 나타나게 하는 쌤들은 진짜 천재네요
*******************************************************
번호로 쓰긴했는데요
쌤의 수식에서 추가하고 싶은 내용이 있어요
if H < H[1] and #현재봉은 전봉의 고가보다 작음
H[1] < H[2] and L[1] < L[2] and #전봉고가는 잔전봉의 고가보다 작고 전봉저가도 전전봉 저가보다 작음
H[2] > H[3] then #전전봉고가는 전전전봉고가보다 큼(상승)
sell();
____________________________________________________________________
추가 {이전캔들의 고가를 높인 캔들 이후 전봉의 저가보다 같거나 높아야 합니다
다음캔들에서 신호}
______________________________________________________________-__---
현재봉의 고가는 전봉의 고가보다 작고
전봉의 고가는 전전봉의 고가보다 작고 전봉의 저가도 전전봉의 저가보다 작고
전전봉의 고가는 전전전봉의 고가보도 크다(전전봉은 고가기준 상승) 라고 하면 될것 같습니다.
__________________________________________________________________
내려오던 캔들 중에 한캔들이 앞 캔들의 고가를 높여야 하고,
저가의 가격이 같거나 높은 캔들의 다음캔들에서 신호
___________________________________________________________________
2020-06-09
2123
글번호 139661
답변완료
질문 드립니다.
현재봉은 어떻게 표시 합니까?
2020-06-08
2066
글번호 139660
답변완료
분봉상 누적거래량 수식 문의
var1 = V;
를 사용하면 해당 봉에 대한 거래량만 표시가 되는데요
당일 최초의 분봉을 기준으로 해서 거래량을 누적해서 보여주는 수식이 있을까요?
예를 들어 당일 최초 분봉의 거래량이 1000 이라면 누적거래량은 1000,
두번째 분봉의 거래량이 2000 이라면 누적거래량은 3000,
세번째 분봉의 거래량이 3000 이면 누적거래량 6000...
이런식으로 장종료까지 누적해서 계속 보여주고 다음날엔 다시 당일의 최초봉을 기준으로 보여주는 누적거래량 지표 좀 적어주시면 감사하겠습니다
2020-06-09
3014
글번호 139659
답변완료
당일 첫봉 진입 재질문 합니다!
알려주신 내용을 확인해보고 적용을 시켜봤는데 잘 안됩니다 ^^;; 알려주신 수식을 어디에 추가를 해야되나요? 아니면 알려주신 수식을 추가하지 않고 최초 진입 조건식을 수정하는 방법은 없을까요?
IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then {
IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1);
IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1);
}
# 매수 피라미딩
IF MarketPosition == 1 AND STIME <153000 and IsEntryName("L1")==True THEN {
if highest(h,BarsSinceEntry) <= L2 Then
buy("L2",ATSTOP,L2,LUNIT2);
if highest(h,BarsSinceEntry) <= L1 + LTR Then
buy("L3",ATSTOP, L3,LUNIT2);
}
# 매수청산
IF MarketPosition == 1 then {
if NextBarSdate == SDATE Then
ExitLong("LS",AtStop,LatestEntryPrice - LTR);
IF NextBarSdate != SDATE Then
ExitLong("EL",ATMARKET);
}
# 매도 피라미딩
IF MarketPosition == -1 AND STIME < 153000 AND IsEntryName("S1") == True THEN {
IF Lowest(L,BarsSinceEntry) >= S2 Then
SELL("S2",AtStop,S2,SUNIT2);
IF Lowest(L,BarsSinceEntry) >= S1 - STR Then
SELL("S3",AtStop,S3,SUNIT2);
}
# 매도청산
IF MarketPosition == -1 then {
IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR);
SetStopEndofday();
}
ELSE SetStopEndofday(0); #해제
# 재진입
IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then {
IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1);
IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1);
}
IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN {
IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2);
IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2);
}
IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then {
IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2);
IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2);
}
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 당일 첫봉에서 진입이 안됩니다, 그리고 계좌예수금에 따라 베팅사이즈를 조절
> 안녕하세요
예스스탁입니다.
1
작성하신 수식에는 첫봉에 신호가 발생할수 있는 내용이 없습니다.
각 진입에 NextBarSdate == sDate라는 조건이 있습니다.
다음봉 시가의 날짜와 완성봉의 날짜가 같다라는 조건으로
첫봉이 완성이 되어야 atstop으로 진입이 조건이 충족되고
가격을 셋팅하면 그 다음봉에 신호가 발생합니다.
그러므로 당일 두번째 봉부터 신호가 나올수 있습니다.
첫봉에 신호가 발생할수 있는 내용을 추가하셔야 합니다.
#오늘 마지막봉이 완성되면
#다음봉시가(다음날시가)+LTR 이상의 시세가 첫봉에서 발생하면 매수
#다음봉시가(다음날시가)-STR 이하의 시세가 첫봉에서 발생하면 매도
IF MarketPosition == 0 AND NextBarSdate != sdate Then
{
BUY("L11",ATSTOP,NextBarOpen+LTR,LUNIT1);
SELL("S11",ATSTOP,NExtBarOpen-STR,SUNIT1);
}
LTR,STR,LUNIT1,SUNIT1변수가 0값입니다.
계산식 추가하시기 바랍니다.
2
예수금 부분은 %값을 다르게 지정하셔야 합니다.
1.5%와 같이 외부변수 지정이 되지 않습니다.
0.015로 지정하시면 됩니다.
랭귀지에서 실제 잔고값을 사용시 유의하시기 바랍니다.
차트에 과거봉에는 값이 없습니다.
즐거운 하루되세요
> 엠씨용가 님이 쓴 글입니다.
> 제목 : 당일 첫봉에서 진입이 안됩니다, 그리고 계좌예수금에 따라 베팅사이즈를 조절
> 안녕하세요 ^^
1) 아래와 같은 수식을 사용할 경우 당일 첫봉에서 매수/매도 진입이 전혀 되지 않습니다. 어떻게 해야될까요?
2) 계좌 예수금에 따라 베팅사이즈를 조절하려면 아래와 같이 수식을 적으면 될까요? (모의투자)
input : n(3),risk(1.5%),rt(0.17),MUL(50000);
var : noise(0),sum(0),cnt(0),
RANGE(0),LTR(0),STR(0),
L1(0),L2(0),L3(0),S1(0), S2(0),S3(0),
NL1(0), NL2(0),NL3(0), NS1(0), NS2(0), NS3(0),
VL(0),Lunit(0),LUNIT1(0),LUNIT2(0),SUNIT(0), SUNIT1(0), SUNIT2(0),
Accoundnum(""),value(0);
accoundnum = GetAccount(0);
value = GetUnclearedDeposits(accoundnum);
VL = value / (dayclose(1) * MUL * rt);
LUNIT = INT((value * RISK) / (LTR * MUL));
SUNIT = INT((value * RISK) / (STR * MUL));
# ENTRY
L1 = DAYOPEN + LTR ;
L2 = L1 + (LTR * 0.5);
L3 = L1 + LTR;
S1 = DAYOPEN - STR;
S2 = S1 - (STR * 0.5);
S3 = S1 - STR;
NL1 = LatestExitPrice(1)+LTR;
NL2 = NL1 + LTR * 0.5;
NL3 = NL1 + LTR;
NS1 = LatestExitPrice(1)-STR;
NS2 = NS1 - STR * 0.5;
NS3 = NS1 - Str;
IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then {
IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1);
IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1);
}
# 매수 피라미딩
IF MarketPosition == 1 AND STIME <153000 and IsEntryName("L1")==True THEN {
if highest(h,BarsSinceEntry) <= L2 Then
buy("L2",ATSTOP,L2,LUNIT2);
if highest(h,BarsSinceEntry) <= L1 + LTR Then
buy("L3",ATSTOP, L3,LUNIT2);
}
# 매수청산
IF MarketPosition == 1 then {
if NextBarSdate == SDATE Then
ExitLong("LS",AtStop,LatestEntryPrice - LTR);
IF NextBarSdate != SDATE Then
ExitLong("EL",ATMARKET);
}
# 매도 피라미딩
IF MarketPosition == -1 AND STIME < 153000 AND IsEntryName("S1") == True THEN {
IF Lowest(L,BarsSinceEntry) >= S2 Then
SELL("S2",AtStop,S2,SUNIT2);
IF Lowest(L,BarsSinceEntry) >= S1 - STR Then
SELL("S3",AtStop,S3,SUNIT2);
}
# 매도청산
IF MarketPosition == -1 then {
IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR);
SetStopEndofday(1545);
}
ELSE SetStopEndofday(0); #해제
# 재진입
IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then {
IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1);
IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1);
}
IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN {
IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2);
IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2);
}
IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then {
IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2);
IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2);
}
2020-06-08
2103
글번호 139658