커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6341
글번호 230811
답변완료
문의드립니다
Input : 하락폭(16), 상승폭(70), 손절값(0);
input : StartTime(70000),EndTime(60000);
var : Tcond(false);
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;
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
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 + 2;
if MarketPosition == 0 and Entry < 2 Then
{
if Bdate != NextBarSdate Then
Buy("B1",AtLimit,NextBarOpen-(PriceScale*하락폭));
Else if Bdate == Bdate[1] Then
Buy("B2",AtLimit,DayOpen-(PriceScale*하락폭));
}
SetStopProfittarget(PriceScale*상승폭,PointStop);
SetStopLoss(PriceScale*손절값,PointStop);
위 수식어를 진입 2회로 부탁드립니다.
미리 감사드립니다.
2023-03-16
1081
글번호 167226
답변완료
옵션 매매시 매도부터 시작하는 함수
안녕하세요
옵션매매시 매도매매만 하는 투자자입니다.
시스템매매시 첫번째 매매를 매도로 시작하는 함수부탁합니다.
현재는 조건식에 부합하는 첫번째 매수신호가 나오면 매수를 하도록 되어있는데 첫번째 신호가 매수일경우 무시하고 매도일경우만 진입하는 함수가 필요합니다.
현재는 간단히 아래와 같이 시스템식이 되어 있습니다.
if sell조건식 then
sell
if buy조건식 then
buy
원하는 내용은 buy하기전에 이 조건을 만족하는게 첫번째이면 패스하거나 sell이 되어 있는 경우에 buy( 즉 청산)를 하도록 하고 싶습니다.
감사합니다.
2023-03-16
1118
글번호 167222
답변완료
쌍쓰리 동시
input : Period(120);
Var:j(0),T(0);
Var: date11(0),date12(0),time11(0),time12(0),
date21(0),date22(0),time21(0),time22(0),
date31(0),date32(0),time31(0),time32(0);
Array: HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0);
var : tx1(0),tx2(0),tx3(0),tx4(0);
var : tx99(0),tx99count(0),l1(0),l2(0),l3(0),l4(0);
Plot1(value12);
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
if crossup(c,highest(H,Period)[1]) Then
T = 1;
if CrossDown(c,Lowest(L,Period)[1]) Then
T = -1;
If T == -1 Then
{
If T[1] != -1 Then
{
For j = 18 DownTo 0
{
LoVal[j+1] = LoVal[j];
LoBar[j+1] = LoBar[j];
}
LoVal[0] = L;
LoBar[0] = 0;
date11 = date[HiBar[0]];
time11 = stime[HiBar[0]];
Value11 = HiVal[0];
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
Condition99 = False;
tx99count = 0;
}
Else
{
If LoVal[0] >= L Then
{
LoVal[0] = L;
LoBar[0] = 0;
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
date22 = date[0];
time22 = stime[0];
Condition99 = False;
}
Else
{
if Condition99 == False and value12 <= value11-0.5 and H >= value12+PriceScale*3 Then
{
Condition99 = true;
l1 = value12;
l2 = l1[1];
l3 = l2[1];
l4 = l3[1];
tx99count = tx99count+1;
if tx99count >= 2 Then
{
if max(L1,L2) <= min(L1,L2)+PriceScale*2 Then
{
tx2 = Text_New(date12,time12,L1-PriceScale*0,"●");
Text_SetStyle(tx2,2,2);
Text_SetColor(tx2,Cyan);
Text_SetSize(tx2,30);
}
}
if tx99count >= 3 Then
{
if max(L1,L2,L3) <= min(L1,L2,L3)+PriceScale*5 Then
{
tx3 = Text_New(date12,time12,L1-PriceScale*0,"●");
Text_SetStyle(tx3,2,2);
Text_SetColor(tx3,Black);
Text_SetSize(tx3,25);
}
}
}
}
}
}
If T == 1 Then
{
If T[1] != 1 Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
}
HiVal[0] = H;
HiBar[0] = 0;
date11 = date[LoBar[0]];
time11 = stime[LoBar[0]];
Value11 = LoVal[0];
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
}
If HiVal[0] < H Then
{
HiVal[0] = H;
HiBar[0] = 0;
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
date32 = date[0];
time32 = stime[0];
}
}
2틱 이내 쌍반등과 5틱 이내 쓰리반등이 동시 발생시 동그라미 따로 추가. 부탁드립니다.
(두 수식의 동그라미가 겹치는, 쌍반등이면서 쓰리반등인 부분에 동그라미 따로 추가)
2023-03-16
1281
글번호 167221
답변완료
지표식 문의드립니다
분기 단위로
시가 고가 저가 종가를 나타내어
일주월봉에 적용하려고 하는데 수식 문의드립니다
예를들면
1분기 1~3월
2분기 4~6월
3분기 7~9월
4분기 10-12월
2023-03-16
1065
글번호 167220
답변완료
초보 여쭙니다~~
안녕하세요^^
초보라 이것 저것 해보고 짜집기 하면서 공부 중입니다.
밑에 운영자님이 답변 해주신 내용중에
input : signal_length(11),lin_reg(1),linreg_length(11);
input : lengthMA(34),lengthSignal(9);
input : sto1(12),sto2(5),sto3(5);
input : RSIP(9);
var : bopen1(0,Data1),bhigh1(0,Data1),blow1(0,Data1),bclose1(0,Data1),r1(False,Data1);
var : bopen2(0,Data2),bhigh2(0,Data2),blow2(0,Data2),bclose2(0,Data2),r2(False,Data2);
var : bopen3(0,Data3),bhigh3(0,Data3),blow3(0,Data3),bclose3(0,Data3),r3(False,Data3);
var : bopen4(0,Data4),bhigh4(0,Data4),blow4(0,Data4),bclose4(0,Data4),r4(False,Data4);
var : src1(0,Data1),hi1(0,Data1),lo1(0,Data1),Ema1(0,Data1),eema1(0,Data1),mi1(0,Data1);
var : md1(0,Data1),sb1(0,Data1),sh1(0,Data1),mdc1(0,Data1);
var : src2(0,Data2),hi2(0,Data2),lo2(0,Data2),Ema2(0,Data2),eema2(0,Data2),mi2(0,Data2);
var : md2(0,Data2),sb2(0,Data2),sh2(0,Data2),mdc2(0,Data2);
var : src3(0,Data3),hi3(0,Data3),lo3(0,Data3),Ema3(0,Data3),eema3(0,Data3),mi3(0,Data3);
var : md3(0,Data3),sb3(0,Data3),sh3(0,Data3),mdc3(0,Data3);
var : src4(0,Data4),hi4(0,Data4),lo4(0,Data4),Ema4(0,Data4),eema4(0,Data4),mi4(0,Data4);
var : md4(0,Data4),sb4(0,Data4),sh4(0,Data4),mdc4(0,Data4);
var : stok1(0,Data1),stod1(0,Data1),RSIV1(0,Data1);
var : stok2(0,Data2),stod2(0,Data2),RSIV2(0,Data2);
var : stok3(0,Data3),stod3(0,Data3),RSIV3(0,Data3);
var : stok4(0,Data4),stod4(0,Data4),RSIV4(0,Data4);
var : Bcond(False,Data1),Scond(False,Data1);
bopen1 = data1(iff(lin_reg == 1 , LRL(open, linreg_length) , open));
bhigh1 = data1(iff(lin_reg == 1 , LRL(high, linreg_length) , high));
blow1 = data1(iff(lin_reg == 1 , LRL(low, linreg_length) , low));
bclose1 = data1(iff(lin_reg == 1 , LRL(close, linreg_length) , close));
r1 = data1(bopen1 < bclose1);
bopen2 = data2(iff(lin_reg == 1 , LRL(open, linreg_length) , open));
bhigh2 = data2(iff(lin_reg == 1 , LRL(high, linreg_length) , high));
blow2 = data2(iff(lin_reg == 1 , LRL(low, linreg_length) , low));
bclose2 = data2(iff(lin_reg == 1 , LRL(close, linreg_length) , close));
r2 = data2(bopen2 < bclose2);
bopen3 = data3(iff(lin_reg == 1 , LRL(open, linreg_length) , open));
bhigh3 = data3(iff(lin_reg == 1 , LRL(high, linreg_length) , high));
blow3 = data3(iff(lin_reg == 1 , LRL(low, linreg_length) , low));
bclose3 = data3(iff(lin_reg == 1 , LRL(close, linreg_length) , close));
r3 = data3(bopen3 < bclose3);
bopen4 = data4(iff(lin_reg == 1 , LRL(open, linreg_length) , open));
bhigh4 = data4(iff(lin_reg == 1 , LRL(high, linreg_length) , high));
blow4 = data4(iff(lin_reg == 1 , LRL(low, linreg_length) , low));
bclose4 = data4(iff(lin_reg == 1 , LRL(close, linreg_length) , close));
r4 = data4(bopen4 < bclose4);
src1 = Data1((h+l+c)/3);
hi1 = data1(IFF(IsNan(hi1[1]) == true, ma(high,lengthMA), hi1[1]*(lengthMA-1)+high)/lengthMA);
lo1 = data1(IFF(IsNan(lo1[1]) == true, ma(low,lengthMA), lo1[1]*(lengthMA-1)+low)/lengthMA);
ema1 = data1(ema(src1, lengthMA));
eema1 = data1(ema(ema1, lengthMA));
mi1 = ema1+(ema1-eema1);
md1 = data1(IFf((mi1>hi1), (mi1-hi1) , IFf((mi1<lo1) , (mi1 - lo1) , 0)));
sb1 = data1(ma(md1, lengthSignal));
sh1 = md1-sb1;
mdc1 = data1(iff(src1>mi1,iff(src1>hi1,lime,green),iff(src1<lo1,red,orange)));
src2 = Data2((h+l+c)/3);
hi2 = data2(IFF(IsNan(hi2[1]) == true, ma(high,lengthMA), hi2[1]*(lengthMA-1)+high)/lengthMA);
lo2 = data2(IFF(IsNan(lo2[1]) == true, ma(low,lengthMA), lo2[1]*(lengthMA-1)+low)/lengthMA);
ema2 = data2(ema(src2, lengthMA));
eema2 = data2(ema(ema2, lengthMA));
mi2 = ema2+(ema2-eema2);
md2 = data2(IFf((mi2>hi2), (mi2-hi2) , IFf((mi2<lo2) , (mi2 - lo2) , 0)));
sb2 = data2(ma(md2, lengthSignal));
sh2 = md2-sb2;
mdc2 = data2(iff(src2>mi2,iff(src2>hi2,lime,green),iff(src2<lo2,red,orange)));
src3 = Data3((h+l+c)/3);
hi3 = data3(IFF(IsNan(hi3[1]) == true, ma(high,lengthMA), hi3[1]*(lengthMA-1)+high)/lengthMA);
lo3 = data3(IFF(IsNan(lo3[1]) == true, ma(low,lengthMA), lo3[1]*(lengthMA-1)+low)/lengthMA);
ema3 = data3(ema(src3, lengthMA));
eema3 = data3(ema(ema3, lengthMA));
mi3 = ema3+(ema3-eema3);
md3 = data3(IFf((mi3>hi3), (mi3-hi3) , IFf((mi3<lo3) , (mi3 - lo3) , 0)));
sb3 = data3(ma(md3, lengthSignal));
sh3 = md3-sb3;
mdc3 = data3(iff(src3>mi3,iff(src3>hi3,lime,green),iff(src3<lo3,red,orange)));
src4 = Data4((h+l+c)/3);
hi4 = data4(IFF(IsNan(hi4[1]) == true, ma(high,lengthMA), hi4[1]*(lengthMA-1)+high)/lengthMA);
lo4 = data4(IFF(IsNan(lo4[1]) == true, ma(low,lengthMA), lo4[1]*(lengthMA-1)+low)/lengthMA);
ema4 = data4(ema(src4, lengthMA));
eema4 = data4(ema(ema4, lengthMA));
mi4 = ema4+(ema4-eema4);
md4 = data4(IFf((mi4>hi4), (mi4-hi4) , IFf((mi4<lo4) , (mi4 - lo4) , 0)));
sb4 = data4(ma(md4, lengthSignal));
sh4 = md4-sb4;
mdc4 = data4(iff(src4>mi4,iff(src4>hi4,lime,green),iff(src4<lo4,red,orange)));
stok1 = data1(StochasticsK(sto1,sto2));
stod1 = data1(StochasticsD(sto1,sto2,sto3));
RSIV1 = data1(RSI(RSIP));
stok2 = data2(StochasticsK(sto1,sto2));
stod2 = data2(StochasticsD(sto1,sto2,sto3));
RSIV2 = data2(RSI(RSIP));
stok3 = data3(StochasticsK(sto1,sto2));
stod3 = data3(StochasticsD(sto1,sto2,sto3));
RSIV3 = data3(RSI(RSIP));
stok4 = data4(StochasticsK(sto1,sto2));
stod4 = data4(StochasticsD(sto1,sto2,sto3));
RSIV4 = data4(RSI(RSIP));
Bcond = r1 == true and md1 == green and stok1 > stod1 and RSIV1 > 50 and
r2 == true and md2 == green and stok2 > stod2 and RSIV2 > 50 and
r3 == true and md3 == green and stok3 > stod3 and RSIV3 > 50 and
r4 == true and md4 == green and stok4 > stod4 and RSIV4 > 50 ;
Scond = r1 == False and md1 == Red and stok1 < stod1 and RSIV1 < 50 and
r2 == False and md2 == Red and stok2 < stod1 and RSIV2 < 50 and
r3 == False and md3 == Red and stok3 < stod1 and RSIV3 < 50 and
r4 == False and md4 == Red and stok4 < stod1 and RSIV4 < 50;
if MarketPosition <= 0 and Bcond == true and Bcond[1] == False Then
Buy();
if MarketPosition >= 0 and Scond == true and Scond[1] == False Then
Sell();
if MarketPosition == 1 and Bcond == False Then
ExitLong();
if MarketPosition == -1 and Scond == False Then
ExitShort();
가 있어서 실행해 봤는데요 '수식에서 참조한 2번째 종목데이터가 없습니다.' 라고 뜨는데 무슨말인지 모르겠어서요. 혹시 간단한 설명 부탁드려도 될까요^^?
항상 감사드립니다^^
2023-03-16
1259
글번호 167219
답변완료
식 부탁드립니다.
식 부탁드립니다.
0.지정한 날자부터 조건에 부합하면 계속 자동매수 진행
1.지정한가격 돌파시 매수
2.이후 설정한 가격으로 매도, 손절
매수조건 :시초가가 지정한 돌파매수가격보다 낮을것
매수안하는조건: 당일 가격이 매도설정가격보다 낮게되면
매수안한다
매도,손절 :지정한 가격 이상이면 매도, 이하면 손절
시장가 매수 매도 손절
부탁드립니다
2023-03-16
1007
글번호 167218
답변완료
지표식 문의드립니다
전달 주봉의 마지막 주봉을
새로운 달의 일자가 포함되지 않은 주의 주봉으로 결정하는 지표식을
만들어서 일주월봉에 적용하고 싶습니다.
예를 들어
2월의 경우
2월 20 ~ 2월 24일
2월 27 ~ 3월 3일
로써 2월의 마지막 주봉이 2월 27일~3월 3일에 해당하는 주로 되었는데
제가 원하는 것은
2월 27일 ~ 3월 2일주는 3월이 포함되어있으므로 2월의 마지막 주로 결정하지 않으며,
2월의 마지막 주는 2월 20~24일에 해당하는 주로 결정하고자
하는 목적입니다.
그리고 이 지표를 일주월봉에 적용하고 싶습니다
2023-03-16
1077
글번호 167217
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
종목: 해외선물
차트 : 주봉차트
주봉차트에서 봉완성 기준이 아닌 가격조건 만족기준으로만 매매하려 합니다.
아래와 같이 코딩 했는데 위 조건처럼 매매가 되지 않습니다.[느림]
제가 놓치고 있는게 무엇인지 모르겠습니다.
도움 부탁드립니다.
매수 : 현재가가 주봉 10일 이동평균선 위에 있고
현재 이동평균선이 상승중이고
MACD가 0선 위면 매수
위 3가지 모두 만족하면
현재가에서 10틱 하락시 매수
매수물타기 : 포지션 진입이후 진입가격 대비 10틱이 하락하거나
이미 진입된 포지션의 평균진입가격 대비 10틱 하락할때 마다
1계약씩 추가매수(최대 진입횟수 20회)
매수 물타기 청산1 : 포지션 진입이후 계약수가 10개 이내일 경우에는
진입 건별로 10틱 이상 수익이 발생할때마다 1계약씩 청산
포지션 진입이후 계약수가 11개 이상일 경우에는
평균 진입가격보다 10틱 이상 수익발생할 경우 모든 계약 청산
매수청산 : 캔들(현재가가)이 10일 이동평균선 아래로 하락하거나
10일 이동평균선추세가 하락전환하거나
MACD가 0선 아래로 하락시 매수청산
매도 : 현재가가 주봉 10일 이동평균선 아래에 있고
현재 이동평균선이 하락중이고
MACD가 0선 아래면 매도
위 3가지 모두 만족하면
현재가에서 10틱 상승시 매도
매도물타기 : 포지션 진입이후 진입가격 대비 10틱이 상승하거나
이미 진입된 포지션의 평균진입가격 대비 10틱 상승할때 마다
1계약씩 추가매도(최대 진입횟수 20회)
매도 물타기 청산1 : 포지션 진입이후 계약수가 10개 이내일 경우에는
진입 건별로 10틱 이상 수익이 발생할때마다 1계약씩 청산
포지션 진입이후 계약수가 11개 이상일 경우에는
평균 진입가격보다 10틱 이상 수익발생할 경우 모든 계약 청산
매도청산 : 캔들(현재가가)이 10일 이동평균선 위로 상승하거나
10일 이동평균선추세가 상승전환하거나
MACD가 0선 위로 상승시 매도청산
위에 설명한대로 아래 시스템식 수정 부탁드립니다.
#-----------------------------------------------------------------------
# 매수
If marketposition == 0 and C > 이평 and 이평 > 이평[1] and MACDV > 0 then
Buy("B",AtLimit,C-PriceScale*매수폭,amt);
If marketposition == 1 and MACDv < 0 or 이평[0] < 이평[1] or C < 이평 Then
ExitLong("BX",AtLimit,C,"",amt,1);
# 매도
If marketposition == 0 and C < 이평 and 이평 < 이평[1] and MACDV < 0 then
Sell("S",AtLimit,C+PriceScale*매도폭,amt);
If marketposition == -1 and MACDv > 0 or 이평[0] > 이평[1] or C > 이평 Then
ExitShort("SX",AtLimit,C,"",amt,1);
도움 부탁드립니다.
감사합니다.
2023-03-16
823
글번호 167216
답변완료
문의드립니다
차트쉐어에 공개된 지표의 수식을 구하는 방법이 있나요?
2023-03-16
985
글번호 167215