커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3737
글번호 230811
답변완료
분할매수 , 매수금액 최적화 시뮬레이션 오류.
안녕하세요.
매수: 매수신호 발생시 1호가 단위로 나눠서 분할매수 로직+ 투자금 1천만원
표제건관려하여, 투입금액(분할매수 최대금액)이 어느 정도 이상 올라가니,
수익률이 0%이되는 현상이 발생하네요.테스트는 30분봉으로 했고요.
상식적으로 이해가 안되는 상황이라,
제 수식에 문제 가 있거나, HTS상의 문제가 있어보입니다.
첨부 사진 보시면 알겠지만, 투자금액이 어느정도 이상되면 수익금이 0가 됩니다.
혹시 투자금액 한도 같은 게 걸려있나요?
-----인용------
Input : 금액(10000000),
#할당
//value = 매매기준(Period); //매매기준
var1 = int(금액*(1/9)/C); // 1번째 주문수량,다이아몬드형
var2 = Int(금액*(2/9)/C);
Var3 = Int(금액*(3/9)/C);
Var4 = Int(금액*(2/9)/C);
Var5 = Int(금액*(1/9)/C);
# 매수/매도청산
if CrossUP(매매기준, 매수선)//무포시 1차매수
then
buy("매수1",OnClose,def,Var1); //Buy("신호명", 신호타입, 가격조건, 수량)
if MarketPosition == 1 && BarsSinceEntry< Entry봉시간제한
Then// 1차 매수후 나머지 4분할 매수
{
if Lowest(L,BarsSinceEntry) < EntryPrice-PriceScale*1*buypriceunit Then //2틱하락시
buy("매수2",AtLimit,EntryPrice-PriceScale*1*buypriceunit,Var2); // 2차매수
if Lowest(L,BarsSinceEntry) < EntryPrice-PriceScale*2*buypriceunit Then
buy("매수3",AtLimit,EntryPrice-PriceScale*2*buypriceunit,Var3);
if Lowest(L,BarsSinceEntry) < EntryPrice-PriceScale*3*buypriceunit Then
buy("매수4",AtLimit,EntryPrice-PriceScale*3*buypriceunit,Var4);
if Lowest(L,BarsSinceEntry) < EntryPrice-PriceScale*4*buypriceunit Then
buy("매수5",AtLimit,EntryPrice-PriceScale*4*buypriceunit,Var5);
}
2020-04-30
1250
글번호 138534
답변완료
부탁드립니다
항상 감사드립니다
아래식을 피라미딩 적용하려합니다.
피라미딩 중 각각의 진입명이 한번이상 들어가지 않도록 부탁드립니다
Input : 손절(4),익절(5),익절하락(1);
input : P1(30), P2(200), p3(230), P4(260), P5(320);
input : StartTime(090300),EndTime(151500);
var : tx(0),X(false),Tcond(false),tt(0),vol(1);
var1 = ma(C, P1);
var2 = ma(C, P2);
var3 = ma(C, P3);
var4 = ma(C, P4);
var5 = ma(C, P5);
######## 진입제한
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime)Then
{
Tcond = true;
}
if (sdate != sdate[1] and stime >= Endtime) or
(sdate == sdate[1] and stime >= Endtime and stime[1] < Endtime)Then
{
Tcond = false;
}
## 진입
if Tcond == true and marketposition == 0
and crossup(var1,var2) Then
{
buy("B1");
}
if Tcond == true and marketposition == 0
and crossdown(var1,var2) Then
{
sell("S1");
}
if Tcond == true and marketposition == 0
and crossup(var2,var3) and var3[1] < var3 Then
{
buy("B2");
}
if Tcond == true and marketposition == 0
and crossdown(var3,var4) and var3[1] > var3 Then
{
sell("S2");
}
if Tcond == true and marketposition == 0
and crossup(var1,var4) Then
{
buy("B4");
}
if Tcond == true and marketposition == 0
and crossdown(var1,var4) Then
{
sell("S4");
}
if Tcond == true and marketposition == 0
and crossup(var2,var5) and var3[1] < var3 Then
{
buy("B5");
}
if Tcond == true and marketposition == 0
and crossdown(var3,var5) and var3[1] > var3 Then
{
sell("S5");
}
#### Target 청산
if MarketPosition == 1 then {
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
if Marketposition == -1 Then {
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
if ((sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime)) Then {
if MarketPosition == 1 Then
ExitLong("BE6");
if MarketPosition == -1 Then
ExitShort("SE6");
}
2020-05-01
1078
글번호 138533
답변완료
지표수식전환 요청
다음 수식을 예스지표수식으로 전환요청드립니다.
<1>
수식1
A=eavg(((Log(c/((((Highest(H(5),5)+Lowest(L(5),5))/2)))))+1)*25,10);
AS=ma(A,5);
valuewhen(1,crossup(A,AS),C)
<2>수식1
eavg(((Log(c/((((Highest(H(5),5)+Lowest(L(5),5))/2)))))+1)*25,10);
수식4
A=eavg(((Log(c/((((Highest(H(5),5)+Lowest(L(5),5))/2)))))+1)*25,10);
AS=ma(A,5);
수식5
A=eavg(((Log(c/((((Highest(H(5),5)+Lowest(L(5),5))/2)))))+1)*25,10);
AS=ma(A,8);
기준선 추가
50
<3>
수식1
HH=Highest(H,기간);
LL=Lowest(L,기간);
NH=valuewhen(1,H>HH(1),H);
valuewhen(1,Barssince(H>HH(1))==(기간-R),NH)
수식2
HH=HigHest(H,기간);
LL=Lowest(L,기간);
NH=valuewhen(1,H>HH(1),H);
valuewhen(1,BarsSince(H>HH(1))==(기간-R),LL)
수식3
HH=Highest(H,기간);
LL=Lowest(L,기간);
NL=valuewhen(1,L<LL(1),L);
valuewhen(1,Barssince(L<LL(1))==(기간-R),HH)
수식4
HH=Highest(H,기간);
LL=Lowest(L,기간);
NL=valuewhen(1,L<LL(1),L);
valuewhen(1,Barssince(L<LL(1))==(기간-R),NL)
지표추가설정
기간 10
R 5
2020-04-30
1074
글번호 138532
답변완료
질문드립니다
안녕하세요
국내선물에서 당일 시초가 부근에서 매도하는 식을 작성하는데 도움이 필요합니다.
1) 20, 60, 120 이평선중 반드시 시초가의 위에 있으면서 시초가에 가장 가까운 선에 닿을때 매도진입하며,
2) 단! 시초가와 그 이평선의 이격이 0.5 포인트 이내일 때만 진입시킵니다
첨부 이미지로 예를들면, 시초가(초록색) 위에 위치하며 시초가와 가장 근접한 이평선(분홍색)에 도달하면 매도 진입을 하게 만들고 싶습니다.
감사합니다
2020-04-30
1102
글번호 138531
답변완료
문의드립니다.
아래의 수식을 예스트레이더에서 종목검색을 하려면 어떻게 작성해야 하는지 여쭤봅니다.
a1=PVI(c);
a2=highest(avg(PVI(c),Period),224);
b1=avg(PVI(c),Period);
(a1-b1)<=(a1*0.025)
&&
a1(1)<a2
&&
pvi(c)>=highest(PVI(c),224)
&&
crossup(a1,a2)
&&
eavg(c,448)>eavg(c,224)
&&
eavg(c,224)>eavg(c,112)
&&
eavg(c,112)<c
&&
pvi(c)>=avg(pvi(c),9)
&&
nvi(c)>=avg(nvi(c),9)
and
c<=(c(1)*1.14)
입니다.
2020-04-30
1199
글번호 138530
답변완료
문의드립니다
수고하십니다
1, 일목균형표에서 "기준선"이 "캔들"과 만났을때 음성신호 발생수식좀 부탁드립니다 (야래수식1)
2, 아래 수식에서 지표속성창에서 색채우기를 할때... (아래수식2)
국선챠트에서는 잘 적용이 되는데 옵션챠트에서는 안되네요
뭔가 수식의 수정이 필요한것인지?
혹은 설정방법을 달리해야하는것인지 문의 드립니다
3, 아래 수식을 적용시... (아래수식3)
data1과 data2로 교차챠트를 만들어서 각각 임의의 콜풋행사가를 적용하여보면 행사가에 따라서
선의 발생개수가 달라집니다
즉, 선이 2개모두 발생하는 경우와 1개발생, 혹은 아예 발생이 안되는 경우도 있습니다
(1) 이 지표상 2개의선이 모두 발생될수있는 조건이 무엇인지요?
수고스러우시겠지만 자세한 설명 부탁드립니다
(2) 어떤 행사가를 적용하더라도 모든경우에 다 2개의선이 발생되는 수식으로 수정가능하다면 부탁드리겠습니다
감사합니다!!!
-------------------------------------------------------------------------------------
(수식 1)
Inputs: TurnLen(9), StdLen(26), PrdLen(52);
Variables: 기준선(0), 전환선(0), 후행스팬(0), 선행스팬1(0), 선행스팬2(0);
전환선 = (Highest(High, TurnLen) + Lowest(Low, TurnLen)) / 2;
기준선 = (Highest(High, StdLen) + Lowest(Low, StdLen)) / 2;
후행스팬 = Close ;
선행스팬1 = (전환선 + 기준선) / 2 ;
선행스팬2 = (Highest(High, PrdLen) + Lowest(Low, PrdLen)) / 2;
Plot1(전환선, "전환선");
Plot2(기준선, "기준선");
Plot3(후행스팬, "후행스팬");
Plot4(선행스팬1,"선행스팬1");
Plot5(선행스팬2, "선행스팬2");
(수식 2)
input : 기간(20),k(0.03);
var1 = highest(H,기간)[1];
var11 = var1*(1+k/100);
var2 = lowest(L,기간)[1];
var22 = var2*(1+k/100);
plot1(var1,"고점");
plot2(var11,"고점+k%");
plot3(var2,"저점");
plot4(var22,"저점+k%");
(수식 3)
input : N(5);
var : cond1(false,data1),cond2(false,data1);
var : V1(0,data1),V2(0,data1);
if data1(Bdate != bdate[1]) Then
{
cond1 = false;
cond2 = false;
}
if abs(data1(highD(0))-data2(highD(0))) <= PriceScale*N Then
{
cond1 = true;
v1 = data1(highD(0));
}
if abs(data1(LowD(0))-data2(LowD(0))) <= PriceScale*N Then
{
cond2 = true;
v2 = data1(LowD(0));
}
if Cond1 == true Then
plot1(V1);
if Cond2 == true Then
plot2(V2);
2020-05-04
1190
글번호 138529
답변완료
문의드립니다.
지표를 당일차트에만 나타낼때,
보통 지표 Plot1 등의앞에,
If Currentdate == sdate Then
이것을 사용하고
그 다음에 Plot1 등을 이어가면 "당일차트"에만 지표가 나타나는걸로 알고 있습니다.
그러면 이것과 같이,
혹시
1) 이번주(당주)
2) 그리고 이번달(당월)에만 나타내게 하는 방법이 있을까요?
2020-04-30
1053
글번호 138528
답변완료
문의 드립니다.
해외선물 240분봉의 고가 5 이평과 저가 5 이평을
5분봉에 넣고 싶습니다.
감사합니다.
2020-04-30
1007
글번호 138527
답변완료
문의드립니다
안녕하세요?
아래수식의 매수나매도 신호발생시 신호발생봉에 지표수식의 plot3 또는 plot4 와 동시에발생하는 봉에서만 신호가 발생하도록 조건문을 추가하고 싶습니다
도움주셔서 감사합니다
1.
Input : af1(0.02), maxAF1(0.2),af2(0.35), maxAF2(0.2);
Var : V1(0),V2(0);
V1 = Sar(af1,maxAF1);
V2 = Sar(af2,maxAF2);
if crossup(c,v1) and crossup(C,v2) Then
Buy();
If CrossDown(c,v1) and CrossDown(c,v2) Then
Sell();
2.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Condition1 = Highest(H,length) == H and lastHiVal <> H;
Condition2 = Lowest(L,length) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Plot3(H,"점1",MAGENTA);
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Plot4(H,"점2",CYAN);
}
}
}
2020-05-05
867
글번호 138526