커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5551
글번호 230811
답변완료
거래비용 차감
아래 수익차트에서 거래 비용을 차감 한 수익차트의 완성을 부탁합니다.
거래비용 : 매수/매도 1.58 p
슬리피지 5.00 p
input : L1(5),L2(20);
var : T(0),BE(0),SE(0),sumPL(0),PL(0),total(0);
var1 = LRL(c,L1);
Var2 = LRL(c,L2);
Condition1 = Var2[0] > Var2[1];
Condition2 = Var2[0] < Var2[1];
If T <= 0 and var1 > Var2 and Condition1 == true Then
{
T = 1;
BE = C;
if SE > 0 Then
SumPL = SumPL + (SE-C);
}
If T >= 0 and var1 < var2 and Condition2 == true Then
{
T = -1;
SE = C;
if BE > 0 Then
SumPL = SumPL + (C-BE);
}
if T == 1 Then
pl = C-BE;
if T == -1 Then
pl = SE-C;
total = SumPL+pl;
Plot1(total);
PlotBaseLine1(0);
2023-04-08
1361
글번호 168020
답변완료
수식 문의
알려주신 아래 수식으로 종목검색을 해봤는데
종목이 하나도 안나와요 ㅜ
뭐가 잘못된 걸까요 ㅜ
input : 기간(88),Per(0.05);
var : cnt(0);
Array : R[10](0),S[10](0);
if SwingHigh(1,H,기간,기간,기간*2+1) != -1 Then
{
for cnt = 9 DownTo 1
{
R[cnt] = R[cnt-1];
}
R[0] = H[기간];
}
if SwingLow(1,L,기간,기간,기간*2+1) != -1 Then
{
for cnt = 9 DownTo 1
{
S[cnt] = S[cnt-1];
}
S[0] = L[기간];
}
Condition1 = False;
Condition2 = False;
For cnt = 0 to 9
{
if R[cnt] > 0 and C <= R[cnt]*(1+per/100) and C >= R[cnt]*(1-per/100) Then
Condition1 = true;
if S[cnt] > 0 and C <= S[cnt]*(1+per/100) and C >= s[cnt]*(1-per/100) Then
Condition2 = true;
}
if Condition1 == true or Condition2 == true Then
Find(1);
2023-04-08
892
글번호 168019
답변완료
질문드립니다!
손절을 분할로 손절하게 해주세요
진입은 100선>=200선
매도는 플러스 5퍼일때 전량매도
손절은 예를들어
진입가대비 -1퍼일때 전체 비중의 30퍼
진입가대비 -2퍼일때 전체 비중의 30퍼
진입가대비 -3퍼일때 전체 비중의 40퍼
이렇게 되도록 부탁드립니다.
단 손절 비중의 퍼센트는 input에서 설정가능 하도록 부탁드립니다.
2023-04-08
1083
글번호 168018
답변완료
문의 드립니다!
안녕하세요!
첨부수식에서 아래와같은 조건이 만족시 다음과같은 지표가 발생토록 수정 부탁드립니다
<조 건>
1, plot1 이 data1과 data2를 만났을 경우와
2, plot2 가 data1과 data2를 만났을때 경우에 각각 아래의 지표가 발생토록 부탁드립니다
1, 우선 plot1과 plot2선의 시초 발생시점을 N봉후에 발생되도록 수정(예:장시작후 2번째 봉부터 가로선이 발생)
2, 위의 <조건>이 만족시 각각 세로선과 알람신호가 동시에 발생토록 수정
* 이 세로선과 알람신호도 N봉전(예;3봉전)에 발생 가능토록 하여주시고
* 세로선은 두께와 색상지정이 가능토록 부탁합니다
감사합니다!
------------------------------------------------------------------------------
var : TL1(0,data1),TL2(0,data1),TL3(0,data1),TL4(0,data1);
var : diff(0,data1),hh(0,data1),ll(0,data1);
diff = data1(c)-data2(c);
if bdate != bdate[1] Then
{
hh = diff;
ll = diff;
TL_Delete(TL1);
TL_Delete(TL2);
TL1 = TL_New(sdate,stime,H,NextBarSdate,NextBarStime,H);
TL2 = TL_New(sdate,stime,L,NextBarSdate,NextBarStime,L);
TL_Delete(TL3);
TL_Delete(TL4);
TL3 = TL_New(sdate,stime,H,Sdate,Stime,H);
TL4 = TL_New(sdate,stime,L,Sdate,Stime,L);
}
else
{
if diff > hh Then
{
hh = diff;
TL_SetBegin(TL3,sdate,stime,TL_GetValue(TL1,sdate,stime));
TL_Setend(TL3,NextBarSdate,NextBarStime,TL_GetValue(TL1,sdate,stime));
TL_SetBegin(TL1,sdate,stime,h);
TL_Setend(TL1,NextBarSdate,NextBarStime,h);
}
if diff < ll Then
{
ll = diff;
TL_SetBegin(TL4,sdate,stime,TL_GetValue(TL2,sdate,stime));
TL_Setend(TL4,NextBarSdate,NextBarStime,TL_GetValue(TL2,sdate,stime));
TL_SetBegin(TL2,sdate,stime,l);
TL_Setend(TL2,NextBarSdate,NextBarStime,l);
}
}
plot1(hh,"최고건수차",Magenta);
plot2(ll,"최저건수차",Magenta);
2023-04-08
1157
글번호 168017
러블리 님에 의해서 삭제되었습니다.
2023-04-07
12
글번호 168016
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
질문사항
시스템식에서 주문함수 exitlong(),exitshort()와
SetStopProfittarget()와 Setstoploss()를 같이 사용하고 싶습니다.
보통 주문청산을 사용할때는 exitlong(),exitshort()를 중간에 주문청산시 사용하고
코딩 맨 마지막에는 SetStopProfittarget()와 Setstoploss()를 사용합니다.
저는 SetStopProfittarget()와 Setstoploss()를 중간에도 사용하고
필요시 2번 이상도 사용하고 싶습니다.
그래서 아래와 같이 코딩해 보았는데 잘 되지 않는것 같습니다.
도움 부탁드립니다.
input : 틱사이즈(0.01) ;
var : 이평(0) ;
이평 = ma(C,20) ;
f marketposition == 0 and C > 이평 then
{
Buy("b1",OnClose,DEf,amt);
매수가격 = EntryPrice(0) ;
}
if MarketPosition == 1 Then
{
if MaxEntries(0) == 1 then
Buy("b2",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 2 Then
Buy("b3",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 3 Then
Buy("b4",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 4 Then
Buy("b5",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 5 Then
Buy("b6",AtLimit,매수가격-10*pricescal*MaxEntries,1);
# 청산 1
Exitlong("BP",AtLimit,AvgEntryPrice+10*PriceScale) ;
# 청산 2
if OpenPositionProfit/틱사이즈 > 10*PriceScale Then
ExitLong("bx",AtLimit,c+10*PriceScale);
# 청산 3-1
if MaxEntries() >= 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
SetStopProfittarget(0);
# 청산 3-2
if MaxEntries() < 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
SetStopProfittarget(0);
}
# 청산 4
SetStopProfittarget(50*PriceScale,PointStop);
위와 같이 청산 코딩을 4개로 할 경우 문제(청산이 안되거나)가 되는 부분이나
논리적으로 잘못된 부분이 있으시면 수정 부탁드립니다.
제가 하고자 하는 청산은 아래와 같습니다.
청산 1 : 가격이 하락하여 다계약 진입한 경우 진입 평균가보다 10틱 위에서 청산
청산 2 : 가격이 하락하여 다계약 진입한 경우 다계약의 현재 포지션 총수익 10틱 이상인 경우 현재가에서 10틱 위에서 청산
청산 3 : 총 3회 이상 진입한 경우 3번째 진입부터는 10틱 이상 수익시 개별 청산
3회 미만은 평균가보다 10틱 이상 또는현재 총수익이 10틱 이상인 경우 청산
또는
총 3회 미만 진입한 경우는 10틱 이상 수익시 개별 청산하고
3회 이상부터는 평균가 보다 10틱 이상 또는 총수익이 10틱 이상인 경우 청산
청산 4 : 1계약 진입후 가격이 지속 상승한 경우 50틱에서 청산(익절)
도움 부탁드립니다.
감사합니다.
2023-04-07
1550
글번호 168015
답변완료
수익차트(기간별 누적수익) - 81606 답변 수정요청
81606 지표식 보완 부탁 드립니다.
누적수익이 답변주신 지표와 전혀 일치하지 안네요.
예스글러벌 시스템성능보고서의 수익차트그래프(기간별누적수익)와 같이
그래프 상 정확히 반영 되도록 지표 식을 작성해 주시면 감사드립니다.
그리고 No1 식은 하나의 var2 곡선 뿐 입니다. 참조 바랍니다.
2023-04-07
2071
글번호 168010
답변완료
문의 드립니다.
매매을 원하는 시간을 지정할 수 있도록 추가 부탁드립니다.
var1 = BollBandUp(20,2);
Var2 = BollBandDown(20,2);
if CrossUp(c,var1) and C > (DayHigh+DayLow)/2 Then
Buy();
if CrossDown(c,var1) Then
ExitLong();
if CrossDown(c,var2) and C < (DayHigh+DayLow)/2 Then
Sell();
if CrossUp(c,var2) Then
ExitShort();
2023-04-07
2306
글번호 168004
답변완료
트렌드 쌍바닥 시간대
inputs: ATRLength(15), Strength(20);
input : 쌍바닥상(2),쌍바닥하(2);
var : STrend(0),ATRv(0), avgv(0), dnv(0), upv(0), trend(1), flag(0), flagh(0), ST(0),hl(0);
var : idx(0),hh(0),ll(0),EP1(0),EP2(0);
var : ema1(0),ema2(0),ema3(0),h1(0),l1(0);
Ep1 = 2/(ATRLength+1);
Ep2 = 2/(Strength+1);
idx = idx+1;
if idx < ATRLength Then
{
hh = DayHigh;
ll = daylow;
}
Else
{
hh = Highest(High, ATRLength);
ll = Lowest(Low, ATRLength);
}
if idx < Strength Then
{
h1 = DayHigh;
l1 = daylow;
}
Else
{
h1 = Highest(High, Strength);
l1 = Lowest(Low, Strength);
}
hl = hh-ll;
if idx == 1 Then
{
ema1 = hl;
ema2 = h;
ema3 = l;
}
Else
{
ema1 = hl * EP1 + ema1 * (1-EP1);
ema2 = h * EP2 + ema2 * (1-EP2);
ema3 = l * EP2 + ema3 * (1-EP2);
}
atrv = ema1;
avgv = (ema2+ema3)/2;
upv = avgv + ATRv;
dnv = avgv - ATRv;
if idx >= 2 then
{
if c > upv[1] and c > h1[1] then trend = 1;
else if c < dnv[1] and c < l1[1] then trend = -1;
if trend < 0 and trend[1] > 0 then flag=1; else flag=0;
if trend > 0 and trend[1] < 0 then flagh = 1; else flagh = 0;
if trend > 0 and dnv < dnv[1] then dnv=dnv[1];
if trend < 0 and upv > upv[1] then upv=upv[1];
if flag == 1 then upv = avgv + ATRv;
if flagh == 1 then dnv = avgv - ATRv;
if trend == 1 then ST = dnv; else ST = upv;
STrend = trend;
}
if Trend != Trend[1] Then
{
if Trend == 1 Then
{
var1 = h;
var2 = var1[1];
if st<dayhigh-0.7 and Var4 > 0 and var3 <= Var4+PriceScale*쌍바닥상 and var3 >= Var4-PriceScale*쌍바닥하 Then
{
Buy("b");
}
}
Else
{
Var3 = l;
Var4 = Var3[1];
}
}
Else
{
if Trend == 1 Then
{
if h > var1 Then
var1 = h;
}
if Trend == -1 Then
{
if l < var3 Then
var3 = l;
}
}
if MarketPosition == 1 and BarsSinceEntry == 1 Then
ExitLong("bx");
당일 고점 -0.7p 아래에서 매수 부분을, 시초부터 9시30분까지는 고점 관계없이 무조건 매수하고, 9시30분 이후부터만(장 종료시까지) 고점 -0.7p 아래에서 매수로 수정 부탁합니다.
2023-04-07
1527
글번호 168001