
Торговая стратегия обратного двоичного MACD - это количественная торговая стратегия, которая использует индикатор MACD для идентификации сигналов обратного тренда. Эта стратегия одновременно сочетает индикатор RVI и индикатор CCI для подтверждения времени покупки, чтобы отфильтровать некоторые ложные обратные. Эта стратегия применима для внутридневных и коротколинейных торгов.
Стратегия основана на MACD-индикаторе. MACD получает быструю EMA (((12) минус медленную EMA (((26) и получает быструю линию, а затем использует SIGNAL (((9) в качестве медленной линии. Когда прохождение медленной линии над быстрой линией приводит к Golden Cross, она становится положительной; когда прохождение медленной линии ниже быстрой линии приводит к Dead Cross, она падает.
Стратегия использует двухчасовой MACD для поиска возможности поворота. Стратегия использует 6-часовой уровень MACD для определения направления общей тенденции, 1-часовой уровень MACD для поиска обратного сигнала. Когда 6-часовой MACD находится в восходящем тренде, 1-часовой уровень означает, что цена может перевернуться вверх.
RVI-индикатор измеряет соотношение цены закрытия и цены открытия на нескольких последних K-линиях с максимальными и минимальными ценами. Когда RVI ниже 0.2, считается, что это перепродажа.
Эта стратегия в сочетании с двухмесячными MACD, а также RVI и CCI позволяет более точно идентифицировать возможности для реверса, отфильтровывать некоторые ложные сигналы, что повышает стабильность стратегии. Конкретные преимущества:
Используйте 6-часовой уровень MACD для определения тенденций и избегайте торговли в условиях повышенной неопределенности на крупных биржах.
1-часовой уровень MACD идентифицирует обратный момент, чтобы зафиксировать корректировку цены в более короткие периоды.
Использование RVI и CCI в сочетании позволяет более точно определить время реверсии.
Стратегия включает в себя стоп-пойнты, которые помогают снизить убытки.
В этой стратегии есть определенные риски, которые проявляются в следующем:
Сам по себе индикатор MACD подвержен ложным сигналам, поэтому, даже если фильтрация вспомогательных индикаторов будет эффективной, нельзя полностью избежать убытков. Рекомендуется уменьшить размер позиции.
Показатели RVI и CCI могут подавать ошибочные сигналы, в результате чего пропадают лучшие возможности для обратного пути или увеличиваются ненужные убытки. Рекомендуется разумная корректировка параметров 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)