커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7386
글번호 230811
답변완료
수식부탁합니다
종목검색식
1)=== 직전5거래일동안 20이평선의 등락률이 -n%이상이고 n거래일동안 하락중이고
2)=== dmi(14)에서 DIPlus>DIMinus 인 종목검색식.
시스템식
매수조건- 1).검색조건 1),2),을 충족하고 5이평선이 20이평선을 상향돌파하면 매수
2).검색조건 1),을 충족하고20이평이 60이평보다크고 5이평선이 20이평선을
상향돌파하면 매수
3).검색조건 1), 을 충족하고5이평선이 20이평선을 하향돌파하고 주가가
전고점과 전저점 사이에서 상승반전하면 매수
매도조건- 1).5이평선이 20이평선을 하향돌파하고 주가가 전저점을 하향이탈하면 매도
2).MACD가 데드크로스면 매도
주석까지 부탁합니다
2016-06-10
148
글번호 98766
답변완료
질문입니다.
안녕하세요.
금요일 진입 안하는 식 있는지 질문드립니다.
감사합니다.
2016-06-07
125
글번호 98762
답변완료
stoploss 관련
수고 많으십니다.^^*
stoploss를 쓰지 않고 entryprice를 쓰고 싶은데 안되네요.
// 10분봉 atm 연결콜옵션, 당일청산
var:f0(False),f1(False);
//스탑로스
SetStopLoss(30);
f0=dayindex==0 ;
if f0 then sell();
위식을 setstoploss(30)을 없에고 다음처럼 작성하면 전혀다른결과가 나옵니다.ㅠㅠ
// 10분봉 atm 연결콜옵션, 당일청산
var:f0(False),f1(False);
f0=dayindex==0 ;
f1= c>=EntryPrice*1.3 ;//손절30%
if f0 then sell();
if f1 then exitshort();
뭐가 잘못되었나요?
2016-06-07
125
글번호 98760
답변완료
시스템식 수정 문의드립니다
안녕하세요~~~
신고가 조건과 매수전 조건을 추가 하고 싶어서 문의드립니다!!
항상 감사합니다!!!
현재 아래의 시스템식을 15분봉 상에서 적용중입니다
1. 신고가 조건 추가
ㄱ. 15분 봉상 고가가 15분 봉상의 엔벨로프 20,20의 상단을 넘었던 적이 있고
ㄴ. a = 15분봉상 지난 500봉의 최대거래량
a 돌파 & 15분 봉이 o*1.06 < c
ㄱ&ㄴ의 조건 만족시 신고가 조건 만족으로 매수준비
2. 매수전 조건 추가 (현재 이평선 조건에)
ㄱ. 조건 - 현재 매수구간에서 -6%이상의 음봉
매수전 발생 = 매수금지 (다음 신고가 조건 만족전까지)
1차매수 이후 발생 = 추매는 그대로, 매도폭은 50%
ㄴ. 현재매수구간에서
조건 - a = 15분봉상 지난 500봉의 최대거래량
a*0.6 의 거래량 돌파 & 15분봉 o*1.06> c 발생
매수전 = 매수금지 (다음 신고가 조건 만족전까지)
1차매수 이후 발생 = 추매는 그대로, 매도폭은 50%
다음 신고가가 발생되면 2의 조건들은 리셋
위와 같습니다.
모자라는 부분 알려주시면 바로 보충하겠습니다!!
---------------------------------------------------
input : P(20),시작날짜(20160108),매수1차(1000000),매수2차(1500000),매수3차(2000000);
var : T(0),HH(0),Price1(0),Price2(0),Price3(0),diff(0),maxdiff(0),Lv(0),sum(0),mav(0),cnt(0),Hv(0),entry(false);
var : dayhh(0);
sum = 0;
dayhh = dayhigh(0);
for cnt = 0 to P-1{
sum = sum+DayClose(cnt);
if dayhigh(cnt) > dayhh Then
dayhh = dayhigh(cnt);
}
mav = sum/P;
######## 매수전 조건 ##############
if sdate >= 시작날짜 then{
if crossup(L,mav) Then{
T = 1;
diff = 0;
maxdiff = 0;
Condition1 = false;
entry = false;
}
if CrossDown(H,mav) Then{
T = -1;
Condition1 = false;
entry = false;
}
##### 신고가 조건 ############
if dayhh > dayhh[1] Then{
Condition1 = true;
entry = true;
Hv = H;
Lv = L;
}
######### 폭설정 조건 ###############
if T == 1 and Condition1 == true Then{
if H > Hv Then
Hv = H;
if L < Lv Then
Lv = L;
diff = Hv-Lv;
if diff > maxdiff Then
maxdiff = diff;
Price1 = Hv-maxdiff*1;
Price2 = Hv-maxdiff*2;
Price3 = Hv-maxdiff*3;
}
if MarketPosition == 1 Then
entry = false;
#가격이 하락해 1차매수가격 이하이면 매수
if MarketPosition == 0 and Condition1 == true and entry == true and L > mav and Hv >= Price1*1.025 Then
buy("b1",atlimit,Price1,Floor(매수1차/C));
#가격이 하락해 2차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 1 and Price2[BarsSinceEntry+1] > 0 Then
buy("b2",atlimit,Price2[BarsSinceEntry+1],Floor(매수2차/C));
#가격이 하락해 3차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 2 and Price3[BarsSinceEntry+1] > 0 Then
buy("b3",atlimit,Price3[BarsSinceEntry+1],Floor(매수3차/C));
if MarketPosition == 1 Then{
#진입이후로 한번도 선 아래로 내려가지 않은경우
#진입이후 최저가에서 폭만큼 상승하면 청산
if countif(L<mav,BarsSinceEntry) == 0 Then
ExitLong("bx1",atlimit,lowest(L,BarsSinceEntry)+maxdiff[BarsSinceEntry+1]);
#진입이후로 20선 아래로 한번이상 내려간 경우
#진입이후 최저가에서 폭의 절반만큼 상승하면 청산
if countif(L<mav,BarsSinceEntry) >= 1 Then
ExitLong("bx2",atlimit,lowest(L,BarsSinceEntry)+maxdiff[BarsSinceEntry+1]*0.5);
#일괄매도 = 현재 20일 신고가 이후 최저가 + 최대폭(75%)
ExitLong("일괄매도",atlimit,lowest(L,BarsSinceEntry)+maxdiff[BarsSinceEntry+1]*0.75);
if MaxEntries == 2 Then
exitlong("본절2",atlimit,(Price1[BarsSinceEntry+1]+Price2[BarsSinceEntry+1])/2);
if MaxEntries == 3 Then
exitlong("본절3",atlimit,Price2[BarsSinceEntry+1]);
}
}
2016-06-07
142
글번호 98759
답변완료
지그재그
늘 성실한 답변 감사드립니다.
문의 드릴 내용은 수식지왕님의 지그재그 파동선의 저점들의 연결선을 평할하여 그리고
고점들의 연결선을 평할하여 그리는 지표입니다.
중심선은 지그재그 차트가 그려져 고점과 저점에 생기는 중심점의 연결인데 그것도 평할하여
그려지면 좋겠습니다.
연결선들이 부드러운 곡선이 되겠지요.
지그재그 파동이 현재 가격에서는 그려지지 않더라고 앞의 고점과 저점의
연결선은 현재가격까지 연장되어 그려지면 좋겠습니다.
수식지왕님의 지그재그 수식과 그림 첨부합니다. 감사합니다.
#==========================================#
# 지표명 : 지그재그차트
# 작성자 : 수식지왕
# 블로그 : http://yahoosir.blog.me
#==========================================#
Input:상승률(0.05),하락률(0.05);
Var:j(0),상승(100),하락(-100),양방향(2),
기준고(0),기준저(0),기준고Bar(0),기준저Bar(0),추세(0),이중파동(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0);
#==========================================#
# 전고점,전저점 index 증가
#==========================================#
For j = 1 To 19
{
저Bar[j] = 저Bar[j] + 1;
고Bar[j] = 고Bar[j] + 1;
}
#==========================================#
# 이중파동 처리
#==========================================#
If 이중파동 > 0 Then
{
Plot1(이중파동);
이중파동 = 0;
}
#==========================================#
# 최근 고,저 갱신
#==========================================#
If 기준고 <= H || 기준고 == 0 || IsNaN(기준고) == True Then
{
기준고 = H;
기준고Bar = 0;
}
Else
기준고Bar = 기준고Bar + 1;
If 기준저 >= L || 기준저 == 0 || IsNaN(기준저) == True Then
{
기준저 = L;
기준저Bar = 0;
}
Else
기준저Bar = 기준저Bar + 1;
#==========================================#
# 추세방향 결정
#==========================================#
If 기준고 * (1 - (하락률/100)) > H && 기준저 * (1 + (상승률/100)) < L Then
{
추세 =iff(기준고Bar==기준저Bar,양방향,iff(기준고Bar>기준저Bar,상승,하락));
}
Else If 기준고 * (1 - (하락률/100)) > H Then 추세 = 하락;
Else If 기준저 * (1 + (상승률/100)) < L Then 추세 = 상승;
#==========================================#
# 추세변화에 따른 변곡점 처리
#==========================================#
If 추세[1] == 상승 && 추세 == 하락 Then
{
For j = 18 DownTo 1 {
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
기준고 = H;
기준고Bar = 0;
기준저 = L;
기준저Bar = 0;
If 이중파동[1] > 0 Then 이중파동 = 고[1];
Else plot1(고[1]);
}
If 추세[1] == 하락 && 추세 == 하락 &&
고[1] < 기준고 &&
기준고 * (1 - (하락률/100)) > H Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준고 = H;
기준고Bar = 0;
기준저 = L;
기준저Bar = 0;
plot1(저[1]);
이중파동 = 고[1];
}
If 추세[1] == 하락 && 추세 == 상승 Then
{
For j = 18 DownTo 1
{
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준저 = L;
기준저Bar = 0;
기준고 = H;
기준고Bar = 0;
If 이중파동[1] > 0 Then 이중파동 = 저[1];
Else plot1(저[1]);
}
If 추세[1] == 상승 && 추세 == 상승 &&
저[1] > 기준저 &&
기준저 * (1 + (상승률/100)) < L Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준저 = L;
기준저Bar = 0;
기준고 = H;
기준고Bar = 0;
plot1(고[1]);
이중파동 = 저[1];
}
If 추세 == 양방향 Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준고 = H;
기준고Bar = 0;
기준저 = L;
기준저Bar = 0;
추세 = 추세[1];
If 추세[1] == 상승 Then
{
Plot1(고[1]);
이중파동 = 저[1];
}
Else
{
Plot1(저[1]);
이중파동 = 고[1];
}
}
#==========================================#
# 마무리
#==========================================#
If LastBarOnChart == 1 && 기준고Bar > 0 && 기준저Bar > 0 Then
{
plot1(Iff(추세 == 상승,기준고,기준저));
}
2016-06-07
509
글번호 98758
웨퐁 님에 의해서 삭제되었습니다.
2016-06-07
6
글번호 98757
답변완료
수정요망
안녕하세요.
늘 도움 감사합니다.
아래 지표에서 가격표시가 나오도록 해주셨는데...유로가격은 3자리 숫자만 나와서 수정방법을 찾을 수 없어서 수정 부탁드립니다.
그리고 가격표시 와 함께 진폭의 틱수숫자도 함께 나오게 부탁드립니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 가격표시
>
안녕하세요
예스스탁입니다.
Input:ShortPeriod(5),LongPeriod(20),선두께(2),선색(green);
Var:j(0),ma1(0),ma2(0);
Var: date11(0),date12(0),time11(0),time12(0),TL1(0),
date21(0),date22(0),time21(0),time22(0),
date31(0),date32(0),time31(0),time32(0),tx(0),tx1(0);
Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0),ZZ[20](0);
Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0);
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
ma1 = ma(C,ShortPeriod);
ma2 = ma(C,LongPeriod);
If ma1 < ma2 Then
{
If ma1[1] >= ma2[1] Then
{
For j = 18 DownTo 0
{
LoVal[j+1] = LoVal[j];
LoBar[j+1] = LoBar[j];
ZZ[j+1] = ZZ[j];
}
LoVal[0] = L;
LoBar[0] = 0;
ZZ[0] = L;
date11 = date[HiBar[0]];
time11 = stime[HiBar[0]];
Value11 = HiVal[0];
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
tx = Text_New(date11,time11,Value11,NumToStr(value11,2));
Text_SetStyle(tx,2,1);
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]);
TL2[j] = TL_New(date21,time21,fr[j],date22,time22,fr[j]);
TL_SetColor(TL2[j],red);
tx1 = Text_New(date22,time22,fr[j],NumToStr(fr[j],2));
Text_SetStyle(tx1,0,0);
}
}
Else If LoVal[0] > L Then
{
LoVal[0] = L;
LoBar[0] = 0;
ZZ[0] = L;
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
TL_SetEnd(TL2[j],date22,time22,fr[j]);
}
}
}
Else If ma1 > ma2 Then
{
If ma1[1] <= ma2[1] Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
ZZ[j+1] = ZZ[j];
}
HiVal[0] = H;
HiBar[0] = 0;
ZZ[0] = H;
date11 = date[LoBar[0]];
time11 = stime[LoBar[0]];
Value11 = LoVal[0];
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
tx = Text_New(date11,time11,Value11,NumToStr(value11,2));
Text_SetStyle(tx,2,0);
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]);
TL3[j] = TL_New(date31,time31,fr[j],date32,time32,fr[j]);
TL_SetColor(TL3[j],blue);
}
}
Else If HiVal[0] < H Then
{
HiVal[0] = H;
HiBar[0] = 0;
ZZ[0] = H;
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date32 = date[0];
time32 = stime[0];
for j = 0 to 6
{
TL_SetEnd(TL3[j],date32,time32,fr[j]);
}
}
}
TL_SetSize(TL1,선두께);
TL_SetColor(TL1,선색);
즐거운 하루되세요
2016-06-07
154
글번호 98756
kosto1 님에 의해서 삭제되었습니다.
2016-06-07
0
글번호 98754
답변완료
수식 수정 문의드립니다.
안녕하세요 항상 답변 감사합니다.
아래 수식은 당일매수 1회, 매도 1회 발생하는 수식입니다.
여기에 9시 1분에 매수식을 추가하고 싶습니다.(2계약 피라미딩)
그리하여 매수(9시1분) ---> 매수(조건 만족시) ----> 청산(모두)
주의할점은 첫번째 매수와 두번째 매수사이에서는(첫번째 매수만 있을때) 청산이 이루어지면 안되고 두번째 매수까지 진행된 후에 청산이 되어야 합니다.
만약 두번째 매수신호가 지정시간까지 조건을 만족하지 못할때는 첫번째 매수한것만 청산식에 의해 당일 청산합니다.
수식 정중히 부탁드립니다. 몇시간동안 해봤지만 의도대로 식이 나오지 않습니다.
아래는 수식입니다.
=================================================================================
var : sum(0,data1), S1(0,data1), S2(0,data1), HH(0), LL(0), cnt(0), count(0);
sum = (data2(c)+data3(c));
count = 0;
for cnt = 0 to 20
{
if sdate == EntryDate(cnt) Then
count = count+1;
}
if date != date[1] Then
{
S1 = sum;
HH = sum;
}
#양합 당일 최고값
if sum > HH Then
HH = sum;
if MarketPosition == 0 and count == 0 and stime <= 125000 and HH > S1*1.065 and sum <= HH*0.99 Then
{
buy("b1");
S2 = sum;
LL = sum;
}
if MarketPosition == 1 and count == 1 Then
{
#매수진입 이후 양합 최저값
if sum < LL Then
LL = sum;
#양합이 매수시점양합보다 4% 상승하면 청산
if sum >= S2*1.04 Then
ExitLong("bx1");
#양합이 매수시점양합보다 10% 하락하면 청산
if sum <= S2*0.90 Then
ExitLong("bx2");
#매수이후 최저양합이 매수시점 양합보다 4%이상 하락후
#현재 양합이 매수이후 최저양합보다 1.5% 상승하면 청산
if LL <= S2*0.96 and sum >= LL*1.015 Then
Exitlong("bx3");
if stime == 150100 Then
ExitLong("bx4");
}
================================================================================
2016-06-07
141
글번호 98753