커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4366
글번호 230811
답변완료
차트소리발생
안녕하세요?
이평선의 기울기가 변하는 시점에 소리를 발생시켜주시기 바랍니다,
input : P(5);
var1 = ma(C,P);
if var1 > var1[1] Then
value1 = 1;
if var1 < var1[1] Then
value1 = -1;
if value1 == 1 Then
plot1(var1,"이동평균",RED);
else
plot1(var1,"이동평균",BLUE);
2017-06-15
191
글번호 110442
답변완료
성능보고서의 이상한 표기 문제
오늘 아침에 캡쳐한 해외 크루드오일 시스템 성능보고서 입니다.
보고서상의 이상한 표기 문제가 있어 현실에선 어떻게 작동할지 몰라 문의 드립니다.
첨부한 시스템23분봉 시스템에서 6뤌 14일 17:21 에 매도 진입한 updown-sell-01 은
시스템 식에 아래와 같이 정의되어 있습니다.
if MarketPosition == -1 and EntryName == "updown-sell-01" Then{
ExitShort("매도목표1",AtLimit,EP-0.07);
ExitShort("매도손절1",AtStop,EP+0.19);
즉 진입 시점 대비 0.07 Point 하락하면 익절, 반대로 0.19 Point 상승하면 손절 되도록 되어 있습니다. 그런데 성능보고서를 보면 분명히 진입시점 대비 가격이 0.08 Point 하락이 있었고 당연히 그때 청산되어 매도목표1 실현된 것으로 나옵니다.
그런데 "매도청산' 진입된 청산의 수치는 보고서에 보이는바와 같이(한줄 길게 음영처리 부분 참조) -0.05 Point 로 나와 있네요.
이 식이 왜 이렇게 표기되는지 궁금합니다. 최종 현실에선 어떻게 작동하는지도 궁금하구요.
2017-06-15
159
글번호 110440
답변완료
수식부탁드림니다=================
여러개의 지표를 합쳐보았슴니다 그런데 09:15분 경까지는 전일데이타까지 사용해서 왜곡이 심하네요 당일데이타만 참고하고 싶슴니다 수정좀부탁드립니다
수고스럽게해서 죄송합니다
//***************************macd
Input : shortPeriodm(5), longPeriodm(10), Periodm(3),보정(400),등락(0.005);
Var : MACDv(0), MACDsig(0),macdosc(0) ;
MACDv = MACD(shortPeriodm, longPeriodm);
MACDsig = ema(MACDv,Periodm);
macdosc = MACDv-ema(MACDv,Periodm);
if macdosc > 0 then
{
// plot1(macdosc+0.4, "MACDOscillator+");
// Plot2(0+0.4, "MACDOscillator-");
}
else
{
// Plot1(0+0.4, "MACDOscillator+");
// Plot2(macdosc+0.4, "MACDOscillator-");
}
Plot23(MACDv*보정, "MACD",iff((MACDv )>(MACDv[1])+00,RED,iff((MACDv )<(MACDv[1] )-00,BLUE,BLACK)));
Plot21(MACDsig*보정, "MACDSignal",iff((MACDsig )>(MACDsig[1])+00,RED,iff((MACDsig )<(MACDsig[1] )-00,BLUE,BLACK)));
//PlotBaseLine1(0, "기준선1");
//******************************sto
Input : Periods(5), Periods1(10), Periods2(3);
var : StoK(0),StoD(0);
StoK = StochasticsK(Periods,Periods1);
StoD = StochasticsD(Periods,Periods1,Periods2);
//Plot11(StoK, "StochasticsK");
Plot12(StoD-50, "StochasticsD",iff((StoD )>(StoD[1])+00,RED,iff((StoD )<(StoD[1] )-00,BLUE,BLACK)));
//PlotBaseLine1(20, "기준선20");
//PlotBaseLine2(80, "기준선80");
//tsf************************************** tsf
Input : Periodt1(10),Periodt2(11),순매수급증보정1(0.6),순매수급감보정1(0.6),순매수보정한계1(0.002),
순매수급증보정2(0.9),순매수급감보정2(0.9),순매수보정한계2(0.009);
var : TSF1(0);
var : TSF11(0);
var : TSF보정1(0);
var : TSF보정11(0);
var : TSF보정111(0);
var : TSF2(0);
var : TSF22(0);
var : TSF보정22(0);
var : TSF보정222(0);
var : TSF막(0);
var : TSF보정12(0);
var : TSF(0);
var : TSF보정(0);
VARS: TEMA1(0),TEMA2(0),TEMA3(0);
//Periodt1----------------------------------------------------------------------------------
TSF1 = LRL(C,Periodt1)+LRS(C,Periodt1);
Plot41(TSF1,"TSF1",iff(TSF1>TSF1[1]+0.00,RED,iff(TSF1<TSF1[1]-0.000,BLUE,WHITE)));
if TSF1 >TSF1[1]+순매수보정한계1 then TSF11 = ((TSF1 -TSF1[1])*순매수급증보정1)+TSF1[1];
if TSF1 <TSF1[1]-순매수보정한계1 then TSF11 = TSF1[1]-((TSF1[1] -TSF1)*순매수급감보정1);
if TSF11 >TSF11[1]+0.001 then TSF보정111 = ((TSF11 -TSF11[1])*0.7)+TSF11[1];
if TSF11 <TSF11[1]-0.001 then TSF보정111 = TSF11[1]-((TSF11[1] -TSF11)*0.7);
Plot42(TSF보정111,"TSF보정111"/*,iff(TSF보정111>TSF보정111[1]+0.0001,RED,iff(TSF보정111<TSF보정111[1]-0.0001,BLUE,WHITE))*/);
//Periodt2----------------------------------------------------------------------------------
TSF2 = LRL(C,Periodt2)+LRS(C,Periodt2);
Plot43(TSF2,"TSF2",iff(TSF2>TSF2[1]+0.00,RED,iff(TSF2<TSF2[1]-0.000,BLUE,WHITE)));
if TSF2 >TSF2[1]+순매수보정한계2 then TSF22 = ((TSF2 -TSF2[1])*순매수급증보정2)+TSF2[1];
if TSF2 <TSF2[1]-순매수보정한계2 then TSF22 = TSF2[1]-((TSF2[1] -TSF2)*순매수급감보정2);
if TSF22 >TSF22[1]+0.009 then TSF보정222 = ((TSF22 -TSF22[1])*0.2)+TSF22[1];
if TSF22 <TSF22[1]-0.009 then TSF보정222 = TSF22[1]-((TSF22[1] -TSF22)*0.2);
// if TSF >TSF[1]+50 then TSF보정 = ((TSF -TSF[1])*0.2)+TSF[1];
// if TSF <TSF[1]-50 then TSF보정 = TSF[1]-((TSF[1] -TSF)*0.2);
Plot44(TSF보정222,"TSF보정222",iff(TSF보정222>TSF보정222[1]+0.0001,RED,iff(TSF보정222<TSF보정222[1]-0.0001,BLUE,WHITE)));
Plot45(TSF보정222,"TSF막",iff(TSF1>TSF1[1]+0.00,RED,iff(TSF1<TSF1[1]-0.000,BLUE,WHITE)));
if TSF보정222[2] > TSF보정222[1] and TSF보정222[1] < TSF보정222 Then
{
Plot46(TSF보정222-0.04, "buy");
// PlaySound("C:₩예스트레이더₩data₩Sound₩alert");
}
if TSF보정222[2] < TSF보정222[1] and TSF보정222[1] > TSF보정222 Then
{
Plot47(TSF보정222+0.04, "sall");
// PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
//****************************신호
if (MACDsig )>(MACDsig[1])+00 and TSF1 > TSF1[1] Then{
PLOT32((MACDsig*보정 )-0.01,"매수막대");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩alert.wav");
}
if (MACDsig )<(MACDsig[1])+00 and TSF1 < TSF1[1] Then{
PLOT33((MACDsig*보정 )-0.01,"매도막대");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩reject.wav");
}
Plot4(MACDsig*보정,"tott",iff((MACDsig )>(MACDsig[1])+00 and ( TSF1 > TSF1[1] )
,RED,iff((MACDsig )<(MACDsig[1])+00 and TSF1 < TSF1[1]
,BLUE,GREEN)));
2017-06-15
204
글번호 110434
답변완료
문의드립니다.
수고많으십니다.
아래수식에서
1.당일거래횟수를 변수로 추가 부탁드립니다.
2.그리고 당일거래횟수를 2번으로 설정했을경우 2번 진입되면 청산시간까지 가서 청산이 되지않게
2번진입후 반대 신호 나오면 보유분 청산하고 그날 매매 종료하고 싶습니다.
-------------------------------------
INPUT : LENGTH(400),SSTIME(220000),EETIME(04500000);
VAR : TCHAN(0), BCHAN(0);
var : bs1(0),ss1(0);
var : bs2(0),ss2(0);
var : bs3(0),ss3(0);
var : bl(0),bh(0), sh(0), sl(0);
TCHAN = HIGHEST(HIGH, LENGTH)[1];
BCHAN = LOWEST(LOW, LENGTH)[1];
// 만약 매수 1단계 진행중 BCHAN의 저가를 깨면 매수단계 초기화
//if bs1 == 1 and BCHAN > L then {bs1=0; }
//if ss1 == 1 and TCHAN < H then {ss1=0; }
//TCHAN 넘는 봉의 고점을 넘으면 매수 2단계
//if bs1 == 1 and bh < H then bs2=1;
//if ss1 == 1 and sl > L then ss2=1;
//plot1(bs1);
//plot2(-ss1);
//plot3(bs2);
//plot4(-ss2);
//진입
//if bs2 == 1 then { bs2 = 0;}
//if ss2 == 1 then { ss2 = 0;}
if stime >= SSTIME Then{
// TCHAN 보다 크면 매수 1단계
if TCHAN < H then {bs1 = 1;ss1 = 0 ;}//{bs1 = 1;bh = H[1];}
if BCHAN > L then {ss1 = 1;bs1 = 0 ;}//{ss1 = 1;sl = L[1];}
#매수
if TCHAN < H Then
buy();
#매도
if BCHAN > L Then
sell();
}
if stime== EETIME or (stime > EETIME and stime[1] < EETIME) Then{
ExitLong();
ExitShort();
}
2017-06-15
140
글번호 110433
답변완료
시스템매매횟수 오류수정
항상 감사드립니다
아래 시스템식을 적용해보면 b1,s1 신호는 발생치않고 b2_stok80.s2_stok80 신호만 발생합니다
그리고 신호발생도 전체화면에서 3번만 발생하고 종료
B1,S1 신호는 당일 첫신호로 발생하여야 하고,b2_stok80.s2_stok80 신호는 당일 2번째,3번째 신호에서 발생하여야 하는데 오류가 있는것 같습니다
수정부탁드립니다
감사합니다
##################################################
input : 시작시간(170000), 종료시간(150000),당일최대진입횟수(3); # 현지시간_뉴욕 17:00 장시작/ 15시 장종료 #
var : entrycnt(0),S1(0),T1(0),count1(0),Tcond(false); # 전일 마지막신호연계하여 동일방향 재진입금지#
if stime == 시작시간 or (stime > 시작시간 and stime[1] < 시작시간) Then {
Tcond = true;
S1 = TotalTrades;
T1 = 0;
count1 = 0;
}
if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then{
Tcond = false;
ExitLong("당일매수청산");
ExitShort("당일매도청산");
}
if MarketPosition != 0 Then
Entrycnt = TotalTrades-T1;
Else
Entrycnt = TotalTrades-T1+1;
#####################################################
if Tcond == true Then{
if entrycnt == 0 Then{ #당일 첫번째 신호 #
if uparoon>dnaroon and uparoon>50 and macdosc>0 and c>var48 and c>var52[25] and adxv1>20 and dp2>dm2 and stok80>50 and
MarketPosition == 0 and MarketPosition(1) != 1 Then
buy("b1");
if uparoon<dnaroon and dnaroon>50 and macdosc <0 and c<var48 and c<var52[25] and adxv1>20 and dp2<dm2 and stok80<50 and
MarketPosition == 0 and MarketPosition(1) != -1 Then
sell("s1");
}
#매수조건이면 T1는 1, 카운트 1증가
if T1 <= 0 and uparoon>dnaroon and uparoon>50 and macdosc>0 and c>var48 and c>var52[25] and adxv1>20 and dp2>dm2 and stok80>50 then {
T1 = 1;
count1 = count1+1;
#카운트가 3보다 작거나 같을때 나머지 포지션 조건 만족할때 진입
if count1 <= 3 and entrycnt >= 1 and entrycnt < 당일최대진입횟수 and ((MarketPosition == 0 and MarketPosition(1) != 1) or MarketPosition == -1) Then #동일방향 재진입금지#
BUY("B2_stok80");
}
#매도조건이면 T1는 -1, 카운트 1증가
if T1 >= 0 and uparoon<dnaroon and dnaroon>50 and macdosc <0 and c<var48 and c<var52[25] and adxv1>20 and dp2<dm2 and stok80<50 Then{
T1 = -1;
count1 = count1+1;
#카운트가 3보다작거나 같을때 나머저 포지션 조건 만족할때 진입
if count1 <= 3 and entrycnt >= 1 and entrycnt < 당일최대진입횟수 and ((MarketPosition == 0 and MarketPosition(1) != -1) or MarketPosition == 1) then #동일방향 재진입금지#
sell("S2_stok80");
}
}
2017-06-15
153
글번호 110432
답변완료
질문드립니다.
R1 = (High- Low) * (1.1/12) + Close ;
사진에서 보이는 R1의 수식인데요. 이것을 저 시가선과 같이 표현하려면 어떤것을 더 추가해야할까요? 일자그래프나 다른 설정으로는 시가선처럼 표현이 되지를 않네요
2017-06-15
208
글번호 110431
답변완료
수식 작성 문의드립니다.
매수진입
A 조건에 의해 매수신호 발생후 위로 5틱 아래로 3틱 이내에서는 매도 신호를 발생하지 마라.
매도진입
B의 조건에 의해 매도신호 발생후 아래로 5틱 위로 3틱 이내에서는 매수 신호를 발생하지 마라.
위와 같은 수식 작성이 가능할까요?
2017-06-14
155
글번호 110430
고구미 님에 의해서 삭제되었습니다.
2017-06-14
0
글번호 110429
답변완료
재 문의드립니다..
아래 답변주신 내용의 주석을 부탁드립니다..
그리고 대입해보면 200틱에서 30분봉의 이평선이 나와야 되는데
200틱이면 200틱의 이평선과 겹치고
300틱이면 300틱의 이평선과 동일한 수치로 나오네요..
제가 뭘 빼먹은건가요?
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
안녕하세요
예스스탁입니다.
틱봉에서 다른 분봉 지표는 정확한 값을 계산하지 못합니다.
수식은 하나의 봉에서 시고저종가만 사용가능하고 내부의 다른값을 알수는 없습니다.
분봉의 시간경계가 틱봉의 중간에 위치하는 경우가 많아
값을 정확히 분리해 낼수가 없습니다.
최대한 근사값으로 계산합니다.
input : Atime(30),P(20);#30분봉의 20이동평균
var : cnt(0),sum1(0),mav1(0),TF(0);
Array : CC[50](0),OO[50](0);
TF = TimeToMinutes(stime)%Atime;
if Bdate == Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{
for cnt = 1 to 49{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P] > 0 then{
sum1 = 0;
for cnt = 0 to P-1{
sum1 = sum1+CC[cnt];
}
mav1 = sum1/P;
plot1(mav1);
}
2017-06-14
163
글번호 110428