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

Стратегия захвата Swing RSI Trend Riding

Автор:Чао Чжан, Дата: 2024-02-04 10:48:38
Тэги:

img

Обзор

Trend Riding RSI Swing Capture Strategy (Стратегия захвата колебаний RSI) - это стратегия торговли, которая объединяет RSI, MACD и анализ объема для захвата колебаний рынка.

Принципы

Основными показателями этой стратегии являются RSI, MACD и объем.

  1. Оценить, вступил ли RSI в зоны перекупленности или перепроданности, чтобы подтвердить предстоящие переломы;

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

  3. Используйте прорывы объема для выявления истинных прорывов и избегания ложных сигналов.

Торговые сигналы генерируются только при одновременном выполнении всех трех условий. Направление длинного или короткого зависит от направления ценового прорыва. Это эффективно фильтрует ложные прорывы и повышает надежность сигнала.

Преимущества

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

Риски

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

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

  2. Неправильное настройка параметров RSI, MACD может привести к ухудшению качества сигнала и чрезмерным ошибкам.

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

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

Основные направления оптимизации на основе действующей стратегии:

  1. Внедрение алгоритмов машинного обучения для достижения динамического отслеживания уровней стоп-лосса, избегая рисков, связанных с выводом стоп-лосса;

  2. Включить больше фильтрующих индикаторов, таких как диапазоны Боллинджера, KD, чтобы улучшить качество сигнала и сократить ненужные обратные сделки;

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

  4. Использование передовой аналитики данных для автоматического определения оптимальных параметров, сокращение рабочей нагрузки на ручное тестирование;

  5. Включить сигналы транзакций, основанные на потоках заказов, используя более глубокие рыночные данные для повышения эффективности стратегии.

Заключение

Подводя итог, стратегия Trend Riding RSI Swing Capture является очень практичной краткосрочной торговой стратегией. Она учитывает как ценовой тренд, так и сценарии перекупки/перепродажи, и с фильтрацией объема формирует относительно стабильную торговую систему. При строгом контроле рисков эта стратегия может достигать стабильной прибыли в различных рыночных условиях, что делает ее достойной глубокого исследования и практики для инвесторов.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// SwingSync RSI Strategy
// This strategy combines RSI, MACD, and volume analysis to capture swing trading opportunities.
// It includes risk management features to protect your capital.
// Adjust the input parameters and backtest to optimize performance.// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © str0zzapreti

//@version=5
strategy('SwingSync RSI', overlay=true)
// Adjustable Parameters
// var custom_message = input.string('', title='Symbol')
ma_period = input.int(20, title='Moving Average Period')
stop_loss_percent = input.float(1, title='STOP LOSS (%)',step=0.1)
macd_fast_length = input(12, title='MACD Fast Length')
macd_slow_length = input(26, title='MACD Slow Length')
macd_signal_smoothing = input(9, title='MACD Signal Smoothing')
rsi_period = input(14, title='RSI Period')
rsi_overbought = input(70, title='RSI OVERBOUGHT LEVEL')
rsi_oversold = input(30, title='RSI OVERSOLD LEVEL')
volume_ma_period = input(20, title="Volume MA Period")
volume_threshold_percent = input(50, title="Volume Threshold (%)")
slippage = 0.5
risk_per_trade = input(1, title='Risk per Trade (%)')

// Calculating Indicators *
price = close
ma = ta.sma(price, ma_period)
rsi = ta.rsi(price, rsi_period)
vol_ma = ta.sma(volume, volume_ma_period)
[macdLine, signalLine, _] = ta.macd(price, macd_fast_length, macd_slow_length, macd_signal_smoothing)
volume_threshold = vol_ma * (1 + volume_threshold_percent / 100)

// Definitions
volumeCheck = volume > volume_threshold
longRsiCheck = rsi < rsi_overbought
longMovAvgCross = ta.crossover(price, ma)
longMovAvgCheck = price > ma
longMacdCross = ta.crossover(macdLine, signalLine)
longMacdCheck = macdLine > signalLine
shortRsiCheck = rsi > rsi_oversold
shortMovAvgCross = ta.crossunder(price, ma)
shortMovAvgCheck = price < ma
shortMacdCross = ta.crossunder(macdLine, signalLine)
shortMacdCheck = macdLine < signalLine

// Entry Conditions for Long and Short Trades
longCondition = volumeCheck and longRsiCheck and ((longMovAvgCross and longMacdCheck) or (longMacdCross and longMovAvgCheck)) 
shortCondition = volumeCheck and shortRsiCheck and  ((shortMovAvgCross and shortMacdCheck) or (shortMacdCross and shortMovAvgCheck)) 

// Tracking Last Trade Day
var int last_trade_day = na

if longCondition or shortCondition
    last_trade_day := dayofweek

// Calculate can_exit_trade based on day difference
can_exit_trade = dayofweek != last_trade_day

// Entry Orders
var float max_qty_based_on_equity = na
var float qty = na

if longCondition
    max_qty_based_on_equity := strategy.equity / price
    qty := (strategy.equity * risk_per_trade / 100) / price
    if qty > max_qty_based_on_equity
        qty := max_qty_based_on_equity
    strategy.entry('Long', strategy.long, 1)

if shortCondition
    max_qty_based_on_equity := strategy.equity / price
    qty := (strategy.equity * risk_per_trade / 100) / price
    if qty > max_qty_based_on_equity
        qty := max_qty_based_on_equity
    strategy.entry('Short', strategy.short, 1)

// Exit Conditions
exitLongCondition = ta.crossunder(price, ma) or rsi > rsi_overbought
exitShortCondition = ta.crossover(price, ma) or rsi < rsi_oversold

// Calculate take profit and stop loss levels
stopLossLevelLong = strategy.position_avg_price * (1 - stop_loss_percent / 100)
stopLossLevelShort = strategy.position_avg_price * (1 + stop_loss_percent / 100)

// Adjust for slippage
adjusted_stop_loss_long = stopLossLevelLong * (1 + slippage / 100)
adjusted_stop_loss_short = stopLossLevelShort * (1 - slippage / 100)

// Strategy Exit Orders for Long Positions
if strategy.position_size > 0 and can_exit_trade
    if (close < adjusted_stop_loss_long)
        strategy.close('Long', comment='Stop Loss Long')
    if exitLongCondition
        strategy.close('Long', comment='Exit Long')

// Strategy Exit Orders for Short Positions
if strategy.position_size < 0 and can_exit_trade
    if (close > adjusted_stop_loss_short)
        strategy.close('Short', comment='Stop Loss Short')
    if exitShortCondition
        strategy.close('Short', comment='Exit Short')

plot(ma)


Больше