Стратегия отслеживания тенденций в водовороте - это стратегия отслеживания тенденций, основанная на законах торговли водоворотом. Она использует водоворотовые показатели для идентификации тенденций и в сочетании с динамическими показателями фильтрует часть шумных сделок. Основным преимуществом этой стратегии является возможность захвата сильных ценовых тенденций для достижения дополнительной прибыли.
Эта стратегия использует основную систему прорывов в индексе “океан” для определения направления тренда. В частности, когда цена закрытия выше максимальной цены за последние 20 дней, это является позитивным сигналом; когда цена закрытия ниже минимальной цены за последние 20 дней, это является сигналом понижения.
Чтобы отфильтровать некоторые шумные сделки, в стратегию добавляется динамический фактор. Если цена колеблется менее чем на 5 ATR, стратегия не будет входить в сделку. Это позволяет избежать убытков, которые приводят к небольшим сделкам из-за слишком большого количества пустого времени.
После открытия позиции, стратегия использует значение N для прорыва exit в принципе пирса для остановки. Эта система устанавливает стоп-пойнт на основе наивысшей и наименьшей цены за последние 20 дней. Например, многократная стоп-стоп-цена составляет ATR 2N ниже минимальной цены за последние 20 дней.
Самым большим преимуществом этой стратегии является то, что она одновременно сочетает в себе отслеживание тенденций и управление динамикой. Торговая система шейх может точно улавливать среднесрочные тенденции цен, избегая помех от рынка. В то время как добавление динамической фильтрации ATR может еще больше сократить количество бесполезных сделок, что значительно увеличивает прибыльность.
В частности, эта стратегия имеет следующие преимущества:
Несмотря на то, что в этой стратегии есть много возможностей для оптимизации, она содержит ряд потенциальных рисков, которые необходимо избегать:
По данным анализа рисков, описанным выше, существуют следующие основные направления оптимизации стратегии:
В целом, динамическая стратегия отслеживания тенденций в океане является очень практичной программой отслеживания тенденций в средней и долгой линии. Она одновременно сочетает в себе индикатор оценки тенденций в океане и фильтр колебаний индикатора ATR, что позволяет эффективно блокировать сильные ценовые тенденции. Кроме того, контроль риска и оптимизация параметров стратегии также очень хорошо настроены, что позволяет снизить вероятность отступления. Эффективность этой стратегии может быть дополнительно усилена, если продолжить добавлять такие модули, как управление динамическим положением, механизм обратного обращения и целевые показатели прибыли.
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Heiken Ashi BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2029, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// HA /////////////
haTicker = heikinashi(syminfo.tickerid)
haOpen = security(haTicker, "D", open)
haHigh = security(haTicker, "D", high)
haLow = security(haTicker, "D", low)
haClose = security(haTicker, "D", close)
///////////// Rate Of Change /////////////
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Strategy ///////////////
long = haOpen < haClose and isMoving()
short = haOpen > haClose and isMoving()
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red)
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)