
Стратегия прорывного реверсивного трейдинга относится к стратегии короткой линии. Стратегия включает в себя несколько показателей для оценки основных тенденций, среднесрочных тенденций и краткосрочных тенденций, а также для отслеживания тенденций с помощью сигналов, подтверждающих тенденцию и дополняющих друг друга.
Эта стратегия основана на показателях абсолютной силы цены и MACD, чтобы достичь срыва в реверсивной торговле. Сначала рассчитывается 9-циклическая, 21-циклическая и 50-циклическая EMA цены, чтобы определить направление большой тенденции; затем рассчитывается показатель абсолютной силы цены, отражающий силу краткосрочной корректировки; и, наконец, MACD, чтобы определить направление краткосрочной тенденции.
В частности, для рода большого тренда для повышения необходимо удовлетворить 9-ю ЭМА выше 21-й ЭМА, 21-ю ЭМА выше 50-й ЭМА. Критерий краткосрочной корректировки является абсолютная разница в показателе силы ниже 0, MACDDIFF меньше 0. Для рода большого тренда для снижения необходимо удовлетворить 9-ю ЭМА ниже 21-й ЭМА, 21-я ЭМА ниже 50-й ЭМА. Критерий краткосрочного отскока - абсолютная разница в показателе силы выше 0, MACDDIFF выше 0.
Эта стратегия имеет следующие преимущества:
Однако эта стратегия также несет в себе некоторые риски:
В отношении вышеуказанных рисков можно улучшить методы, такие как оптимизация параметров, определение различных циклических показателей; адаптация правил удержания позиций, контроль единичных убытков; в сочетании с фильтрацией сигналов большего количества показателей, повышение точности.
Эта стратегия может быть оптимизирована в следующих аспектах:
В целом, стратегию торговли с прорывным отклонением является более стабильной стратегией торговли на коротких линиях. Она сочетает в себе большие, средние и короткие многочисленные тенденции, чтобы избежать ошибочной торговли в условиях шока. При этом использование пакетов показателей также повышает точность суждения.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Divergence Scalper [30MIN]", overlay=true , commission_value=0.04 )
message_long_entry = input("long entry message")
message_long_exit = input("long exit message")
message_short_entry = input("short entry message")
message_short_exit = input("short exit message")
//3x ema
out9 = ta.ema(close,9)
out21 = ta.ema(close,21)
out50 = ta.ema(close,50)
//abs
absolute_str_formula( ) =>
top=0.0
bottom=0.0
if(close>close[1])
top:= nz(top[1])+(close/close[1])
else
top:=nz(top[1])
if(close<=close[1])
bottom:= nz(bottom[1])+(close[1]/close)
else
bottom:=nz(bottom[1])
if (top+bottom/2>=0)
1-1/(1+(top/2)/(bottom/2))
abs_partial=absolute_str_formula()
abs_final = abs_partial - ta.sma(abs_partial,50)
//macd
fast_length = input(title="Fast Length", defval=23)
slow_length = input(title="Slow Length", defval=11)
src = input(title="Source", defval=open)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 6)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="SMA", options=["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
long= abs_final > 0 and hist <0 and out9<out21 and out21<out50
short = abs_final <0 and hist >0 and out9>out21 and out21>out50
long_exit = abs_final <0 and hist >0 and out9>out21 and out21>out50
short_exit = abs_final > 0 and hist <0 and out9<out21 and out21<out50
strategy.entry("long", strategy.long, when = long and barstate.isconfirmed, alert_message = message_long_entry)
strategy.entry("short", strategy.short, when = short and barstate.isconfirmed, alert_message = message_short_entry)
strategy.close("long", when = long_exit and barstate.isconfirmed, alert_message = message_long_exit)
strategy.close("short", when = short_exit and barstate.isconfirmed, alert_message = message_short_exit)