커뮤니티
62906 재질문
2019-06-17 23:19:42
184
글번호 129519
90분봉의 MACD 오실레이터 지표를 만들어 주셔서
시스널선이 MACD선을 돌파할 때 매매신호를 넣어 봤는데 엉뚱한 곳에서
신호가 나옵니다. 확인좀 부탁드립니다. (매매챠트는 15분봉)
input : ntime1(90),P1(20),P2(60),P(20),dv(2),스탑로스(2.5),손절폭(1.5),매수스톡(25),매도스톡(70);
input : 매수이격(18),매도이격(18),단기MAP(20),장기MAP(60),금액(100000000);
input : sto1(25),sto2(6),sto3(6);
input : short(12),long(26),sig(9);
var : cnt(0),sum2(0),sum3(0);
var : tsum1(0),tsum2(0),tmav1(0),tmav2(0);
var : BBup(0),BBdn(0),BBMid(0);
var : S1(0),D1(0),TM(0),TF(0);
Var : Lvalue(0), Hvalue(0);
var : SK(0),SD(0),T(0),단기mav(0),장기mav(0);
Array : C1[100](0),H1[100](0),L1[100](0),FK[100](-1),StoK[100](-1);
var : EP1(0),EP2(0),EP3(0),DINDEX1(0),PreJISU1(0),PreJISU2(0),JISU1(0),JISU2(0);
var : MACDVal(0),MACDSIG(0),PreMACDSIG(0),MACDosc(0);
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%ntime1;
if Bdate != Bdate[1] or
(ntime1 != 1 and Bdate == Bdate[1] and TF < TF[1]) or
(ntime1 == 1 and Bdate == Bdate[1] and TF > TF[1]) Then
{
H1[0] = H;
L1[0] = L;
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
FK[cnt] = FK[cnt-1][1];
stok[cnt] = stok[cnt-1][1];
}
DINDEX1 = DINDEX1 + 1;
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
PreMACDSIG = MACDSIG[1];
}
C1[0] = C;
if H > H1[0] Then
H1[0] = H;
if L < L1[0] Then
L1[0] = L;
if C1[P2] > 0 then
{
tsum1 = 0;
tsum2 = 0;
for cnt = 0 to P2-1
{
if cnt < P1 then
tsum1 = tsum1+C1[cnt];
if cnt < P2 then
tsum2 = tsum2+C1[cnt];
}
# 90분봉의 20일 이평선= tmav1, 60일 이평선= tmav2
tmav1 = tsum1/P1;
tmav2 = tsum2/P2;
}
# MACD 오실레이터
if DINDEX1 <= 1 then {
JISU1 = C;
JISU2 = C;
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal;
MACDosc = MACDval-MACDsig;
}
else{
JISU1 = C * EP1 + PreJISU1 * (1-EP1);
JISU2 = C * EP2 + PreJISU2 * (1-EP2);
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal * EP3 + PreMACDSIG * (1-EP3);
MACDosc = MACDval-MACDsig;
}
}
# 단기 이평선
단기mav = ma(C,단기MAP);
# 장기 이평선
장기mav = ma(C,장기MAP);
# 매수게임=============================
# if crossup(MACDSIG,MACDVal) Then
# buy("매수",OnClose,def,Floor(금액/C));
# if crossdown(단기mav,장기mav) Then
# ExitLong("청산");
# 매도게임==============================
if crossdown(MACDSIG,MACDVal) Then
sell("매도",OnClose,def,1);
if crossup(단기mav,장기mav) Then
ExitShort("매도청산");
답변 1
예스스탁 예스스탁 답변
2019-06-18 11:25:04
안녕하세요
예스스탁입니다.
수식 내용 및 신호에 이상이 있는 부분이 없습니다.
수정해 드릴 부분이 없습니다. 아래 지표식 적용해서 보시기 바랍니다.
input : ntime1(90),P1(20),P2(60),P(20),dv(2),스탑로스(2.5),손절폭(1.5),매수스톡(25),매도스톡(70);
input : 매수이격(18),매도이격(18),단기MAP(20),장기MAP(60),금액(100000000);
input : sto1(25),sto2(6),sto3(6);
input : short(12),long(26),sig(9);
var : cnt(0),sum2(0),sum3(0);
var : tsum1(0),tsum2(0),tmav1(0),tmav2(0);
var : BBup(0),BBdn(0),BBMid(0);
var : S1(0),D1(0),TM(0),TF(0);
Var : Lvalue(0), Hvalue(0);
var : SK(0),SD(0),T(0),단기mav(0),장기mav(0);
Array : C1[100](0),H1[100](0),L1[100](0),FK[100](-1),StoK[100](-1);
var : EP1(0),EP2(0),EP3(0),DINDEX1(0),PreJISU1(0),PreJISU2(0),JISU1(0),JISU2(0);
var : MACDVal(0),MACDSIG(0),PreMACDSIG(0),MACDosc(0);
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%ntime1;
if Bdate != Bdate[1] or
(ntime1 != 1 and Bdate == Bdate[1] and TF < TF[1]) or
(ntime1 == 1 and Bdate == Bdate[1] and TF > TF[1]) Then
{
H1[0] = H;
L1[0] = L;
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
FK[cnt] = FK[cnt-1][1];
stok[cnt] = stok[cnt-1][1];
}
DINDEX1 = DINDEX1 + 1;
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
PreMACDSIG = MACDSIG[1];
}
C1[0] = C;
if H > H1[0] Then
H1[0] = H;
if L < L1[0] Then
L1[0] = L;
if C1[P2] > 0 then
{
tsum1 = 0;
tsum2 = 0;
for cnt = 0 to P2-1
{
if cnt < P1 then
tsum1 = tsum1+C1[cnt];
if cnt < P2 then
tsum2 = tsum2+C1[cnt];
}
# 90분봉의 20일 이평선= tmav1, 60일 이평선= tmav2
tmav1 = tsum1/P1;
tmav2 = tsum2/P2;
}
# MACD 오실레이터
if DINDEX1 <= 1 then {
JISU1 = C;
JISU2 = C;
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal;
MACDosc = MACDval-MACDsig;
}
else{
JISU1 = C * EP1 + PreJISU1 * (1-EP1);
JISU2 = C * EP2 + PreJISU2 * (1-EP2);
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal * EP3 + PreMACDSIG * (1-EP3);
MACDosc = MACDval-MACDsig;
}
}
# 단기 이평선
단기mav = ma(C,단기MAP);
# 장기 이평선
장기mav = ma(C,장기MAP);
plot1(macdval);
plot2(macdsig);
즐거운 하루되세요
> 뽄때 님이 쓴 글입니다.
> 제목 : 62906 재질문
> 90분봉의 MACD 오실레이터 지표를 만들어 주셔서
시스널선이 MACD선을 돌파할 때 매매신호를 넣어 봤는데 엉뚱한 곳에서
신호가 나옵니다. 확인좀 부탁드립니다. (매매챠트는 15분봉)
input : ntime1(90),P1(20),P2(60),P(20),dv(2),스탑로스(2.5),손절폭(1.5),매수스톡(25),매도스톡(70);
input : 매수이격(18),매도이격(18),단기MAP(20),장기MAP(60),금액(100000000);
input : sto1(25),sto2(6),sto3(6);
input : short(12),long(26),sig(9);
var : cnt(0),sum2(0),sum3(0);
var : tsum1(0),tsum2(0),tmav1(0),tmav2(0);
var : BBup(0),BBdn(0),BBMid(0);
var : S1(0),D1(0),TM(0),TF(0);
Var : Lvalue(0), Hvalue(0);
var : SK(0),SD(0),T(0),단기mav(0),장기mav(0);
Array : C1[100](0),H1[100](0),L1[100](0),FK[100](-1),StoK[100](-1);
var : EP1(0),EP2(0),EP3(0),DINDEX1(0),PreJISU1(0),PreJISU2(0),JISU1(0),JISU2(0);
var : MACDVal(0),MACDSIG(0),PreMACDSIG(0),MACDosc(0);
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%ntime1;
if Bdate != Bdate[1] or
(ntime1 != 1 and Bdate == Bdate[1] and TF < TF[1]) or
(ntime1 == 1 and Bdate == Bdate[1] and TF > TF[1]) Then
{
H1[0] = H;
L1[0] = L;
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
FK[cnt] = FK[cnt-1][1];
stok[cnt] = stok[cnt-1][1];
}
DINDEX1 = DINDEX1 + 1;
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
PreMACDSIG = MACDSIG[1];
}
C1[0] = C;
if H > H1[0] Then
H1[0] = H;
if L < L1[0] Then
L1[0] = L;
if C1[P2] > 0 then
{
tsum1 = 0;
tsum2 = 0;
for cnt = 0 to P2-1
{
if cnt < P1 then
tsum1 = tsum1+C1[cnt];
if cnt < P2 then
tsum2 = tsum2+C1[cnt];
}
# 90분봉의 20일 이평선= tmav1, 60일 이평선= tmav2
tmav1 = tsum1/P1;
tmav2 = tsum2/P2;
}
# MACD 오실레이터
if DINDEX1 <= 1 then {
JISU1 = C;
JISU2 = C;
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal;
MACDosc = MACDval-MACDsig;
}
else{
JISU1 = C * EP1 + PreJISU1 * (1-EP1);
JISU2 = C * EP2 + PreJISU2 * (1-EP2);
MACDVal = JiSu1-Jisu2;
MACDSIG = MACDVal * EP3 + PreMACDSIG * (1-EP3);
MACDosc = MACDval-MACDsig;
}
}
# 단기 이평선
단기mav = ma(C,단기MAP);
# 장기 이평선
장기mav = ma(C,장기MAP);
# 매수게임=============================
# if crossup(MACDSIG,MACDVal) Then
# buy("매수",OnClose,def,Floor(금액/C));
# if crossdown(단기mav,장기mav) Then
# ExitLong("청산");
# 매도게임==============================
if crossdown(MACDSIG,MACDVal) Then
sell("매도",OnClose,def,1);
if crossup(단기mav,장기mav) Then
ExitShort("매도청산");
다음글
이전글