커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3262
글번호 230811
답변완료
검색식 부탁 드립니다
input : n(Numeric);
np = DayClose(n); 사용자함수에 있는수식 입니다
5일전고점라인
max(npredayhigh(5),npredayhigh(4),npredayhigh(3),npredayhigh(2),npredayhigh())
분봉에서 5일전고라인 돌파 검색식 부탁드립니다
그리고
함수 수식도 부탁드립니다
파워종목 조건에 필요한 최소기간도 알려 주세요
2024-04-19
1056
글번호 178715
답변완료
수식 수정요청
아래 수식은 20봉전, 10봉전, 5봉전 대비 1봉전가격이 떨어진 조건(30,20,10%)에서
5이평돌파하는 종목을 검색코자 한 수식입니다.
사용해보니 20,10,5봉에 딱 맞는 것만 대상이 되어 문제가 좀 있었읍니다.
그래서 다른 모든 조건은 그대로 두고
- 20봉전 대신 11봉전~20봉전 사이에 있는 최고가에서 1봉전이 -30%,
- 10 " 6봉전~10봉전 " "" " -20%
- 5 " 2봉전~5봉전 " " -10%
세가지만을 반영한 수식 수정이 가능할까요?
사이에 있는 최고가라서 안될 거 같기도 합니다만,
===============================================================================
var1 = ma(v,5);
Var2 = ma(C,1);
var3 = ma(C,5);
if var1[1] >= 50000 and
CrossUp(var2,Var3) and
CountIf(Var3 < Var3[1],3)[1] == 3 and
(C >= O*1.03 or C >= C[1]*1.03) and
(C[1] <= C[20]*0.70 or C[1] <= C[10]*0.80 or C[1] <= C[5]*0.90) Then
Find(1);
2024-04-18
933
글번호 178714
답변완료
수식변환요청
수고 많으십니다
다음식을 예스 검색식으로 부탁드립니다
AA=Crossup(CCI(Period*5),Level);
CC=CountSince(crossdown(CCI(Period*5), Level), CCI(Period*5)<Level);
AA && CC>span
//period(48),Level(100),Span(20)
감사합니다
2024-04-18
990
글번호 178713
답변완료
타주기 지표 표시 문제
안녕하세요!
첨부된 그림 파일은
1분봉에 60분봉 지표를 나타낸 것입니다.
문제는
가운데 보시면 수평선으로 일직선으로 나오는게 있는데,
실제 60분봉 지표의 흐름과는 다른 것 같습니다.
문제를 해결할 방법이 없을까요?
볼린저 밴드와 유사한 지표입니다.
2024-04-18
1121
글번호 178707
답변완료
문의 드립니다.
20 120이평선 역배열 상태에서 주가가 20이평을 아래서 위로 돌파시 매수 진입
청산은 정역배열 상관없이 20이평 아래로 이탈 시 매도 청산 완료
20 120이평선 정배열 상태에서 주가가 20이평을 위에서 아래로 돌파시 매도 진입
청산은 정역배열 상관없이 20이평 위에서 아래로 돌파 시 매수 청산 완료
부탁드립니다.
2024-04-18
989
글번호 178706
답변완료
Re : 수식 문의 드립니다.
이전에 수정 잘해주셔서 감사합니다~!
여러 거래 중에 총 손실제한을 40틱으로 제한을 두고 싶은데
부탁드립니다.
///////////////////////////////////////////
안녕하세요
예스스탁입니다.
진입횟수 초기화가 빠져있었습니다.
지정한 시작시간에 초기화되게 수정했습니다.
Input :
APeriod( 5 ),
BPeriod( 20 ),
CPeriod( 120 );
input : StartTime(90000),EndTime(120000),당일진입횟수(2),당일수익틱수(100);
Vars :
v5( 0 ),
v20( 0 ),
v120( 0 ),
T(0),entry(0), Tcond(false),Xcond(False),N1(0),당일수익(0),daypl(0);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
entry = 0;
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
당일수익 = PriceScale*당일수익틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 Then
Xcond = true;
if (IsExitName("dbp",1) == true or
IsExitName("dsp",1) == true ) then
Xcond = true;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
v5 = wma(C, APeriod);
v20 = wma(C, BPeriod);
v120 = wma(C, CPeriod);
if CrossUp(v20,v120) then
T = 1;
if CrossDown(v20,v120) then
T = -1;
If T == 1 and CrossUp(v5, v20) and Xcond == False Then
{
T = 2;
if entry < 당일진입횟수 Then
Buy("매수");
}
If T == -1 and CrossDown(v5, v20) and Xcond == False Then
{
T = -2;
if entry < 당일진입횟수 Then
Sell("매도");
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
}
if MarketPosition == -1 then
{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
}
즐거운 하루되세요
> 무청 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 사진 보시면 이 차트의 첫부분만 매매가 이뤄지고
다음날 9시에 진입된게 보여하는데 안떠있습니다. 어떻게 해야하나요?
//////////////////////////////////////////////////////////
안녕하세요
예스스탁입니다.
기존식에 2번 내용만 추가해 드립니다.
.
Input :
APeriod( 5 ),
BPeriod( 20 ),
CPeriod( 120 );
input : StartTime(90000),EndTime(120000),당일진입횟수(2),당일수익틱수(100);
Vars :
v5( 0 ),
v20( 0 ),
v120( 0 ),
T(0),entry(0), Tcond(false),Xcond(False),N1(0),당일수익(0),daypl(0);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
당일수익 = PriceScale*당일수익틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 Then
Xcond = true;
if (IsExitName("dbp",1) == true or
IsExitName("dsp",1) == true ) then
Xcond = true;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
v5 = wma(C, APeriod);
v20 = wma(C, BPeriod);
v120 = wma(C, CPeriod);
if CrossUp(v20,v120) then
T = 1;
if CrossDown(v20,v120) then
T = -1;
If T == 1 and CrossUp(v5, v20) and Xcond == False Then
{
T = 2;
if entry < 당일진입횟수 Then
Buy("매수");
}
If T == -1 and CrossDown(v5, v20) and Xcond == False Then
{
T = -2;
if entry < 당일진입횟수 Then
Sell("매도");
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
}
if MarketPosition == -1 then
{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
}
즐거운 하루되세요
> 무청 님이 쓴 글입니다.
> 제목 : Re : Re : 수식 문의 드립니다.
> 수식 세워주셨는데 구동이 안됩니다.
1번 질문 무시하고 2번만 해서 수식 세워주실 수 있으실까요?
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 문의 드립니다.
> 안녕하세요
예스스탁입니다.
1
현재 진입은 지정시간에 지정한 횟수만큼 발생을 합니다.
다만 2번째 진입 후 반대조건이 나오면 청산을 할수 없어
진입횟수 충족후에 반대조건 나오면 청산하게 추가하고
EndTime에 포지션이 있으면 청산되게 수정해 드립니다.
2
Input :
APeriod( 5 ),
BPeriod( 20 ),
CPeriod( 120 );
input : StartTime(90000),EndTime(120000),당일진입횟수(2),당일수익틱수(100);
Vars :
v5( 0 ),
v20( 0 ),
v120( 0 ),
T(0),entry(0), Tcond(false),Xcond(False),N1(0),당일수익(0),daypl(0);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
당일수익 = PriceScale*당일수익틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 Then
Xcond = true;
if (IsExitName("dbp",1) == true or
IsExitName("dsp",1) == true ) then
Xcond = true;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
v5 = wma(C, APeriod);
v20 = wma(C, BPeriod);
v120 = wma(C, CPeriod);
if CrossUp(v20,v120) then
T = 1;
if CrossDown(v20,v120) then
T = -1;
If T == 1 and CrossUp(v5, v20) and Tcond == true and Xcond == False Then
{
T = 2;
if entry < 당일진입횟수 Then
Buy("매수");
Else
ExitShort("sx");
}
If T == -1 and CrossDown(v5, v20) and Tcond == true and Xcond == False Then
{
T = -2;
if entry < 당일진입횟수 Then
Sell("매도");
Else
ExitLong("bx");
}
if MarketPosition == 1 then
{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
}
if MarketPosition == -1 then
{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
}
즐거운 하루되세요
> 무청 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 1. 일전에 이렇게 하단 수식 문의 했었는데 당일진입횟수가 2번인데 왜 1번만 진입하는지 궁금합니다.
(항셍에서)
2. 당일 최종 목표틱수가 100틱이게 수식을 넣을 수 있을까요?
예를들어 총 100틱 수익인데 1차 -20틱 2차 120틱 해서 총 100틱 수익이 날 수 있도록이요..
감사합니다.
Input :
APeriod( 5 ),
BPeriod( 20 ),
CPeriod( 120 );
input : StartTime(90000),EndTime(120000),당일진입횟수(2);
Vars :
v5( 0 ),
v20( 0 ),
v120( 0 ),
T(0),entry(0), Tcond(false);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
entry = 0;
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
{
Tcond = False;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == 0 and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
v5 = wma(C, APeriod);
v20 = wma(C, BPeriod);
v120 = wma(C, CPeriod);
if CrossUp(v20,v120) then
T = 1;
if CrossDown(v20,v120) then
T = -1;
If T == 1 and CrossUp(v5, v20) Then
{
T = 2;
if entry < 당일진입횟수 Then
Buy("매수");
}
If T == -1 and CrossDown(v5, v20) Then
{
T = -2;
if entry < 당일진입횟수 Then
Sell("매도");
}
2024-04-18
938
글번호 178705
답변완료
수고하십니다.
crossup(h,bbandsup(period,d1))
and
max(avg(c,short),avg(c,mid),avg(c,long)) <
min(avg(c,short),avg(c,mid),avg(c,long)) *(1+percent/100)&&
c>highest(h(1),5)&& c(1)<=highest(h(2),5)
변수
short 5
mid 20
long 60
period 20
percent 5
d1 2
하나 더 부탁합니다.
max(BBandsUp(20,2))<min(BBandsdown(20,2))*1.01
or
max(BBandsUp(20,2))<min(BBandsdown(20,2))*1.02
&& c>BBandsc(20,2)
&& crossup(c,BBandsup(20,2))
&& v>v(1)*2
&& c>predayclose()
&& dayopen()<c
&& C*1.04 >= dayhigh()
&& h(1)<BBandsup(20,2)
and time >= 090300 and time <= 152000
미리 감사드립니다~~
2024-04-18
944
글번호 178704
답변완료
문의드립니다.
늘 고맙습니다.
새벽에 드린 질문에 대한 답변 잘 보았습니다.
모르는게 너무 많네요.
하나 더 문의드립니다.
# 현재봉에서는 봉마감이 되기전까지는 미리 지정해놓은 가격에 대한 반응만 하게 되는거죠?
진입시 정해놓은 가격에서 강제청산이든, L+ (H-L)*(1/3) 이런 자리에서 진입이든지요.
# 그렇다면 "20 이평선을 돌파하면 매수한다."
현재봉 기준으로 하면 가능하지 않지만
직전봉 기준으로 20 이평선을 미리 저장해두고 봉마감전이라도 현재봉 가격이 20이평선을 돌
파한다면 바로 진입을 할 수 있을까요?
# 조건만족봉 기준으로 var1에 20이평을 저장해두고 그 저장값을 돌파시 매수진입
if 조건 then
{
var1=20이평
}
buy("b",atstop,var1);
2024-04-18
659
글번호 178703
답변완료
검색식 부탁 드립니다
rsi(7)
rsi(14)
rsi(7) 기준선 30이하인종목 에 오늘저가 최저가인 종목 검색식 부탁드립니다
ORrsi(14)기준선 30이하인종목 에 오늘저가 최저가인 종목 검색식 부탁드립니다
2024-04-18
686
글번호 178697