Estratégia de captura de balanço do RSI de tendência

Autora:ChaoZhang, Data: 2024-02-04 10:48:38
Tags:

img

Resumo

A estratégia de captura de balanço do RSI é uma estratégia de negociação de balanço que combina RSI, MACD e análise de volume para capturar oscilações do mercado.

Princípios

Os principais indicadores desta estratégia são RSI, MACD e volume.

  1. Julgar se o RSI entrou em zonas de sobrecompra ou sobrevenda para confirmar reversões iminentes;

  2. Usar cruzes de ouro e cruzes de morte do MACD para determinar a tendência dos preços e as alterações de dinâmica como condições de entrada suplementares;

  3. Aproveitar as rupturas de volume para identificar as rupturas verdadeiras e evitar sinais falsos.

Os sinais de negociação são gerados somente quando todas as três condições são atendidas simultaneamente. A direção do longo ou curto depende da direção da quebra de preço. Isso efetivamente filtra falhas e melhora a confiabilidade do sinal.

Vantagens

A maior vantagem desta estratégia reside em sua excelente gestão de risco. Regras rigorosas de gestão de capital, como stop loss móvel, stop loss fixo, tamanho de negociação fixo, são definidas para controlar efetivamente o risco de negociações individuais e garantir a segurança do capital. Além disso, a estratégia também incorpora volume para filtrar falsos breakouts e evitar negociações reversas desnecessárias. Portanto, esta estratégia pode alcançar lucros constantes independentemente das condições do mercado.

Riscos

Nenhuma estratégia de negociação pode evitar completamente os riscos de mercado e esta estratégia não é exceção.

  1. Se o nível de stop loss for penetrado diretamente, grandes perdas serão incorridas.

  2. Configurações incorretas de parâmetros: configurações incorretas de parâmetros RSI, MACD podem levar a uma deterioração da qualidade do sinal e a sinais errôneos excessivos.

Em resposta aos riscos acima referidos, as medidas de atenuação incluem a otimização de algoritmos de stop loss através da introdução de algoritmos de rastreamento de stop loss, etc.; entretanto, devem ser realizados repetidos backtesting e otimização de parâmetros-chave para garantir a estabilidade e a fiabilidade.

Orientações de otimização

As principais direcções de otimização baseadas no quadro estratégico actual:

  1. Introduzir algoritmos de aprendizagem automática para obter um acompanhamento dinâmico dos níveis de stop loss, evitando os riscos associados à eliminação de stop loss;

  2. Incorporar mais indicadores de filtro, tais como Bandas de Bollinger, KD, para melhorar a qualidade do sinal e reduzir as negociações reversas desnecessárias;

  3. Otimizar as estratégias de gestão de capitais através do ajustamento dinâmico do tamanho das posições, permitindo um melhor controlo dos impactos de acontecimentos abruptos;

  4. Aproveitar a análise avançada de dados para localizar automaticamente os parâmetros ideais, reduzindo a carga de trabalho de teste manual;

  5. Incorporar sinais de transacção baseados nos fluxos de encomendas, explorando dados de mercado de nível mais profundo para melhorar a eficácia da estratégia.

Conclusão

Em resumo, a Estratégia de Captura do Swing RSI é uma estratégia de negociação de curto prazo altamente prática. Ela leva em conta a tendência de preços e cenários de sobrecompra / sobrevenda, e com filtragem de volume, forma um sistema de negociação relativamente estável. Sob controle de risco rigoroso, essa estratégia pode alcançar lucros constantes em várias condições de mercado, tornando-se digna de pesquisa e prática aprofundada para os investidores.


/*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)


Mais.