예스스탁
예스스탁 답변
2022-08-30 09:26:45
안녕하세요
예스스탁입니다.
1
해당 수식은 특정분주기를 지정해 해당 분의 macd를 계산하는 식입니다.
수식은 기본차트보다 배수로 높은 주기만 계산이 됩니다.
기분차트보다 N배 높은 분주기로 계산되게 수정해 드립니다.
input : N배(5),short(12),long(26),sig(9);
var : S1(0),D1(0),TM(0),EP1(0),EP2(0),EP3(0),MACDO(0),N(0);
var : TF(0),xma1(0),xma2(0),idx(0),Prexma1(0),Prexma2(0),MACDV(0),MACDS(0),PreMACDS(0);
var : Bsystem(true);
//타분봉 macd계산
Ep1 = 2/(short+1);
Ep2 = 2/(long+1);
Ep3 = 2/(sig+1);
N = BarInterval*N배;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%N;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and N > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and N > 1 and TM >= TM[1]+N) or
(Bdate == Bdate[1] and N == 1 and TM > TM[1]) Then
{
idx = idx + 1;
Prexma1 = xma1[1];
Prexma2 = xma2[1];
PreMACDS = MACDS[1];
}
if idx <= 1 then
{
xma1 = C;
xma2 = C;
MACDV = xma1-xma2;
MACDS = MACDV;
MACDO = MACDV-MACDS;
}
else
{
xma1 = C * EP1 + Prexma1 * (1-EP1);
xma2 = C * EP2 + Prexma2 * (1-EP2);
MACDV = xma1-xma2;
MACDS = MACDV * EP3 + PreMACDS * (1-EP3);
MACDO = MACDV-MACDS;
}
if MACDS < 0 Then
Bsystem = False;
}
2
input : N배(5),short(12),long(26),sig(9),emaP1(5),emap2(40),map(40);
var : S1(0),D1(0),TM(0),EP1(0),EP2(0),EP3(0),MACDO(0),N(0),cnt(0);
var : TF(0),xma1(0),xma2(0),idx(0),Prexma1(0),Prexma2(0),MACDV(0),MACDS(0),PreMACDS(0);
var : Bsystem(true),Emav1(0),Emav2(0),EP4(0),EP5(0),preEmav1(0),preEmav2(0);
var : sum(0),sum1(0),mav(0),mav1(0);
Array : CC[100](0);
//타분봉 macd계산
Ep1 = 2/(short+1);
Ep2 = 2/(long+1);
Ep3 = 2/(sig+1);
N = BarInterval*N배;
EP4 = 2/(emaP1+1);
EP5 = 2/(emaP2+1);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%N;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and N > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and N > 1 and TM >= TM[1]+N) or
(Bdate == Bdate[1] and N == 1 and TM > TM[1]) Then
{
idx = idx + 1;
Prexma1 = xma1[1];
Prexma2 = xma2[1];
PreMACDS = MACDS[1];
Preemav1 = Emav1[1];
Preemav2 = Emav2[1];
For cnt = 99 DownTo 0
{
CC[cnt] = CC[cnt-1];
}
}
CC[0] = C;
if idx <= 1 then
{
xma1 = C;
xma2 = C;
MACDV = xma1-xma2;
MACDS = MACDV;
MACDO = MACDV-MACDS;
Emav1 = c;
}
else
{
xma1 = C * EP1 + Prexma1 * (1-EP1);
xma2 = C * EP2 + Prexma2 * (1-EP2);
MACDV = xma1-xma2;
MACDS = MACDV * EP3 + PreMACDS * (1-EP3);
MACDO = MACDV-MACDS;
Emav1 = C * EP4 + Preemav1 * (1-EP4);
Emav2 = C * EP5 + Preemav2 * (1-EP5);
}
if CC[maP] > 0 Then
{
sum = 0;
sum1 = 0;
For cnt = 0 to maP-1
{
sum = sum + CC[cnt];
sum1 = sum1 + CC[cnt+1];
}
mav = sum/maP;
mav1 = sum1/maP;
}
if (MACDS < 0 and Emav1 < preEmav1) or
(Emav1 < Emav2 and mav < mav1 and mav1 > 0) Then
Bsystem = False;
}
즐거운 하루되세요
> jshwang2 님이 쓴 글입니다.
> 제목 : 수식문의드립니다
> 안녕하세요~
이전에 1분봉 차트에서 5분봉의 MACD를 사용하는 수식을 문의드렸고
아래와 같은 수식을 작성해주셨습니다
-----------------------
input : 타주기분(5),short(12),long(26),sig(9);
var : S1(0),D1(0),TM(0),EP1(0),EP2(0),EP3(0),MACDO(0);
var : TF(0),xma1(0),xma2(0),idx(0),Prexma1(0),Prexma2(0),MACDV(0),MACDS(0),PreMACDS(0);
var : Bsystem(true);
//타분봉 macd계산
Ep1 = 2/(short+1);
Ep2 = 2/(long+1);
Ep3 = 2/(sig+1);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
idx = idx + 1;
Prexma1 = xma1[1];
Prexma2 = xma2[1];
PreMACDS = MACDS[1];
}
if idx <= 1 then
{
xma1 = C;
xma2 = C;
MACDV = xma1-xma2;
MACDS = MACDV;
MACDO = MACDV-MACDS;
}
else
{
xma1 = C * EP1 + Prexma1 * (1-EP1);
xma2 = C * EP2 + Prexma2 * (1-EP2);
MACDV = xma1-xma2;
MACDS = MACDV * EP3 + PreMACDS * (1-EP3);
MACDO = MACDV-MACDS;
}
if MACDS < 0 Then
Bsystem = False;
}
------------------------------
1. 위 수식이 차트 주기의 5배 주기 MACD를 계산하는게 아닌가요?
타주기분(5)로 나눠 나머지를 카운트해서 5배주기로 생각하고 다른 주기에 적용했는데
1분봉 차트에선 정상적으로 나오지만
다른 주기에 사용하면 첨부한 사진처럼 MACD가 다르게 나옵니다
다른 주기에도 5배 주기 MACD로 계산되도록 하려면 어떻게 해야하나요?
2. 5배 주기 이평선 기울기 계산
현재 수식은 '(5배주기 MACD 시그널) < 0 이면 시스템 종료' 인데
[(5배주기 MACD 시그널) < 0] && [5배주기 EMA(40) 기울기 < 0]
or
[(5배주기 EMA(5) < 5배주기 EMA(40)] && [5배주기 40일 이평선 기울기 < 0]
이면 거래종료
으로 종료조건을 추가하고 싶습니다
이 부분은 어떻게 해야하나요??
감사합니다