
Супертенденциальная стратегия ежедневного разворота (Super Trend Daily Reversal Strategy) - это количественная торговая стратегия, которая использует индикатор супертенденции для определения тенденции рынка, в сочетании с расчетом ценных прорывов и среднего реального диапазона колебаний, а также фильтрации сигналов супертенденциальности с помощью индикатора изменения цены. Эта стратегия применима к дневному и более высокому временному циклу и может использоваться в таких рынках, как цифровые валюты и акции.
Центральным показателем этой стратегии является индикатор супертенденции (Super Trend Indicator). Индикатор супертенденции основан на среднем реальном диапазоне колебаний (ATR), который позволяет более четко определять направление рыночной тенденции.
Эта стратегия сопровождается использованием индикатора изменения скорости цены (ROC) для фильтрации индикатора супертенденции, чтобы избежать неэффективного сигнала. Принимать участие в сигнале супертенденции только тогда, когда цена колеблется, иначе не участвовать.
С точки зрения остановки убытков, стратегия предлагает два способа остановки: фиксированный стоп-процент и автоматическое сокращение стоп-убытков на основе ATR. Фиксированный стоп-убыток прост и прямой, а ATR-стоп-убыток может быть скорректирован в соответствии с волатильностью рынка.
Входные условия - это сверхтрендовый показатель, который переворачивается, и показатель изменения цены, который проходит через фильтр. Выходные условия - это сверхтрендовый показатель, который снова переворачивается или прорывает линию остановки. Эта стратегия следует принципу отслеживания тенденций, в каждом направлении допускается только одна позиция.
Наибольшим преимуществом этой стратегии является то, что она использует индикатор супертенденции для определения направления тенденции с большей четкостью и стабильностью, а также меньшей шумихой по сравнению с обычной подвижной средней. Кроме того, добавление стратегии к индикатору коэффициента изменения цен эффективно отфильтровывает некоторые ложные сигналы.
Адаптивный механизм ATR также позволяет стратегии адаптироваться к более широким рыночным условиям. При усилении волатильности стоп автоматически расширяется, максимально блокируя прибыль.
По результатам тестирования, эта стратегия превосходно работала в бычьих рынках. Высокая выигрышная вероятность в крупномасштабных длиннолинейных тенденциях с длинным последовательным периодом прибыли.
Основная опасность, с которой сталкивается эта стратегия, заключается в том, что она может ошибочно оценить обратный тренд, что может привести к пропуску обратного сигнала или созданию ненужного обратного сигнала. Это обычно происходит, когда цена повторяет поперечную корректировку вблизи ключевых областей поддержки или сопротивления.
Кроме того, слишком мягкая стоп-установка также может привести к увеличению убытков. Стоп ATR корректируется в зависимости от волатильности рынка, поэтому в случае рыночных внезапных событий стоп-убытки могут быть более широкими.
В связи с вышеуказанными рисками можно уместно сократить циклы вычисления ATR или скорректировать коэффициент кратности ATR. Также можно добавить дополнительные показатели, определяющие ключевые зоны поддерживающего сопротивления, чтобы избежать выпуска вводящих в заблуждение сигналов в этих областях.
Эта стратегия может быть оптимизирована в следующих аспектах:
Настройка параметров индикатора супертенденции, оптимизация ATR-циклов и ATR-множителей, чтобы сделать супертенденционную линию более гладкой.
Корректировка параметров индикатора изменения цены, оптимизация циклов и понижения значения изменения, уменьшение ложных сигналов.
Попробуйте различные механизмы остановки, такие как отслеживание остановки или оптимизация остановки для фиксированной остановки.
Добавление дополнительных критериев оценки, определение ключевых сопротивлений поддержки и предотвращение ошибок в оценке обратного тренда.
Тестирование параметров различных сортов и их эффективности для поиска оптимальных комбинаций.
Оптимизируйте обратную связь, чтобы найти оптимальные параметры.
Супертенденциальная линейная обратная стратегия в целом является более стабильной и надежной стратегией для отслеживания тенденций. Она фильтруется в сочетании с индикатором супертенденциальности и индикатором изменения цены, что позволяет эффективно идентифицировать направление средней и долгой линейных тенденций.
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Super Trend Daily BF 🚀", overlay=true, precision=2, 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 ///////////////
_1 = input(false, "════════ Test Period ═══════")
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(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// Super Trend /////////////
_2 = input(false, "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)
atr = mult * atr(length)
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir
///////////// Rate Of Change /////////////
_3 = input(false, "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length", minval=1)
pcntChange = input(6, "ROC % Change", 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 = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 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])
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false, "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier')
atr1 = atr(atrLkb)
longStop1 = 0.0
longStop1 := short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[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 = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)