커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1819
글번호 230811
답변완료
미체결시 처리에 대한 질의
1. 미체결이 발생하면 시스템에서는 포지션 신호가 존재하는데
나중에 청산 신호가 나오면 잔고가 없는데 어찌되나요?
파생의 경우 매수신호인데 청산신호 나오면 매도 진입이 새로 되는건가요?
만약 현물같은 경우 청산신호 나오면 그냥 신호만 소멸되는 건가요?
2. 미체결시 시스템의 포지션 신호를 없애주고 싶은데 이렇게 하면 되나요?
예)
if 조건 then Buy("매수",atmarket,진입수량);
AccoundNum = getAccount(0);
Symbol = GetPositionSymbol(1,AccoundNum);
Quantity = GetPositionQuantity(Symbol,AccoundNum);
if 진입수량 != Quantity then Exitlong("청산",atmarket);
2022-03-11
1099
글번호 157084
답변완료
문의드립니다.
안녕하세요.
특정주기의 양봉종가, 음봉종가 평균으로 지표를 그리려고 합니다.
작성해 봤는데 생각한데로 안되네요.. 수정부탁드립니다.
input : N(5);
Condition1 = (C > O) or (C == O and C >= C[1]);
var1 = AccumN(IFf(Condition1 == true,C,0),N);
var2 = AccumN(IFf(Condition1 == False,C,0),N);
Var3 = CountIf(Condition1 == true,N);
Var4 = CountIf(Condition1 == False,N);
Var5 = var1/Var3;
var6 = Var2/Var4;
Plot1(Var5, "N개봉양봉종가",RED);
Plot2(Var6, "N개봉음봉종가",BLUE);
2022-03-11
1139
글번호 157079
답변완료
문의 드립니다
예스 트레이더에서 신호를 받아서 예스스팟으로 옵션 매매를 하려고하는데
참고할 만한 자료가 있을까요?
감사합니다
2022-03-11
1168
글번호 157078
답변완료
시스템식 문의 드립니다.
위의 그림을 보면 본탈 이후에
다음날 날짜도 지났고 조건도 만족하기 때문에
매수라고 동그라미 쳐진 부분에서 매수가 진행이 되어야 하는데
매수가 진행이 안되었습니다.
아마도 밑에 그림에서 보시다시피 다시 entry에 false가 할당되어서
진행이 안된것 같은데
나름 본탈이후에 당일에만 추가진입을 하지 않기위해서
nextbarsdate == sdate를 넣었는데..
해당식으로는 적용이 안되는것 같습니다.
혹시 몰라서 sdate >= entrydate도 작성해서 시스템적용해봤는데...
적용이 안됩니다. ...ㅜ.ㅜ
혹시 몰라 지금까지 작성된 시스템식 올려봅니다.
--------------------------------------------------------------------------
input :금액1(500000),상한가(36500),손절금액(300000),N(3);
input : 익절(3),익절2(1);
var : cnt(0),sum(0),mav(0),DD(0);
var : day(0),entry(False),AP(0),TT(0);
var : LL(0),RR(0),rate(0);
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N)*1;
if Bdate != Bdate[1] Then
Condition1 = False;
entry = True;
if sTime > 120000 and C[0] >= DayClose(1)*1.265 Then
Condition1 = true;
if NextBarSdate == sDate and (LatestExitName(1) == "손절" or LatestExitName(1) == "본탈" or LatestEntryName(0) == "S1(NEXT)") Then
entry = False;
#여기서 부터 매수하기.
if NextBarSdate == sDate and entry == true and (MarketPosition == 0 or (MarketPosition == 1 and sDate == EntryDate)) Then
{
if condition1 == true OR LatestExitName(1) == "4%익절" Then
Buy("상한가매수",AtStop,상한가,Floor(금액1/min(NextBarOpen,상한가)));
if condition1 == true and IsEntryName("상한가매수") == true Then
Buy("BS1(상풀)",AtLimit,상한가*0.955,Floor(금액1/min(NextBarOpen,상한가*0.955)));
if condition1 == true Then
Buy("BS1",AtLimit,Dayclose(1)*1.235,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.235)));
if condition1 == true and LatestEntryName(0) == "BS1" Then
Buy("S1",AtLimit,Dayclose(1)*1.19,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.19)));
if condition1 == true and IsEntryName("BS1") == true and sTime == 150800 Then
Buy("3시10분매수(1-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151300 Then
Buy("3시15분매수(1-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151700 Then
Buy("3시19분매수(1-3)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and MarketPosition == 0 and sTime == 150800 Then
Buy("3시10분매수(2-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151300 Then
Buy("3시15분매수(2-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151700 Then
Buy("3시19분매수(2-3)",AtMarket,floor(금액1/nextbaropen));
if MarketPosition == 1 and day >=2 and DayOpen*1.04>=DayHigh Then
Buy("S1(NEXT)",AtLimit,DayHigh*0.92,Floor(금액1/min(NextBarOpen,DayHigh*0.92)));
}
if MarketPosition == 1 and sdate >= EntryDate+1 and L > mav Then
Buy("담날추매",AtLimit,mav,Floor(금액1/min(NextBarOpen,mav)));
#여기서 부터 매도하기.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" and LatestEntryName(0) != "S1(NEXT)" and LatestEntryName(0) != "BS1(상풀)") Then
{
if LL == 0 then
LL = L;
Else
{
if L < LL then
LL = L;
}
RR = (LL-AVGEntryPrice)/AVGEntryPrice*100;
if RR >= -0.9 Then
Rate = 익절;
if RR >= -2.9 and RR < -0.9 Then
Rate = (익절+RR);
if RR < -2.9 Then
Rate = 0.3;
ExitLong("3%익절",AtLimit,AVGEntryPrice*(1+Rate/100),"",Floor(MaxContracts*0.5));
ExitLong("4%익절",AtLimit,AVGEntryPrice*(1.01+Rate/100));
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 3%, 4% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
{
ExitLong("본탈",AtLimit,AVGEntryPrice*1.005);
}
#----------------------------------------------------------------------------
# 0.3%, 1% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
if sdate >= EntryDate+1 and sTime == 100000 Then
{
ExitLong("다음날 10시청산");
}
#----------------------------------------------------------------------------
# 다음날 10시 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
ExitLong("손절",AtStop,AvgEntryPrice-손절금액/CurrentContracts);
#----------------------------------------------------------------------------
# 손절
2022-03-11
1380
글번호 157077
답변완료
지표 수식 작성 부탁드립니다.
담당자님, 안녕하세요.
담당자님께서 지표를 잘 작성해주셨는데,
적용조건을 변경한 수식으로 수정하고자
담당자님께 부탁드립니다.
잘 작성해주신 지표로
계속 번거롭게 해드려 정말 죄송합니다.
수식작성 Q&A 76306번 지표(하단에 기재된 기존 수식)의 조건 수정입니다.
===================================================================
40일간 각 일봉 시가, 종가의 80개 가격(value) 중에서
가격(value)이 '(당일 시가 - 5.0)~(당일 시가 + 5.0)'의 범위 내에 있으면서 (-> 기존과 동일한 조건)
and 그 가격(value)이 산출된 일봉의 날짜가 당일로 부터 가까운 순서대로 (-> 수정된 조건)
최근 일자의 5개 가격(value)을 선정
======================================================================
위와 같이 기존 수식의 조건을 변경한 지표의 수정을 부탁드립니다.
조건을 수정하여 요청드린 점 죄송하게 생각합니다.
이제 가급적 지표 수정을 마무리 하겠습니다.
다시 한번 지표 작성에 대해 미리 감사드립니다.
일교차가 심한데 건강 챙기시기 바랍니다
<기존의 지표 수식>
( Q&A 76306번에 대한 답변에서담당자님께서 작성해주신 수식)
==========================================================
==========================================================
input : N(40),nth(5),y(5);
var : cnt(0),nthi(0);
Var : tempmin(0), tempindex(0),NTHindex(0),ii(0);
Array : value[200](0),diff[200](0), NTHVALUE[10](0);
if Bdate != Bdate[1] Then
{
ii = 0;
For cnt = 1 to N
{
ii = ii+1;
value[ii] = DayOpen(cnt);
diff[ii] = abs(value[ii]-DayOpen(0));
ii = ii+1;
value[ii] = DayClose(cnt);
diff[ii] = abs(value[ii]-DayOpen(0));
}
For nthi = 1 to nth
{
tempMin = 99999999;
tempIndex = -1;
For cnt = 1 to N*2
{
if diff[cnt] < tempmin and diff[cnt] < y then
{
tempmin = diff[cnt];
tempIndex = cnt;
}
}
if tempIndex != -1 Then
{
NTHVALUE[nthi] = value[tempIndex];
diff[tempIndex] = 99999999;
}
Else
{
NTHVALUE[nthi] = Nan;
}
}
}
plot1(NTHVALUE[1]);
plot2(NTHVALUE[2]);
plot3(NTHVALUE[3]);
plot4(NTHVALUE[4]);
plot5(NTHVALUE[5]);
===================================================================
2022-03-11
1131
글번호 157076
답변완료
문의
아래 수식 해석 달아 주시기 바랍니다.
********************************************************************************
1) buy 수식
input:레인지(7.8),고(0.00),저(1.6),돌파틱(2);
if h == DayHigh Then
Condition1 = False;
else
{
if L <= DayHigh-고 Then
Condition1 = true;
if L < DayHigh-저 Then
Condition1 = False;
}
if MarketPosition <= 0 and NextBarSdate == sDate and
DayHigh-DayLow < 레인지 and Condition1 == true Then
Buy("b",AtStop,DayHigh(0)+PriceScale*돌파틱);
2) sell 수식
input : 레인지(7.8),고(1.00),저(0),돌파틱(1);
if l == DayLow Then
Condition1 = False;
else
{
if H <= DayLow+고 Then
Condition1 = true;
if H < DayLow+저 Then
Condition1 = False;
}
if MarketPosition >= 0 and NextBarSdate == sDate and
DayHigh-DayLow < 레인지 and Condition1 == true Then
Sell("s",AtStop,DayLow(0)-PriceScale*돌파틱);
2022-03-10
1012
글번호 157075
회원 님에 의해서 삭제되었습니다.
2022-03-10
78
글번호 157073
답변완료
76314 수식 수정 부탁드립니다
1.
전일과 분리되어 당일 부터 시작되는 종가 파라볼릭 차트에서
파라볼릭 양전환시 파라볼릭 음전환 상태의 바닥과 직전 파라볼릭 음전환 상태의 바닥 연결선 표시
파라볼릭 음전환시 파라볼릭 양전환 상태의 천정과 직전 파라볼릭 양전환 상태의 천정 연결선 표시
2.
전일과 연속되어 진행되는 종가 파라볼릭 차트에서
파라볼릭 양전환시 파라볼릭 음전환 상태의 바닥과 직전 파라볼릭 음전환 상태의 바닥 연결선 표시
파라볼릭 음전환시 파라볼릭 양전환 상태의 천정과 직전 파라볼릭 양전환 상태의 천정 연결선 표시
감사합니다
***********************************************************************************
안녕하세요
예스스탁입니다.
1
Input : AF(0.02), AFMAX(0.2);
Var : Direction(0), SAR_Value(Close), AF_Value(.02), HighValue(High), LowValue(Low), EP(0),CSarv(0);
var : hd(0),ht(0),ld(0),lt(0),TL(0);
if Index == 0 or (Bdate != Bdate[1]) Then
{
Direction = 0;
SAR_Value = C;
AF_Value = 0.02;
HighValue = H;
LowValue = L;
EP = 0;
}
if EP != 0 Then
{
if Direction == 1 then
{
EP = HighValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if High > HighValue then
{
HighValue = High;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if Close < SAR_Value then
{
Direction = -1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
LowValue = low;
}
}
else
{
EP = LowValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if Low < LowValue then
{
LowValue = Low;
AF_Value = AF_Value + Af;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if Close > SAR_Value then
{
Direction = 1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
HighValue = High;
}
}
CSarv = SAR_Value;
}
else
{
if SAR_Value != 0 && EP == 0 then
{
if Direction == 1 then
{
EP = HighValue;
AF_Value = AF;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if High > HighValue then
{
HighValue = High;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
else
{
EP = LowValue;
AF_Value = Af;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if Low < LowValue then
{
LowValue = Low;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
CSarv = SAR_Value;
}
else
{
if Direction == 0 then
{
if Close > Close[1] then Direction = 1;
else
if Close < Close[1] then Direction = -1;
}
else
{
if Direction == 1 then
{
if Close < Close[1] then
{
Direction = -1;
SAR_Value = HighValue;
CSarv = SAR_Value;
}
}
if Direction == -1 then
{
if Close > Close[1] then
{
Direction = 1;
SAR_Value = LowValue;
CSarv = SAR_Value;
}
}
}
LowValue = min(Low, LowValue);
HighValue = max(High, HighValue);
}
}
var : hh(0),ll(0),t(0);
if CrossUp(C,CSarv) Then
{
t = 1;
hh = h;
hd = sDate;
ht = sTime;
if ll > 0 Then
{
TL = TL_New(ld,lt,ll,hd,ht,hh);
TL_SetColor(tl,RED);
}
}
if CrossDown(C,CSarv) Then
{
t = -1;
ll = l;
ld = sDate;
lt = sTime;
if hh > 0 Then
{
TL = TL_New(hd,ht,hh,ld,lt,ll);
TL_SetColor(tl,BLUE);
}
}
if t == 1 Then
{
if hh > 0 and h > hh Then
{
hh = h;
hd = sDate;
ht = sTime;
TL_SetEnd(tl,hd,ht,hh);
}
}
if t == -1 Then
{
if ll > 0 and l < ll Then
{
ll = l;
ld = sDate;
lt = sTime;
TL_SetEnd(tl,ld,lt,ll);
}
}
Plot1(CSarv,"CSar",IFf(c>CSarv,RED,BLUE));
2
Input : AF(0.02), AFMAX(0.2);
Var : CSarv(0);
var : hd(0),ht(0),ld(0),lt(0),TL(0);
CSarv = sar(af,afmax);
var : hh(0),ll(0),t(0);
if CrossUp(C,CSarv) Then
{
t = 1;
hh = h;
hd = sDate;
ht = sTime;
if ll > 0 Then
{
TL = TL_New(ld,lt,ll,hd,ht,hh);
TL_SetColor(tl,RED);
}
}
if CrossDown(C,CSarv) Then
{
t = -1;
ll = l;
ld = sDate;
lt = sTime;
if hh > 0 Then
{
TL = TL_New(hd,ht,hh,ld,lt,ll);
TL_SetColor(tl,BLUE);
}
}
if t == 1 Then
{
if hh > 0 and h > hh Then
{
hh = h;
hd = sDate;
ht = sTime;
TL_SetEnd(tl,hd,ht,hh);
}
}
if t == -1 Then
{
if ll > 0 and l < ll Then
{
ll = l;
ld = sDate;
lt = sTime;
TL_SetEnd(tl,ld,lt,ll);
}
}
Plot1(CSarv,"CSar",IFf(c>CSarv,RED,BLUE));
즐거운 하루되세요
> 유튜버 님이 쓴 글입니다.
> 제목 : 지표 질문입니다
> 1.
전일과 분리되어 당일 부터 시작되는 종가 파라볼릭 차트에서
파라볼릭 양전환시 파라볼릭 음전환 상태의 바닥과 파라볼릭 양전환 상태의 천정 연결선 표시
파라볼릭 음전환시 파라볼릭 양전환 상태의 천정과 파라볼릭 음전환 상태의 바닥 연결선 표시
2.
전일과 연속되어 진행되는 종가 파라볼릭 차트에서
파라볼릭 양전환시 파라볼릭 음전환 상태의 바닥과 파라볼릭 양전환 상태의 천정 연결선 표시
파라볼릭 음전환시 파라볼릭 양전환 상태의 천정과 파라볼릭 음전환 상태의 바닥 연결선 표시
감사합니다
2022-03-10
780
글번호 157072
답변완료
검토 부탁드립니다.
다음 1.은 항생, 골드, 나스닥 등 붙, 틱챠트에서
전일 14:30분부터 장시작과 함께 시가를 기준으로 타주기(일봉) 3일선을 긋는 지표입니다. 맞는지 검토를 부탁드리며 혹시 정규장 외는 제외하는 것이 가능한지요?
다음 2는
역시 해외선물 시고저종중 가격을 장시작과 함께 표기하는 것입니다.
그런데 각 라인들이 시가기준이 아닌 듯 합니다.
검토를 부탁드립니다.
감사합니다.
1.
=================
input : p(3),굵기(5),R(102),G(102),B(102);
var : cnt(0),sum(0),mav(0);
var : TL1(0),TL2(0),TL3(0),TL4(0);
sum = DayOpen(0);
if P >= 3 Then
{
For cnt = 1 to P-1
{
sum = sum + DayClose(cnt);
}
}
mav = sum/P;
if Index == 0 or (sTime >= 143000 and sTime[1] < 143000) Then
{
var1 = sDate;
Var2 = stime;
}
if Bdate != Bdate[1] Then
{
if var1 > 0 and Var2 > 0 Then
{
TL1 = TL_New(var1,Var2,mav,sDate,sTime,mav);
TL_SetColor(TL1,RGB(R,G,B));
TL_SetSize(TL1, 굵기);
}
}
Else
{
if sTime < 113000 Then
{
TL_SetBegin(TL1,var1,Var2,mav);
TL_SetEnd(TL1,sDate,sTime,mav);
}
}
2.==================
input : 색상1(green),색상2(RED),색상3(BLUE),색상4(BLACK),색상5(cyan);
input : 굵기1(0),굵기2(0),굵기3(0),굵기4(0),굵기5(5);
input : 폰트크기1(12),폰트크기2(12),폰트크기3(12),폰트크기4(12),폰트크기5(12);
var : TL1(0),TL2(0),TL3(0),TL4(0),TL5(0);
var : Tx1(0),Tx2(0),Tx3(0),Tx4(0),Tx5(0);
if Index == 0 or (sTime >= 153000 and sTime[1] < 153000) Then
{
var1 = sDate;
Var2 = stime;
}
if Bdate != Bdate[1] Then
{
if var1 > 0 and Var2 > 0 Then
{
TL1 = TL_New(var1,Var2,DayOpen(0),sDate,sTime,Dayopen(0));
TL2 = TL_New(var1,Var2,DayHigh(1),sDate,sTime,DayHigh(1));
TL3 = TL_New(var1,Var2,DayLow(1),sDate,sTime,DayLow(1));
TL4 = TL_New(var1,Var2,DayClose(1),sDate,sTime,DayClose(1));
TL5 = TL_New(var1,Var2,(DayHigh(1)+DayLow(1))/2,sDate,sTime,(DayHigh(1)+DayLow(1))/2);
#추세선 색상
TL_SetColor(TL1,색상1);
TL_SetColor(TL2,색상2);
TL_SetColor(TL3,색상3);
TL_SetColor(TL4,색상4);
TL_SetColor(TL5,색상5);
#추세선 굵기
TL_SetSize(TL1,굵기1);
TL_SetSize(TL2,굵기2);
TL_SetSize(TL3,굵기3);
TL_SetSize(TL4,굵기4);
TL_SetSize(TL5,굵기5);
tx1 = text_new(var1,Var2,DayOpen(0),"당일시가:"+NumToStr(DayOpen(0),2));
tx2 = text_new(var1,Var2,DayHigh(1),"전일고가:"+NumToStr(DayHigh(1),2));
tx3 = text_new(var1,Var2,DayLow(1),"전일저가:"+NumToStr(DayLow(1),2));
tx4 = text_new(var1,Var2,DayClose(1),"전일종가:"+NumToStr(DayClose(1),2));
tx5 = text_new(var1,Var2,(DayHigh(1)+DayLow(1))/2,"전일중심:"+NumToStr((DayHigh(1)+DayLow(1))/2,2));
#텍스트 색상
text_SetColor(tx1,색상1);
text_SetColor(tx2,색상2);
text_SetColor(tx3,색상3);
text_SetColor(tx4,색상4);
text_SetColor(tx5,색상5);
#텍스트 크기
Text_SetSize(Tx1,폰트크기1);
Text_SetSize(Tx2,폰트크기2);
Text_SetSize(Tx3,폰트크기3);
Text_SetSize(Tx4,폰트크기4);
Text_SetSize(Tx5,폰트크기5);
}
}
Else
{
if sTime < 093000 Then
{
TL_SetEnd(TL1,sDate,sTime,DayOpen(0));
TL_SetEnd(TL2,sDate,sTime,DayHigh(1));
TL_SetEnd(TL3,sDate,sTime,DayLow(1));
TL_SetEnd(TL4,sDate,sTime,DayClose(1));
TL_SetEnd(TL5,sDate,sTime,(DayHigh(1)+DayLow(1))/2);
}
}
2022-03-10
1059
글번호 157065