커뮤니티

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("매도청산");