Эта стратегия сочетает в себе два мощных встроенных индикатора в TradingView - индекс направленного движения (DMI) и детеррентный ценовой осциллятор (DPO), чтобы сформировать надежную основу для принятия торговых решений. Основная логика стратегии заключается в том, чтобы определить, является ли значение DPO больше 0, когда происходит золотой крест DMI, и генерировать длинный сигнал, если это так; или определить, является ли значение DPO меньше 0, когда происходит мертвый крест DMI, и генерировать короткий сигнал, если это так. Это может эффективно отфильтровать много ложных сигналов, генерируемых во время колебаний диапазона на рынке, тем самым генерируя только торговые сигналы, когда формируется тренд, избегая повторных стоп-потерь во время колебаний.
Эта стратегия в основном использует индикатор DMI для определения направления и силы тренда. Индикатор DMI состоит из трех кривых: +DI, -DI и ADX. +DI представляет силу восходящего тренда, -DI представляет силу нисходящего тренда, и их перекресток может определять текущее направление тренда; ADX представляет силу тренда, чем выше значение, тем более очевидна тенденция. Однако ADX не хорошо идентифицирует диапазоны низкой волатильности, поэтому эта стратегия устраняет определение ADX и использует только перекрестки +DI и -DI для определения направления тренда.
Для того, чтобы отфильтровать ложные сигналы, генерируемые в колебаниях диапазона, индикатор DPO вводится для вспомогательного суждения. Индикатор DPO представляет степень отклонения цены от ее средней рельсы. Когда цена находится выше средней рельсы, DPO является положительным, а когда ниже, то отрицательным. Эта стратегия использует положительность и отрицательность индикатора DPO, чтобы судить, находится ли он в настоящее время в тренде. Если индикатор DMI пересекается, но индикатор DPO близок к уровню 0, он определяется как колебание и не генерируется никакой торговый сигнал.
В частности, логика суждения:
Когда +DI пересекает -DI, это золотой крест, указывающий на бычий рынок. В это время, если индикатор DPO больше 0, он подтверждает, что в настоящее время он находится в восходящей тенденции, и генерируется длинный сигнал.
Когда -DI пересекается ниже +DI, это мертвый крест, указывающий на медвежий рынок. В это время, если индикатор DPO меньше 0, он подтверждает, что в настоящее время он находится в нисходящем тренде, и генерируется короткий сигнал.
Если +DI/-DI пересекается, но показатель DPO близок к 0, он определяется как колебание и не генерируется сигнал.
Наибольшее преимущество этой комбинированной стратегии заключается в ее высокой точности в выявлении тенденций, генерируя торговые сигналы только тогда, когда происходят реальные обратные тенденции, избегая таким образом повторных потерь в колеблющихся интервалах.
Использование индикатора DMI для определения направления и силы тренда является зрелым и надежным техническим индикатором.
С помощью индикатора DPO фильтруйте ложные сигналы в колебаниях диапазона, генерируйте сигналы только при формировании тренда, избегая потерь.
Объединение нескольких показателей может служить взаимной проверкой и повысить надежность сигналов.
Логика стратегии проста и легко понять и реализовать, подходит для автоматизированной или ручной торговли.
Поскольку он торгует только тенденциями, он может получить относительно высокий коэффициент риска и вознаграждения.
Хотя это очень надежная стратегия, следует отметить следующие риски:
Внезапные события могут вызвать огромные односторонние движения на рынке, возможно, упуская такие трендовые возможности.
Сам индикатор DMI также может генерировать неправильные сигналы, и этого риска нельзя полностью избежать.
Неправильное настройка параметров показателя DPO также может привести к ошибочным оценкам.
Стоимость торговли оказывает определенное влияние на прибыль, поэтому частота торговли должна контролироваться.
Эта стратегия еще может быть оптимизирована:
Различные комбинации параметров могут быть протестированы, чтобы найти оптимальные параметры для уменьшения задержки сигнала и увеличения уровня прибыли.
Может быть объединен с другими индикаторами, такими как KDJ, MACD и т. д., для проверки для улучшения точности сигнала.
Параметры адаптации могут быть установлены в соответствии с различными сортами, циклами и т. д., чтобы сделать стратегию более адаптивной.
Динамические остановки могут быть настроены для контроля одиночных потерь.
Методы машинного обучения могут быть использованы для оптимизации времени входа и выхода для более высокой доходности.
Эта стратегия сочетает в себе преимущества индикаторов DMI и DPO, чтобы иметь высокую точность в оценке перемены тренда, и может надежно идентифицировать генерирование тенденций. В то же время использование индикатора DPO эффективно фильтрует шум, вызванный колебаниями в диапазоне, избегая неэффективных сделок. Это делает его эффективной стратегией, подходящей для автоматизированной торговли и ручного внедрения. Конечно, есть еще много деталей, которые могут быть дополнительно оптимизированы для лучшей стратегии.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("DMI DPO Guard Strategy", calc_on_order_fills=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, currency="USD", commission_type=strategy.commission.percent, commission_value=0.25) ///Tradingview's DMI indicator logic/// len = input(34, minval=1, title="DI Lookback") up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / trur) minus = fixnan(100 * rma(minusDM, len) / trur) plot(plus, color=color.orange, title="+DI") plot(minus, color=color.aqua, title="-DI") period_ = input(34, title="Length", minval=1) isCentered = input(false, title="Centered") barsback = period_/2 + 1 ma = sma(close, period_) dpo = isCentered ? close[barsback] - ma : close - ma[barsback] plot(dpo, offset = isCentered ? -barsback : 0, title="Detrended Price Oscillator", color=#C0C000) hline(0, title="Zero Line", color = #C0C0C0) long = crossover(plus, minus) and (dpo > 0) short = crossunder(plus, minus) and (dpo < 0) strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short)