В процессе загрузки ресурсов... загрузка...

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

Автор:Чао Чжан, Дата: 2024-04-12 16:19:20
Тэги:HMAMACDATRРСИOBVVMA

基于成交量均线的自适应金字塔动态止盈止损交易策略

Обзор

Стратегия сочетает в себе несколько технических индикаторов, таких как Hull Moving Average (HMA), Moving Average Convergence Spread (MACD), Average True Range (ATR), Relative Strength Index (RSI), Energy Wave (OBV) и Moving Average of Turnover (MWA), для комплексного анализа этих индикаторов и выявления рыночных тенденций и потенциальных входных возможностей. В то же время стратегия также использует такие средства управления рисками, как пирамидальный рост, динамические стоп-потери и мобильные стоп-потери.

Принципы стратегии

  1. Расчет показателей, таких как HMA, MACD, ATR, RSI, OBV и движущийся средний объем
  2. Определение многопространственных условий на основе скрещивания быстрой и медленной линий MACD, OBV и их отношений к движущейся средней, уровня RSI и сравнения сделок с их средней.
  3. Установка максимального количества пирамидных позиций и их пропорций на каждое повышение, постепенное повышение по мере продолжения тренда
  4. Динамически корректировать уровень остановки и остановки по ATR и защищать прибыль с помощью мобильной стратегии остановки
  5. Динамический контроль позиций на основе учетных прав, рисковых пропорций и ATR, рассчитываемых на каждое открытие
  6. На графике изображена горизонтальная линия остановки и уменьшения потерь, которая наглядно показывает контроль рисков

Стратегические преимущества

  1. Комбинированное суждение по нескольким показателям повышает надежность сигнала: стратегия учитывает множество факторов, таких как цена, тенденции, динамика и объем сделок, и повышает надежность торговых сигналов путем совместного подтверждения нескольких показателей.
  2. Адаптивное управление позициями, динамическое управление рисками: в зависимости от факторов, таких как аккаунтная прибыль, риск-пропорции и ATR, стратегия может динамически корректировать количество открытых позиций, автоматически уменьшая позиции при усилении рыночных колебаний, что позволяет эффективно контролировать риск.
  3. Пирамида хеджирования, полное использование трендовых возможностей: после установления тренда стратегия повышает свою рентабельность путем постепенного наращивания и максимального участия в трендовом рынке.
  4. Динамический стоп-потери, своевременный контроль потерь и защита прибыли: стратегия в соответствии с изменениями ATR в режиме реального времени корректирует уровень стоп-потери, своевременный контроль прибыли при изменении тренда, а также защищает уже полученную прибыль с помощью мобильных стоп-потери, что эффективно снижает откат стратегии.
  5. Интуитивные графики показывают, что это удобно для мониторинга и принятия решений: стратегии на графиках изображают ключевые показатели и горизонты остановки и остановки, что позволяет трейдерам интуитивно следить за движением рынка и выполнением стратегии, предоставляя основу для своевременного изменения стратегии.

Стратегические риски

  1. Риск оптимизации параметров: политика содержит несколько параметров, которые могут привести к плохой работе стратегии, если они будут выбраны неправильно. Таким образом, в практическом применении параметры должны быть оптимизированы и протестированы, чтобы обеспечить надежность стратегии.
  2. Риск изменения рыночной среды: стратегия ретранслируется и оптимизируется на основе исторических данных, но рыночная среда может измениться, что приведет к тому, что стратегия будет сильно отличаться от ее прошлой. Поэтому необходимо регулярно оценивать ее эффективность и, если необходимо, корректировать ее.
  3. Риск черного цыпленка: экстремальные рыночные условия (например, резкий обвал) могут привести к появлению более крупного отзыва в стратегии. Чтобы справиться с этим риском, можно рассмотреть возможность включения в стратегию дополнительных мер контроля риска, таких как установка максимального отзыва и прекращение торговли после достижения порога.
  4. Риск сверхсоответствия: если параметры стратегии слишком сложны, может возникнуть феномен соответствия, когда стратегия хорошо работает в исторических данных, но плохо работает в практическом применении. Чтобы избежать сверхсоответствия, можно использовать методы оценки стратегии, такие как перекрестная проверка.

