Супер-Дневная стратегия переворота тренда

Автор:Чао Чжан, Дата: 2024-02-22 16:22:28
Тэги:

img

Обзор

Супер-Тренд ежедневная стратегия обратного движения - это количественная стратегия торговли, которая использует индикатор Супер-Тренда для определения рыночных тенденций, объединяет прорыв цены и средний истинный диапазон для расчета стоп-лосса, и использует индикатор скорости изменения цены для фильтрации сигналов Супер-Тренда. Эта стратегия подходит для суточных и более высоких временных рамок и может использоваться на рынках, таких как криптовалюты и акции.

Логика стратегии

Основным индикатором этой стратегии является индикатор Super Trend. Индикатор Super Trend основан на среднем истинном диапазоне (ATR) и может более четко определить направление рыночных тенденций.

Стратегия использует индикатор коэффициента изменения цены (ROC) для фильтрации индикатора Super Trend, чтобы избежать недействительных сигналов. Участвуйте только в сигналах Super Trend, когда волатильность цены велика, в противном случае не участвуйте.

Для стоп-лосса стратегия предусматривает два метода стоп-лосса: фиксированный процент стоп-лосса и адаптивный стоп-лосс на основе ATR. Фиксированный стоп-лосс прост и прямой.

Условия входа - это обратный ход индикатора Super Trend, а индикатор изменения курса цены проходит через фильтр. Условия выхода - это то, что Super Trend снова переворачивается или прорывается через линию стоп-лосса. Стратегия придерживается принципа отслеживания тренда и позволяет только одну позицию в каждом направлении.

Анализ преимуществ

Самое большое преимущество этой стратегии заключается в том, что индикатор Super Trend обладает большей ясностью и стабильностью в оценке направления тренда по сравнению с обычными скользящими средними, с меньшим шумом.

Адаптивный механизм стоп-лосса ATR также позволяет стратегии адаптироваться к более широкой рыночной среде.

По результатам испытаний, эта стратегия работает исключительно хорошо на бычьем рынке.

Анализ рисков

Основной риск, с которым сталкивается эта стратегия, заключается в неправильном оценке переворота тренда, который может пропустить сигналы переворота или генерировать ненужные сигналы переворота.

Кроме того, стоп-лосс, установленный слишком широко, также может привести к большим потерям.

Для устранения этих рисков, период расчета ATR может быть сокращен или скорректирован мультипликатор остановки потери ATR, а также могут быть добавлены дополнительные показатели для определения ключевых зон поддержки/сопротивления, чтобы избежать вводящих в заблуждение сигналов из этих зон.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Корректировать параметры индикатора Super Trend с целью оптимизации периода ATR и кратных ATR с целью упрощения линии Super Trend.

  2. Корректировать параметры индикатора изменения курса цен для оптимизации периода и порога изменения курса для снижения ложных сигналов.

  3. Попробуйте различные механизмы остановки потери, такие как остановки отслеживания, или оптимизируйте амплитуду остановки потери фиксированных остановок.

  4. Добавление дополнительных показателей оценки для определения ключевых показателей поддержки/сопротивления и избежания ошибочной оценки переворотов тренда.

  5. Испытывать настройки параметров и их воздействие на различные продукты для определения оптимальной комбинации параметров.

  6. Провести оптимизацию обратного теста, чтобы найти наилучшие параметры.

Заключение

В целом, Супер-Тренд ежедневная стратегия обратного движения является относительно стабильной и надежной следующей стратегии тренда. Он сочетает в себе индикатор Супер-Тренда и индикатор изменения цены для фильтрации, который может эффективно определить направление средне- и долгосрочных тенденций. Адаптивный механизм стоп-лосса 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)

Больше