커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6567
글번호 230811
답변완료
합성요청
메뉴의 '시스템합성관리자'가 아닌 함수를 통해서
시스템A와 시스템B를 다음의 청산 조건을 추가하여
하나의 시스템으로 만들고 싶습니다.
- 청산조건(시스템A와 시스템B에 모두 적용) : 손절매 : 0.5%
목표수익 : 1%
최소가격변화 : 0.5%, 10봉이내
- 시스템A
var : entry(0);
if bdate != bdate[1] Then
entry = 0;
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
var : ho(0),OL(0),HL(0);
var : maho(0),maOL(0),maHL(0);
var : cnt(0),sumho(0),sumOL(0),sumHL(0);
var : EntryCnt(0);
ho = Dayhigh-Dayopen;
OL = DayOpen-DayLow;
HL = DayHigh-DayLow;
sumho = 0;
sumOL = 0;
sumHL = 0;
for cnt = 1 to 10{
sumho = sumho + (dayhigh(cnt)-dayopen(cnt));
sumOL = sumOL + (DayOpen(cnt)-DayLow(cnt));
sumHL = sumHL + (DayHigh(cnt)-DayLow(cnt));
}
maho = sumho/10;
maOL = sumOL/10;
maHL = sumHL/10;
var1 = dayopen(0)+maho;
var2 = DayOpen(0)-maOL;
var3 = DayOpen(0)+maHL;
var4 = DayOpen(0)-maHL;
var5 = NthMaxList(1,var1,var2,var3,var4);
var6 = NthMaxList(2,var1,var2,var3,var4);
var9 = NthMaxList(3,var1,var2,var3,var4);
var10 = NthMaxList(4,var1,var2,var3,var4);
var7 = (var5+var10)/3;
var8 = (var6+var9)/3;
if MarketPosition == 0 and entry == 0 Then{
if var7 > var8 Then
sell("s1",AtStop,var7);
if var7 < var8 Then
sell("s2",Atlimit,Var8);
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
ExitShort("sp1",atlimit,var9);
ExitShort("sl1",AtStop,var6);
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
ExitShort("sp2",atlimit,var9);
ExitShort("sl2",AtStop,var6);
}
- 시스템B
var : TF(0);
var : Xtime(0), Etime(false),cnt(0),mav1(0),mav2(0);
var : HV(0),LV(0),HV1(0),LV1(0),HV2(0),LV2(0);
Array : HH[50](0),LL[50](0),CC[50](0);
mav1 = ma(c,5);
mav2 = ma(C,20);
TF = TimeToMinutes(stime)%30;
if Bdate != Bdate[1] Then{
Etime = true;
if stime >= 090000 Then
Xtime = 050000;
Else
Xtime = 060000;
}
if Bdate != Bdate[1] or (TF < TF[1] and stime > stime[1]) or date != date[1] Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if HH[25+2] > 0 Then{
HV = HH[0];
LV = LL[0];
HV1 = HH[1];
LV1 = LL[1];
HV2 = HH[2];
LV2 = LL[2];
for cnt = 0 to 25{
if HH[cnt] > HV Then
HV = HH[cnt];
if LL[cnt] < LV Then
LV = LL[cnt];
if HH[cnt+1] > HV Then
HV = HH[cnt+1];
if LL[cnt+1] < LV Then
LV = LL[cnt+1];
if HH[cnt+2] > HV Then
HV = HH[cnt+2];
if LL[cnt+2] < LV Then
LV = LL[cnt+2];
}
var1 = (HV+LV)/3;
var2 = (HV1+LV1)/3;
var3 = (HV2+LV2)/3;
if Etime == true then{
if MarketPosition == 0 and CC[0] > var1 and CC[1] < var2 and CC[2] < var3 and C >= daylow+0.5 Then
buy("b",AtMarket);
if MarketPosition == 1 and c <= highest(H,BarsSinceEntry)-0.5 and CrossDown(mav1,mav2) Then
ExitLong("bx",AtMarket);
}
}
if stime == Xtime or (stime > Xtime and stime[1] < Xtime) Then{
Etime = false;
ExitLong();
}
2015-06-04
144
글번호 86780
답변완료
오류가 나오네요
input :P1(5),P2(10),P3(20),진입틱수(3),목표수익틱수(10);
var1 = ma(C,P1);
var2 = ma(C,P2);
var3 = ma(C,P3);
#정배열
if var1 > var2 and var2 > var3 and var3 > var3[1] Then
buy("b1",atlimit,var1-PriceScale*진입틱수);
#역배열
if var1 < var2 and var2 < var3 and var3 < var3[1] Then
sell("s1",atlimit,var1+PriceScale*진입틱수);
SetStopProfittarget(PriceScale*목표수익틱수,PointStop);
SetStopEndofday(150000);
위의 수식데로 했는데 검증시 오류가 나오네요. 다시한번만 검토 부탁드립니다.^^
2015-11-02
123
글번호 86778
답변완료
지표 표현 부탁드립니다
안녕하세요...
보통 볼린저밴드가 단순이평으로 종가를 기준으로 만들어져 있는것 같습니다.
그래서 볼린저밴드를 단순이평 대신 가중이평선으로도 표현하고, 또 지수이평선으로도
표현하고,
가격을 종가 대신 고가 , 저가 , 고가+저가+종가/3 등으로도 표현하게 부탁드립니다.
문의1)
볼린저밴드를 가중이평선으로 볼린저밴드를 표현 부탁드립니다.
1-1)여기에 가격을 종가 대신 (고가+저가+종가/3)으로 표현되게 합니다.
1-2)여기에 가격을 종가 대신 (저가)로 표현되게 합니다.
1-3)여기에 가격을 종가 대신 (고가)로 표현되게 합니다.
1-4)여기에 가격을 종가로 표현합니다.
문의2)
볼린저밴드를 지수이평선으로 볼린저밴드를 표현합니다
2-1)여기에 가격을 종가 대신 (고가+저가+종가/3)으로 표현되게 합니다.
2-2)가격을 종가 대신 (저가)로 표현되게 합니다.
2-3)가격을 종가 대신 (고가)로 표현되게 합니다.
2-4)가격을 종가로 표현합니다.
감사합니다.
2015-06-04
141
글번호 86772
답변완료
손실발생시 매매중지 또는 타수식 적용
손실 발생시 연속적으로 3회정도 발생됨에 따라
이후 2회는 매매 중지 또는 타식으로 진입하고 싶읍니다.
input:period(30);
var:wr(0);
wr=willr(period);
if crossup(wr,-20) then buy();
if crossdown(wr,-80) then sell();
손실발생시 매매 중지 또는
스토캐스틱 교차매매로 2회 진입하고 싶음니다.
감사합니다.
2015-06-04
137
글번호 86771
답변완료
해외선물수식 부탁드립니다.
1.시가대비 +4 (매수1진입) : 매도1진입돼 있는 것 있으면 손절(익절)과동시에 매수1진입.
시가대비 -4 (매도1진입) : 매수1진입돼 있는 것 있으면 손절(익절)과동시에 매도1진입.
2.시가대비 +24 (매수1진입) : 매도1진입돼 있는 것 있으면 손절(익절)과동시에 매수1진입.
시가대비 +16 (매도1진입) : 매수1진입돼 있는 것 있으면 손절(익절)과동시에 매도1진입.
3.시가대비 +44 (매수1진입) : 매도1진입돼 있는 것 있으면 손절(익절)과동시에 매수1진입.
시가대비 +36 (매도1진입) : 매수1진입돼 있는 것 있으면 손절(익절)과동시에 매도1진입.
4.시가대비 -24 (매도1진입) : 매수1진입돼 있는 것 있으면 손절(익절)과동시에 매수1진입.
시가대비 -16 (매수1진입) : 매도1진입돼 있는 것 있으면 손절(익절)과동시에 매도1진입.
5.시가대비 -44 (매도1진입) : 매수1진입돼 있는 것 있으면 손절(익절)과동시에 매수1진입.
시가대비 -36 (매수1진입) : 매도1진입돼 있는 것 있으면 손절(익절)과동시에 매도1진입.
1 ~ 5 번 진입신호를 하루종일 무한반복하는 수식을 만들고 싶습니다.
시가대비 지정한위치가 오면 손절이든 익절이든 처리가 되어지고 무조건 1개가 진입되게
만들고 싶습니다.
부탁드리겠습니다.
2015-06-04
149
글번호 86770
답변완료
숨기는방법
제가 쓰는 지표, 시스템 등등 편집기에서 열어보지 못하게 하는방법이 없나요?
수식을 저장해서 어디 컴퓨터든 옮겨서 쓰고 싶습니다.^^
2015-06-03
150
글번호 86769
답변완료
감사합니다.
어제 알려주신대로 하니 OpenPP문제는 감쪽같이 해결됬습니다^^
그걸 응용해서 골드일때 매수, 데드일때 매도로 리버스전략을 만들어봤는데 아무리해봐도 데이터가 틀립니다.
수정부탁드리오며, 다시금 감사합니다.
===========================================================
Input : 수량(1);
Var : MP(0),BuySellEntryPrice(0),OpenPP(0),NP(0);
If MP == 0 Then{
If CrossUp(Ma(C,5),Ma(C,20)) Then{
MP = 1;
BuySellEntryPrice = C;
}
If CrossDown(Ma(C,5),Ma(C,20)) Then{
MP = -1;
BuySellEntryPrice = C;
}
}
If MP == 1 Then{
OpenPP = (C-BuySellEntryPrice)*수량;
If CrossDown(Ma(C,5),Ma(C,20)) Then{
MP = 0;
NP = NP+OpenPP;
OpenPP = 0;
}
}
If MP == -1 Then {
OpenPP = (BuySellEntryPrice-C)*수량;
If CrossUp(Ma(C,5),Ma(C,20)) Then{
MP = 0;
NP = NP+OpenPP;
OpenPP = 0;
}
}
MessageLog("시가,%.4f,종가,%.4f,MP,%.0f,NP,%.4f,OpenPP,%.4f",open,close,MP,NP,OpenPP);
2015-06-03
135
글번호 86768
답변완료
수식 문의 드립니다.
DayLow(1) 를 쓰면, 전날의 저가를 가져오는걸로 알고있습니다.
맞는지요?
맞다면, 저 함수는 1분봉, 5분봉, 10분봉 등 상관없이, 일봉 데이터를 가져오는 것이 맞나요?
분봉을 다르게하고, 봉갯수도 다르게 하면 값이 다르게 나올수가 있는건지요...
왠지 제대로 값이 안나오는 듯해서요.. 일봉 값이 다르게 나타날 경우가 있는지요??
2015-06-03
153
글번호 86767
외환달러 님에 의해서 삭제되었습니다.
2015-06-03
8
글번호 86766