커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3128
글번호 230811
답변완료
수식 부탁드립니다.
안녕하세요? 간단한 수식한가지 부탁드립니다.
*이동평균선 2가지(외부변수)
*진입
정배열에서 양봉 + 갭하락 음봉(외부변수1)에 매도
역배열에서 음봉 + 갭상승 양봉(외부변수2)에 매수
*청산
익절(외부변수), 손절(외부변수)
*재진입
포지션 청산전까지는 신호가나와도 재진입 금지.
감사합니다.
2020-09-21
666
글번호 142549
답변완료
문의2
1) 금일 발생봉부터 계산하는 수식으로 수정바랍니다.
input:이평1(81),이평2(103);
var : v2(0,data2),v3(0,data3);
v2 = data2(ma(C,이평1));
v3 = data3(ma(C,이평2));
if crossup(v2,v3) Then
buy("b");
2) 아래 수식 sell 쪽 condition 수식에 오류가 있는데 수정 후 해석부탁합니다.
if bdate != bdate[1] Then{
Condition1 = false;
var1 = H;
var2 = L;
}
if stime >= 130000 and Condition1 == false and C > O Then{
Condition1 = true;
if H < var2 Then
buy();
}
if stime >= 130000 and Condition2 == false and C < O Then{
Condition2 = true;
if L > var1 Then
sell();
}
2020-09-23
706
글번호 142548
답변완료
장종료 직전 매수실패
5분봉으로 매수진행하는데 3시30분 장막판에 매수신호가 오고 실제 매수는 이루어지지 않는 문제가 발생합니다. 이 문제좀 해결해 주세요..ㅠ
매수신호가 뜨지 않게 3시20분까지만 매수하는걸로 해주시거나, 매수가 이루어질수있게 부탁드릴께요. 물론 다음날은 이어서 정상작동 되도록이요.
Input : 투자금액(10000000),Period(20), MultiD(2), N(1),시작일(20200921),시작시간(090000),청산시간(153000);
Input : loss(5),P(3),WRP(10);
var : e(0),x(0),count(0),Tcond(false),BBup(0),BBdn(0),WR(0),Vma(0);
var : HH(0),Bxcond1(false),Bxcond2(false),Bxcond3(false);
var : LL(0),Sxcond1(false),Sxcond2(false),Sxcond3(false);
Array : VV[6](0),XX[5](0);
BBup = BollBandUp(Period,MultiD);
BBdn = BollBandDown(Period,MultiD);
WR = WILLR(WRP);
Vma = ma(V,P);
vv[0] = floor((투자금액*0.1)/NextBarOpen);
vv[1] = floor((투자금액*0.1)/NextBarOpen);
vv[2] = floor((투자금액*0.1)/NextBarOpen);
vv[3] = floor((투자금액*0.2)/NextBarOpen);
vv[4] = floor((투자금액*0.2)/NextBarOpen);
vv[5] = floor((투자금액*0.3)/NextBarOpen);
if NextBarSdate >= 시작일 and NextBarStime >= 시작시간 Then
Tcond = true;
if bdate != bdate[1] Then
count = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
count = count+1;
if sdate >= 시작일 and stime >= 시작시간 Then
Tcond = true;
if Tcond == true then{
if (TotalTrades == 0 or MarketPosition == 0 and BarsSinceExit(1) > 2) then{
if MarketPosition == 0 and count < N and CrossDown(c,bbdn) and
V >= Vma[1]*2.0 Then {
buy("b1",atmarket,def,vv[MaxEntries]);
}
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then{
e = e +1;
if e == 1 then
XX[e] = CurrentContracts;
Else
XX[e] = CurrentContracts-CurrentContracts[1];
}
#두번째 매수
if MarketPosition == 1 and e == 1 and CrossDown(c,bbdn) and NextBarSdate == sdate and
V >= Vma[1]*2.0 Then
{
buy("b2",atmarket,def,vv[MaxEntries]);
}
#세번재매수
if MarketPosition == 1 and e == 2 and CrossDown(c,bbdn) and NextBarSdate == sdate and
V >= Vma[1]*2.0 Then
{
buy("b3",atmarket,def,vv[MaxEntries]);
}
#네번재매수
if MarketPosition == 1 and e == 3 and CrossDown(c,bbdn) and NextBarSdate == sdate and
V >= Vma[1]*2.0 Then
{
buy("b4",atmarket,def,vv[MaxEntries]);
}
#다섯번재매수
if MarketPosition == 1 and e == 4 and CrossDown(c,bbdn) and NextBarSdate == sdate and
V >= Vma[1]*2.0 Then
{
buy("b5",atmarket,def,vv[MaxEntries]);
}
#여섯번재매수
if MarketPosition == 1 and e == 5 and CrossDown(c,bbdn) and NextBarSdate == sdate and
V >= Vma[1]*3.0 Then
{
buy("b6",atmarket,def,vv[MaxEntries]);
}
HH = highest(H,BarsSinceEntry);
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "Bx1" Then
Bxcond1 = true;
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "Bx2" Then
Bxcond2 = true;
if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "Bx3" Then
Bxcond3 = true;
if Bxcond1 == false and HH >= EntryPrice*1.10 and HH < EntryPrice*1.15 Then
ExitLong("Bx1",AtStop,HH-(HH-EntryPrice)*0.1,"",Floor(MaxContracts*(1/5)),1);
if Bxcond2 == false and HH >= EntryPrice*1.15 and HH < EntryPrice*1.20 Then
ExitLong("Bx2",AtStop,HH-(HH-EntryPrice)*0.1,"",Floor(MaxContracts*(2/5)),1);
if Bxcond3 == false and HH >= EntryPrice*1.20 and HH < EntryPrice*1.30 Then
ExitLong("Bx3",AtStop,HH-(HH-EntryPrice)*0.1,"",Floor(MaxContracts*(2/5)),1);
}}}
2020-09-21
614
글번호 142547
답변완료
부탁드려요
A: [1분]거래량: 80000이상 9999999이하
B :주가범위: 0봉전 종가가 1000 이상 100000 이하
A and B
2020-09-23
545
글번호 142546
타케 님에 의해서 삭제되었습니다.
2020-09-20
9
글번호 142545
답변완료
질문드립니다.
1. 수식에 Data1,Data2를 지정할때를 정확히 알고 싶습니다.
2. Data1과 Data2의 시스템수식작성시 참고해야될 점
즉 제약이야 주의사항들을 설명좀 부탁합니다.
2020-09-23
765
글번호 142544
답변완료
부탁드립니다
#1,아래식은 국내옵션만기(1개월주기) 로직입니다,이를 국내선물만기(3개월주기) 로직
으로 수정부탁드립니다.#첨부파일참조(3개월주기,선물옵션동시만기)
var : month(0),nday(0),week(0);
var :EX(false),HH(0),LL(0);
var : t1(0),t2(0),t3(0),t4(0),t5(0),t6(0),t7(0),t8(0),t9(0),t10(0);
month = int(date/100)-int(date/10000)*100;
nday = date - int(date/100)*100;
week = DayOfWeek(date);
#선물만기
#if Month%3 == 0 and nday >= 8 and nday <= 14 and week == 4 then
if nday >= 8 and nday <= 14 and week == 4 then#옵션만기
EX = true;
Else
EX = false;
if EX == false and EX[1] == true Then{
Condition1 = true;
HH = H;
LL = L;
}
if Condition1 == true then{
if H > HH Then
HH = H;
if L < LL Then
LL = L;
var1 = HH;
var2 = LL;
var3 = var1-var2;
##2,아래식은 나름작성한 타주기 분봉식 인데 주기가 적용해보니 좀 미흡한것 같습니다
점검부탁드립니다
input : Length1(5),Length2(20),굵기(3);
var : 매수1(0,data2),매도1(0,data2),매수2(0,data2),매도2(0,data2);
var : 매수11(0,data2),매수12(0,data2),매도11(0,data2),매도12(0,data2),T(0,data2),tx(0,data2),TLen1(0,data2),TLen2(0,data2);
TLen1 = data2(Ceiling((Length1 + 1) * .5));
TLen2 = data2(Ceiling((Length2 + 1) * .5));
var1 = data2(ema(ma(h,TLen1), TLen1));
var2 = data2(ema(ma(l,TLen2), TLen2));
if crossup(var1,var2) Then
{
T = 1;
매도1 = var2;
매도11 = 매도1[1];
매도12 = 매도11[1];
}
if 매도1 > 0 and var2 > 매도1 Then
매도1 = var2;
if CrossDown(var1,var2) Then
{
T = -1;
매수1 = var2;
매수11 = 매수1[1];
매수12= 매수11[1];
}
if 매수1 > 0 and var2 < 매수1 Then
매수1 = var2;
매도2=매도1-0.02;
매수2=매수1+0.02;
plot1(매도1,"매도1",BLUE,def,굵기);
plot2(매수1,"매수1",MAGENTA,def,굵기);
plot3(var2,"이평",iff(var2>var2[1],MAGENTA,BLUE),def,굵기);
if T == 1 and 매도12 > 매도11 and 매수11 > 매수1 then
{
plot4((매도11+매수1)/2);
plot5((매도11));
plot6((매도12));
if T[1] != 1 then
{
tx = Text_New(sdate,stime,(매도11),NumToStr((매도11),2));
Text_SetStyle(tx,1,1);
Text_SetColor(tx,BLUE);
}
Else
Text_SetLocation(tx,sdate,stime,(매도11));
}
if T == -1 and 매수12 < 매수11 and 매도11 < 매도1 then
{
plot7((매수11+매도1)/2);
plot8((매수11));
plot9((매수12));
if T[1] != -1 then
{
tx = Text_New(sdate,stime,(매수11),NumToStr((매수11),2));
Text_SetStyle(tx,1,1);
Text_SetColor(tx,MAGENTA);
}
Else
Text_SetLocation(tx,sdate,stime,(매수11));
}
###3,15분봉차트에서 캔들꼬리가 몸통보다 2/3이상 클때 아래조건식 부탁입니다.
-,아랫꼬리가 양봉일경우는 시가에서부터 이후4개봉까지 우측라인긋기
음봉일경우는 종가에서부터 이후4개봉까지 우측라인긋기
-,윗꼬리가 양봉일경우는 종가에서부터 이후4개봉까지 우측라인긋기
음봉일경우는 시가에서부터 이후4개봉까지 우측라인긋기
$,언제나 늘 고맙습니다.
2020-09-23
828
글번호 142543
답변완료
시스템식 부탁드려요.
시스템트레이딩을 하다 보면 자동매매가 안되고,
의도하지 않게 계좌에 남아있는 매수/매도 물량이 생기는 경우가 있는데요...
하루 장이 끝날 시점(오후 3시 30분)에 남아 있는 잔고를 일괄로 처리하는 시스템식이 있었으면 합니다.
부탁드립니다.
2020-09-20
856
글번호 142542
답변완료
전략식 변환 부탁드립니다.
안녕하세요
아래 두가지 전략식을 예트 언어로 변환 부탁드립니다.
전략1)
Vars : SP(0), TickSize(0);
SP = SignalPosition;
TickSize = OneTick * PriceScale;
Params : vN(5);
Vars : vHH(0), vLL(0);
vLL = Lowest(L, vN);
vHH = Highest(H, vN);
Params : vperiod1(11), vperiod2(32);
Vars : vMa1(0), vMa2(0);
vMa1 = XAverage(C, vperiod1);
vMa2 = XAverage(C, vperiod2);
If SP = 0 Then
Begin
If vMa1 > vMa2 And L[1] >= vLL[2] And L < vLL[1] And H > vHH[1] Then Buy("B");
If vMa1 < vMa2 And H[1] <= vHH[2] And H > vHH[1] And L < vLL[1] Then Sell("S");
End;
Params : vExitP(342), vExitL(149);
SetStopLoss(vExitL * TickSize * CurrentContracts);
SetProfitTarget(vExitP * TickSize * CurrentContracts);
전략2)
Params: SSTIME(074001), EETIME(030000);
Vars : TCOND(False);
If SSTIME < EETIME Then
Begin
If SSTIME <= TIME And TIME <= EETIME Then TCOND = True
Else TCOND = False;
End
Else
Begin
If SSTIME <= TIME Or TIME <= EETIME Then TCOND = True
Else TCOND = False;
End;
If TCOND Then
Begin
Params : pLeng( 18 ), pAtrAdj( 0.8 ) ;
v1 = ATR( pLeng ) * pAtrAdj;
if SignalPosition != 1 then
ExitLong ( "EntryAtrStop LX", AtStop, C - v1 ) ;
Params : pLeng1( 1 ), pAtrVal( 0.3 ) ;
v1 = ATR( pLeng1 ) * pAtrVal;
if SignalPosition != - 1 then
ExitShort ( "EntryAtrStop LX11", AtStop, C + v1 ) ;
End;
2020-09-20
841
글번호 142541