Estratégia de negociação de tendências baseada em vários fatores

Autora:ChaoZhang, Data: 2024-01-17 14:02:22
Tags:

img

Resumo

Esta estratégia combina o indicador Moving Average Convergence Divergence (MACD) e o indicador Stochastic Relative Strength Index (Stoch RSI) para determinar a direção da tendência do mercado, indo longo quando a tendência é ascendente e indo curto quando a tendência é descendente.

Estratégia lógica

Esta estratégia utiliza os indicadores MACD e Stoch RSI para determinar a direção da tendência do mercado.

O indicador MACD consiste na linha rápida EMA, linha lenta EMA e a diferença entre eles, refletindo a convergência e divergência de médias móveis de curto e longo prazo.

O indicador Stoch RSI combina os pontos fortes dos indicadores RSI e Stoch para mostrar os níveis de sobrecompra e sobrevenda no mercado.

Esta estratégia usa o MACD e o Stoch RSI nos prazos diários e de 4 horas para determinar a tendência do mercado. Quando ambos os indicadores geram sinais de compra nos gráficos diários e de 4 horas, vá longo. Quando ambos geram sinais de venda, vá curto. Isso pode efetivamente filtrar sinais falsos e melhorar a confiabilidade.

Vantagens

  1. Combinar dois fatores para julgar os movimentos do mercado pode filtrar sinais falsos de forma eficaz e melhorar a precisão do sinal

  2. A validação de sinais em intervalos de tempo altos e baixos (diários e 4H) evita que se faça

  3. Seguir as tendências evita mercados agitados

  4. Lógica de estratégia simples e clara, fácil de entender e executar

Riscos e soluções

  1. A incapacidade de determinar de forma eficaz os pontos de inversão da tendência pode provocar a activação de um stop loss
  • Otimizar parâmetros ou adicionar outros indicadores para julgar
  1. O contrato único não pode diversificar os riscos sistemáticos do mercado
  • Aumentar outros contratos ou ações para diversificar
  1. Não pode determinar o impacto de grandes eventos repentinos
  • Combinar a análise fundamental para aumentar a conscientização sobre os riscos

Orientações de otimização

  1. Ajustar os parâmetros do MACD e do Stoch RSI para otimizar os pontos de entrada e saída

  2. Adicionar estratégias de trailing stop para bloquear os lucros

  3. Adicionar o dimensionamento das posições ao controlo por risco de negociação

  4. Adicionar mais fatores para julgar para melhorar a precisão do sinal

  5. Usar métodos de aprendizagem de máquina para otimizar dinamicamente parâmetros

Resumo

Esta estratégia determina a direção da tendência através de um modelo de fator duplo e valida sinais em todos os prazos. É uma estratégia de tendência relativamente estável e confiável, com certas capacidades de gerenciamento de risco e espaço para erro. Seu desempenho pode ser melhorado adicionando otimização de parâmetros, stop loss, dimensionamento de posição e outros módulos.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='[RS]Khizon (UGAZ) Strategy V0', shorttitle='K', overlay=false, pyramiding=0, initial_capital=100000, currency=currency.USD)
//  ||  Inputs:
macd_src = input(title='MACD Source:',  defval=close)
macd_fast = input(title='MACD Fast Length:',  defval=12)
macd_slow = input(title='MACD Slow Length:',  defval=26)
macd_signal_smooth = input(title='MACD Signal Smoothing:',  defval=9)
srsi_src = input(title='SRSI Source:',  defval=close)
srsi_rsi_length = input(title='SRSI RSI Length:',  defval=14)
srsi_stoch_length = input(title='SRSI Stoch Length:',  defval=14)
srsi_smooth = input(title='SRSI Smoothing:',  defval=3)
srsi_signal_smooth = input(title='SRSI Signal Smoothing:',  defval=3)
//  ||  Strategy Inputs:
trade_size = input(title='Trade Size in USD:', type=float, defval=1)
buy_trade = input(title='Perform buy trading?', type=bool, defval=true)
sel_trade = input(title='Perform sell trading?', type=bool, defval=true)
//  ||  MACD(close, 12, 26, 9):     ||---------------------------------------------||
f_macd_trigger(_src, _fast, _slow, _signal_smooth)=>
    _macd = ema(_src, _fast) - ema(_src, _slow)
    _signal = sma(_macd, _signal_smooth)
    _return_trigger = _macd >= _signal ? true : false
//  ||  Stoch RSI(close, 14, 14, 3, 3)  ||-----------------------------------------||
f_srsi_trigger(_src, _rsi_length, _stoch_length, _smooth, _signal_smooth)=>
    _rsi = rsi(_src, _rsi_length)
    _stoch = sma(stoch(_rsi, _rsi, _rsi, _stoch_length), _smooth)
    _signal = sma(_stoch, _signal_smooth)
    _return_trigger = _stoch >= _signal ? true : false
//  ||-----------------------------------------------------------------------------||
//  ||-----------------------------------------------------------------------------||
//  ||  Check Directional Bias from daily timeframe:
daily_trigger = security('NGAS', 'D', f_macd_trigger(macd_src, macd_fast, macd_slow, macd_signal_smooth) and f_srsi_trigger(srsi_src, srsi_rsi_length, srsi_stoch_length, srsi_smooth, srsi_signal_smooth))
h4_trigger = security('NGAS', '240', f_macd_trigger(macd_src, macd_fast, macd_slow, macd_signal_smooth) and f_srsi_trigger(srsi_src, srsi_rsi_length, srsi_stoch_length, srsi_smooth, srsi_signal_smooth))

plot(title='D1T', series=daily_trigger?0:na, style=circles, color=blue, linewidth=4, transp=65)
plot(title='H4T', series=h4_trigger?0:na, style=circles, color=navy, linewidth=2, transp=0)

sel_open = sel_trade and not daily_trigger and not h4_trigger
buy_open = buy_trade and daily_trigger and h4_trigger
sel_close = not buy_trade and daily_trigger and h4_trigger
buy_close = not sel_trade and not daily_trigger and not h4_trigger
strategy.entry('sel', long=false, qty=trade_size, comment='sel', when=sel_open)
strategy.close('sel', when=sel_close)
strategy.entry('buy', long=true, qty=trade_size, comment='buy', when=buy_open)
strategy.close('buy', when=buy_close)


Mais.