Динамическая стратегия стоп-лосса передвижной средней

Автор:Чао Чжан, Дата: 2024-01-29 15:52:43
Тэги:

img

Обзор

Эта стратегия использует идею динамической последующей остановки, основанной на ATR и ценовых экстремалах для расчета длинных и коротких линий стоп-лосса. В сочетании с идеей Chandelier Exit, она определяет длинное/короткое направление на основе прорыва линии стоп-лосса. Когда линия стоп-лосса выходит вверх, она рассматривается как быстрая и длинная вход. Когда линия стоп-лосса выходит вниз, она рассматривается как медвежий и короткий вход.

Стратегия имеет как функции управления стоп-лосом, так и функции оценки сигналов входа.

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

Стратегия состоит из следующих основных частей:

  1. Расчет длинных/коротких линий стоп-лосса на основе ATR

    На основе длительности периода ATR, определенного пользователем, и множителя мультипликатора, рассчитывается ATR в режиме реального времени.

     longStop = Highest - ATR  
     shortStop = Lowest + ATR
    
  2. Судите о направлении торговли по прорыву

    Сравните линии стоп-лосса между предыдущей и текущей панелью.

     Long stop-loss line breakout upwards, long entry  
     Short stop-loss line breakout downwards, short entry   
    
  3. Установка стоп-лосса и прибыли на основе соотношения риск-вознаграждение

    На основе определённого пользователем соотношения риск-вознаграждение riskRewardRatio расстояние остановки потери и расстояние получения прибыли рассчитываются на основе ATR. При открытии позиций устанавливаются ордер на остановку потерь и ордер на получение прибыли.

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

Преимущества этой стратегии включают:

  1. Динамическая стоп-задержка

    Принятие динамических линий остановки потерь помогает своевременно остановить потерю и контролировать риск снижения.

  2. Двойные функции

    Линия стоп-лосса служит как инструментом управления стоп-лосом, так и судьей условий входа, уменьшая сложность стратегии.

  3. Коэффициент риска и прибыли, поддающийся настройке

    Преследуйте более высокую прибыль с заранее определенным соотношением риск-вознаграждение.

  4. Легко понять и расширить

    Простая структура, легко понять и оптимизировать для расширения.

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

Для этой стратегии могут возникнуть некоторые риски:

  1. Двусторонние риски

    В качестве двусторонней торговой стратегии, она несет как длинный, так и короткий риск.

  2. Зависимость от параметров ATR

    Параметры ATR напрямую влияют на линии стоп-лосса и частоту торговли. Неправильные настройки могут привести к слишком широкому стоп-лоссу или слишком высокой частоте торговли.

  3. Адаптация к тенденциям

    Стратегия лучше подходит для сценариев с резким прорывом, но не подходит для сценариев сильного тренда.

Оптимизация для устранения вышеуказанных рисков:

  1. Включить индикаторы тенденции

    Включить MA и другие индикаторы тенденции для определения тенденции рынка, избегать торговли против тенденций.

  2. Оптимизация параметров

    Оптимизировать комбинации параметров ATR и соотношения риск-прибыль для более разумного стоп-лосса и получения прибыли.

  3. дополнительные фильтры

    Добавление фильтров условий объема торговли или волатильности для обеспечения качества торговли.

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

Есть еще возможности для дальнейшей оптимизации стратегии:

  1. Включить машинное обучение

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

  2. Создать безрисковый портфель с опционами

    Использовать опционы для хеджирования колебаний цен на базовые активы и создания безрисковых арбитражных портфелей.

  3. Арбитраж между различными активами на рынке

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

  4. Алгоритмическая торговля

    Используйте алгоритмические торговые системы для эффективного тестирования стратегий и торговли.

Заключение

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


/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true)

// Chandelier Exit Logic
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
useClose = input.bool(title='Use Close Price for Extremums', defval=true)

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

// Risk-Reward Ratio
riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1)

// Calculate Take Profit and Stop Loss Levels
takeProfitLevel = atr * riskRewardRatio
stopLossLevel = atr

// Entry Conditions
longCondition = dir == 1 and dir[1] == -1
shortCondition = dir == -1 and dir[1] == 1

// Entry Signals
if (longCondition)
    strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel)
if (shortCondition)
    strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel)

longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green)
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red)

midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)

fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling')
fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling')

// Alerts
if (dir != dir[1])
    strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!")
if (longCondition)
    strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!")
if (shortCondition)
    strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")


Больше