Оптимизация стратегии

  1. Динамическая оптимизация параметров: учитывать использование методов, таких как машинное обучение, чтобы в соответствии с изменением рыночной среды в режиме реального времени корректировать параметры стратегии, повышая адаптивность стратегии.
  2. Многорыночная многовариантная применимость: расширение стратегии на большее количество рынков и сортов, повышение устойчивости стратегии путем децентрализации инвестиций.
  3. В сочетании с фундаментальным анализом: на основе технического анализа, включая учет основных факторов, таких как макроэкономика, отраслевые тенденции, повышается целостность стратегии.
  4. Присоединяйтесь к анализу настроения рынка: внедряйте индикаторы настроения рынка, такие как индекс паники и другие, чтобы поймать экстремальные изменения настроения рынка и предоставить больше торговых возможностей для стратегии.
  5. Оптимизация мер по контролю риска: дальнейшее совершенствование системы контроля риска, например, внедрение механизмов адаптации к стратегии прекращения убытков и повышение способности стратегии к управлению рисками.

Подведение итогов

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


/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Enhanced Trading Strategy v5 with Visible SL/TP", overlay=true)

// Input settings
hma_length = input(9, title="HMA Length")
fast_length = input(12, title="MACD Fast Length")
slow_length = input(26, title="MACD Slow Length")
siglen = input(9, title="Signal Smoothing")
atr_length = input(14, title="ATR Length")
rsi_length = input(14, title="RSI Length")
obv_length = input(10, title="OBV Length")
volume_ma_length = input(10, title="Volume MA Length")

// Pyramiding inputs
max_pyramid_positions = input(3, title="Max Pyramid Positions")
pyramid_factor = input(0.5, title="Pyramid Factor")

// Risk and Reward Management Inputs
risk_per_trade = input(1.0, title="Risk per Trade (%)")
atr_multiplier_for_sl = input(1.5, title="ATR Multiplier for Stop Loss")
atr_multiplier_for_tp = input(3.0, title="ATR Multiplier for Take Profit")
trailing_atr_multiplier = input(2.0, title="ATR Multiplier for Trailing Stop")

// Position sizing functions
calc_position_size(equity, risk_pct, atr) =>
    pos_size = (equity * risk_pct / 100) / (atr_multiplier_for_sl * atr)
    pos_size

calc_pyramid_size(current_size, max_positions) =>
    pyramid_size = current_size * (max_positions - strategy.opentrades) / max_positions
    pyramid_size

// Pre-calculate lengths for HMA
half_length = ceil(hma_length / 2)
sqrt_length = round(sqrt(hma_length))

// Calculate indicators
hma = wma(2 * wma(close, half_length) - wma(close, hma_length), sqrt_length)
my_obv = cum(close > close[1] ? volume : close < close[1] ? -volume : 0)
obv_sma = sma(my_obv, obv_length)
[macd_line, signal_line, _] = macd(close, fast_length, slow_length, siglen)
atr = atr(atr_length)
rsi = rsi(close, rsi_length)
vol_ma = sma(volume, volume_ma_length)

// Conditions
long_condition = crossover(macd_line, signal_line) and my_obv > obv_sma and rsi > 50 and volume > vol_ma
short_condition = crossunder(macd_line, signal_line) and my_obv < obv_sma and rsi < 50 and volume > vol_ma

// Strategy Entry with improved risk-reward ratio
var float long_take_profit = na
var float long_stop_loss = na
var float short_take_profit = na
var float short_stop_loss = na

if (long_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Long", strategy.long, qty = size)
    long_stop_loss := close - atr_multiplier_for_sl * atr
    long_take_profit := close + atr_multiplier_for_tp * atr
    
if (short_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Short", strategy.short, qty = size)
    short_stop_loss := close + atr_multiplier_for_sl * atr
    short_take_profit := close - atr_multiplier_for_tp * atr

// Drawing the SL/TP lines
// if (not na(long_take_profit))
//     line.new(bar_index[1], long_take_profit, bar_index, long_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], long_stop_loss, bar_index, long_stop_loss, width = 2, color = color.red)

// if (not na(short_take_profit))
//     line.new(bar_index[1], short_take_profit, bar_index, short_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], short_stop_loss, bar_index, short_stop_loss, width = 2, color = color.red)

// Pyramiding logic
if (strategy.position_size > 0)
    if (close > strategy.position_avg_price * (1 + pyramid_factor))
        strategy.entry("Long Add", strategy.long, qty = calc_pyramid_size(strategy.position_size, max_pyramid_positions))

if (strategy.position_size < 0)
    if (close < strategy.position_avg_price * (1 - pyramid_factor))
        strategy.entry("Short Add", strategy.short, qty = calc_pyramid_size(-strategy.position_size, max_pyramid_positions))

// Trailing Stop
strategy.exit("Trailing Stop Long", "Long", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)
strategy.exit("Trailing Stop Short", "Short", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)

// Plots
plot(hma, title="HMA", color=color.blue)
plot(obv_sma, title="OBV SMA", color=color.orange)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)
plotshape(long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="Long")
plotshape(short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="Short")


Содержание

Больше информации