Двойная стратегия обратной торговли MACD - это количественная стратегия торговли, которая использует индикатор MACD для выявления сигналов обратного тренда. Эта стратегия также сочетает в себе индикатор RVI и индикатор CCI для подтверждения сигналов покупки и фильтрации некоторых ложных обратных сдвигов. Эта стратегия подходит для внутридневной и краткосрочной торговли.
Стратегия основана в основном на индикаторе MACD. MACD - это быстрая скользящая средняя EMA ((12) минус медленная скользящая средняя EMA ((26) для получения быстрой линии, а затем использовать SIGNAL ((9) в качестве медленной линии. Когда быстрая линия пересекает над медленной линией, чтобы генерировать Золотой крест, она быстрая; когда быстрая линия пересекает ниже медленной линии, чтобы генерировать Мертвый крест, она медленная.
Эта стратегия использует двойные индикаторы MACD временных рамок для выявления возможностей реверсии. Стратегия использует 6-часовой MACD для определения общего направления тренда и 1-часовой MACD для поиска сигналов реверсии. Когда 6-часовой MACD находится в восходящем тренде, если 1-часовая быстрая линия пересекает ниже медленной линии, чтобы генерировать сигнал смерти, это указывает на то, что цена может перевернуться вверх. В этот момент объедините индикатор RVI и индикатор CCI для дальнейшего подтверждения и генерации сигнала покупки.
Индикатор RVI измеряет взаимосвязь между ценой закрытия и ценой открытия последних нескольких свечей по сравнению с самыми высокими и самыми низкими ценами. RVI ниже 0.2 считается перепроданным. Индикатор CCI ниже -100 указывает на перепроданность. Таким образом, стратегия использует индикатор RVI ниже 0.2 и индикатор CCI ниже -95 для подтверждения сигнала покупки.
Эта стратегия сочетает в себе двойные индикаторы временных рамок MACD и RVI и CCI для точного выявления возможностей реверсии и фильтрации некоторых ложных сигналов реверсии для повышения стабильности стратегии.
Используйте 6-часовой MACD для определения основного тренда и избегайте торговли в условиях повышенной неопределенности на более широком рынке.
1-часовой показатель MACD определяет сроки реверсии и фиксирует корректировки цен в более коротких циклах.
Сочетание показателя RVI и показателя CCI позволяет более точно определить время отмены.
Стратегия включает стоп-лосс для сокращения потерь.
Стратегия также сопряжена с некоторыми рисками, которые в основном отражаются на:
Сам MACD имеет тенденцию генерировать ложные сигналы, поэтому, несмотря на то, что вспомогательные индикаторы имеют хороший фильтрующий эффект, полностью избежать потерь невозможно.
Индикаторы RVI и CCI могут выдавать неправильные сигналы, что может привести к потере лучших возможностей для изменения или увеличению ненужных потерь.
Неправильное установление стоп-лосса может привести к слишком частому запуску стоп-лосса или неспособности контролировать потери вовремя, если они слишком свободны.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
В настоящее время с использованием двух временных рамок 1 час и 6 часов можно протестировать больше комбинаций временных рамок для поиска более стабильных параметров.
Для оценки точек торговли можно ввести больше индикаторов, таких как KDJ, WR, OBV и т. д. Но будьте осторожны, чтобы не генерировать слишком сложные торговые сигналы.
Параметры могут быть непрерывно оптимизированы для различных сортов, и библиотеки параметров могут быть созданы.
Динамический механизм стоп-лосса может быть настроен для постепенного перемещения точки стоп-лосса по мере увеличения прибыли или корректировки величины стоп-лосса в режиме реального времени в соответствии с волатильностью рынка.
Стратегия двойной обратной торговли MACD всесторонне рассматривает суждение о тренде и сигналы об обратной торговле, и ей помогают индикаторы RVI и CCI для фильтрации сигналов. Эта стратегия может эффективно идентифицировать краткосрочные корректировки с хорошим коэффициентом риск-доходность, подходит для внутридневной и краткосрочной торговли, а также может использоваться в качестве части портфеля с несколькими стратегиями для обеспечения общего разнообразия стратегии.
/*backtest start: 2023-01-05 00:00:00 end: 2024-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Bat MACD", overlay=true) fastLength = input(12) slowlength = input(26) MACDLength = input(9) h=1.05 MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD hmacd= aMACD>0? h*aMACD: -(1/h)*abs(MACD) MACDD= (request.security(syminfo.tickerid,'360',ema(close, fastLength)) - request.security(syminfo.tickerid,'360',ema(close,slowlength))) aMACDD = (request.security(syminfo.tickerid,'360',ema(ema(request.security(syminfo.tickerid,'360',close), fastLength)-ema(request.security(syminfo.tickerid,'360',close),slowlength), MACDLength))) deltad= MACDD-aMACDD L= input(0.95, title="SL") SL = L*ema(close,10) //MACD slow = input(26,"Short period") fast = input(12, "Long period") signal = input(9, "Smoothing period") //MACD = ema(close,fast)-ema(close,slow) dMACD= MACD<0? ema(MACD,5):0 Mcond= rising(dMACD,1) mcount=0.0 mcount := Mcond ? nz(mcount[1]) + 1 : nz(mcount[1]) counter=0 counter := (mcount-mcount[1]==0) ? nz(counter[1]) + 1 : 0 //counter := counter==3 ? 0: nz(counter[1]) pp=0.0 mc=0.0 pp:= (counter-counter[1]<0)? close[1] : nz(pp[1]) mc:= (counter-counter[1]<0)? MACD[1] : nz(mc[1]) bull = (pp-pp[1]<-close*0.005 and mc-mc[1]>0.02*abs(MACD) and MACD<0 and MACD[1]<0)? 1:0 //bgcolor(bull?green:white) //RVI p=10 CO=close-open HL=high-low value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6 value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6 num=sum(value1,p) denom=sum(value2,p) rvi=denom!=0?num/denom:0 //RVI drvi= (rvi<0.2)? ema(rvi-0.20,3):0 RVcond= rising(drvi,1) rvcount=0.0 rvcount := RVcond ? nz(rvcount[1]) + 1 : nz(rvcount[1]) rvcounter=0 rvcounter := (rvcount-rvcount[1]==0) ? nz(rvcounter[1]) + 1 : 0 //counter := counter==3 ? 0: nz(counter[1]) rvpp=0.0 rvmc=0.0 rvpp:= (rvcounter-rvcounter[1]<0)? close[1] : nz(rvpp[1]) rvmc:= (rvcounter-rvcounter[1]<0)? drvi[1] : nz(rvmc[1]) rvbull = (rvpp-rvpp[1]<-close*0.005 and rvmc-rvmc[1]>0.02 and drvi<0 and drvi[1]<0)? 1:0 //VolCCI length1 = input(10, minval=1) xMAVolPrice = ema(volume * close, length1) xMAVol = ema(volume, length1) src1 = xMAVolPrice / xMAVol map = sma(src1, length1) cci = (src1 - map) / (0.015 * dev(src1, length1)) cfi= (cci<0)? ema(cci,3) :0 CCcond= rising(cfi,1) cccount=0.0 cccount := CCcond ? nz(cccount[1]) + 1 : nz(cccount[1]) cccounter=0 cccounter := (cccount-cccount[1]==0) ? nz(cccounter[1]) + 1 : 0 //counter := counter==3 ? 0: nz(counter[1]) ccpp=0.0 ccmc=0.0 ccpp:= (cccounter-cccounter[1]<0)? close[1] : nz(ccpp[1]) ccmc:= (cccounter-cccounter[1]<0)? cci[1] : nz(ccmc[1]) ccbull = (ccpp-ccpp[1]<-close*0.003 and ccmc-ccmc[1]>20 and cci<-95 and cci[1]<-95)? 1:0 A= bull+ccbull+rvbull if ((MACD>hmacd) and deltad>0 and delta>delta[1]) strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close) if (crossunder(delta, 0) or crossunder(close,SL)) strategy.close("Long") if(crossover(low,SL) and SL-SL[1]<close*0.005 and SL-SL[1]>-close*0.005) strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close) if A strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close) plot(SL) //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)