Двойная стратегия торговли с обратным движением MACD

Автор:Чао Чжан, Дата: 2024-01-12 14:49:47
Тэги:

img

Обзор

Двойная стратегия обратной торговли 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 для точного выявления возможностей реверсии и фильтрации некоторых ложных сигналов реверсии для повышения стабильности стратегии.

  1. Используйте 6-часовой MACD для определения основного тренда и избегайте торговли в условиях повышенной неопределенности на более широком рынке.

  2. 1-часовой показатель MACD определяет сроки реверсии и фиксирует корректировки цен в более коротких циклах.

  3. Сочетание показателя RVI и показателя CCI позволяет более точно определить время отмены.

  4. Стратегия включает стоп-лосс для сокращения потерь.

Анализ рисков

Стратегия также сопряжена с некоторыми рисками, которые в основном отражаются на:

  1. Сам MACD имеет тенденцию генерировать ложные сигналы, поэтому, несмотря на то, что вспомогательные индикаторы имеют хороший фильтрующий эффект, полностью избежать потерь невозможно.

  2. Индикаторы RVI и CCI могут выдавать неправильные сигналы, что может привести к потере лучших возможностей для изменения или увеличению ненужных потерь.

  3. Неправильное установление стоп-лосса может привести к слишком частому запуску стоп-лосса или неспособности контролировать потери вовремя, если они слишком свободны.

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. В настоящее время с использованием двух временных рамок 1 час и 6 часов можно протестировать больше комбинаций временных рамок для поиска более стабильных параметров.

  2. Для оценки точек торговли можно ввести больше индикаторов, таких как KDJ, WR, OBV и т. д. Но будьте осторожны, чтобы не генерировать слишком сложные торговые сигналы.

  3. Параметры могут быть непрерывно оптимизированы для различных сортов, и библиотеки параметров могут быть созданы.

  4. Динамический механизм стоп-лосса может быть настроен для постепенного перемещения точки стоп-лосса по мере увеличения прибыли или корректировки величины стоп-лосса в режиме реального времени в соответствии с волатильностью рынка.

Резюме

Стратегия двойной обратной торговли 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)

Больше