O recurso está a ser carregado... Carregamento...

Tendência da estratégia baseada em sinais cruzados OBV e MA

Autora:ChaoZhang, Data: 2024-04-29 13:48:58
Tags:OBVMASMA

img

Resumo

Esta estratégia, chamada OBVious MA Strategy: Trend Following Strategy Based on OBV and MA Crossover Signals, utiliza o cruzamento entre o indicador de Volume no Balanço (OBV) e médias móveis para gerar sinais de negociação.

Princípios de estratégia

  1. Calcular o valor do indicador OBV: se o preço de fechamento actual for superior ao da vela anterior, adicionar o volume actual ao OBV; caso contrário, subtrair o volume.
  2. Calcular quatro médias móveis do OBV: MA de entrada longa de longo prazo, MA de saída longa de longo prazo, MA de entrada curta de curto prazo e MA de saída curta de curto prazo.
  3. Gerar sinais comerciais:
    • Quando a OBV ultrapassar a MA de entrada longa de longo prazo e o filtro de direção não estiver definido como curto, abrir uma posição longa.
    • Quando o OBV cruzar abaixo da MA de saída longa de longo prazo, fechar a posição longa.
    • Quando o OBV cruzar abaixo da MA de entrada curta de curto prazo e o filtro de direção não estiver definido como longo, abrir uma posição curta.
    • Quando o OBV ultrapassar o MA de saída curta de curto prazo, fechar a posição curta.
  4. Gerenciamento de negociações: se for gerado um sinal oposto, a posição original será fechada antes de abrir uma nova posição.

Vantagens da estratégia

  1. Utilize plenamente os principais sinais de tendência da OBV para estabelecer posições no início de uma tendência.
  2. A separação dos MAs de entrada e saída permite a otimização independente do calendário de entrada e saída.
  3. A lógica do código é simples e clara, fácil de compreender e melhorar.
  4. A introdução de um filtro de direcção pode evitar trocas frequentes e reduzir os custos.

Riscos estratégicos

  1. Falta de outros indicadores de confirmação, o que pode gerar sinais falsos.
  2. Falta de stop-loss e gestão de posições, enfrentando o risco de perdas amplificadas no single trade.
  3. A selecção inadequada dos parâmetros afetará o desempenho da estratégia.Os parâmetros devem ser otimizados com base nas diferentes características e prazos do mercado.

Orientações para a otimização da estratégia

  1. Considerar a introdução de filtros de tendência, tais como direção MA, ATR, etc., para melhorar a qualidade do sinal.
  2. Podem ser utilizados diferentes tipos de MAs no OBV, como EMA, WMA, etc., para capturar tendências de velocidades variáveis.
  3. Otimizar a gestão de posições, como por exemplo, utilizar uma estratégia de escala para adicionar posições quando a força da tendência aumenta e reduzir as posições quando diminui.
  4. Combinar com outros indicadores de volume e preço, como MVA, PVT, etc., para construir sinais conjuntos para melhorar as taxas de vitória.

Resumo

Esta estratégia demonstra um método simples de seguimento de tendências baseado em cruzamentos de OBV e MA. Suas vantagens são lógica clara, captura de tendências em tempo hábil e controle de retenção flexível por meio de MAs de entrada e saída separados. No entanto, suas desvantagens incluem falta de medidas de controle de risco e métodos de confirmação de sinal. Melhorias podem ser feitas em áreas como filtragem de tendências, otimização de parâmetros, gerenciamento de posição e sinais conjuntos para obter um desempenho de estratégia mais robusto. Esta estratégia é mais adequada como um sinal orientador para ser usado em conjunto com outras estratégias.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ThousandX_Trader

//@version=5
strategy(title="OBVious MA Strategy [1000X]", overlay=false, 
         initial_capital=10000, margin_long=0.1, margin_short=0.1,
         default_qty_type=strategy.percent_of_equity, default_qty_value=100,
         slippage=1, commission_type=strategy.commission.percent, commission_value=0.1)

// Direction Input ///
tradeDirection = input.string("long", title="Direction", options=["long", "short"], group = "Direction Filter")

    ///////////////////////////////////////
   //  1000X OBV MA INDICATOR           //
  ///////////////////////////////////////

// OBV Trend Length Inputs //
long_entry_length = input(190, title="Long Entry MA Length", group = "Moving Average Settings")
long_exit_length = input(202, title="Long Exit MA Length", group = "Moving Average Settings")
short_entry_length = input(395, title="Short MA Entry Length", group = "Moving Average Settings")
short_exit_length = input(300, title="Short Exit MA Length", group = "Moving Average Settings")

// OBV Calculation
obv = ta.cum(ta.change(close) >= 0 ? volume : -volume)

// Calculate OBV Moving Averages
obv_ma_long_entry = ta.sma(obv, long_entry_length)
obv_ma_long_exit = ta.sma(obv, long_exit_length)
obv_ma_short_entry = ta.sma(obv, short_entry_length)
obv_ma_short_exit = ta.sma(obv, short_exit_length)

   ///////////////////////////////////////
  //         STRATEGY RULES            //
 ///////////////////////////////////////

longCondition = ta.crossover(obv, obv_ma_long_entry) and tradeDirection != "short" and strategy.position_size <= 0
longExitCondition = ta.crossunder(obv, obv_ma_long_exit)
shortCondition = ta.crossunder(obv, obv_ma_short_entry) and tradeDirection != "long" and strategy.position_size >= 0
shortExitCondition = ta.crossover(obv, obv_ma_short_exit)

  ///////////////////////////////////////
 //         ORDER EXECUTION           //
///////////////////////////////////////

// Close opposite trades before entering new ones
if (longCondition and strategy.position_size < 0)
    strategy.close("Short Entry")

if (shortCondition and strategy.position_size > 0)
    strategy.close("Long Entry")

// Enter new trades
if (longCondition)
    strategy.entry("Long Entry", strategy.long)

if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

// Exit conditions
if (longExitCondition)
    strategy.close("Long Entry")

if (shortExitCondition)
    strategy.close("Short Entry")

  ///////////////////////////////////////
 //            PLOTTING               //
///////////////////////////////////////

// Plot OBV line with specified color
plot(obv, title="OBV", color=color.new(#2962FF, 0), linewidth=1)

// Conditionally plot Long MAs with specified colors based on Direction Filter
plot(tradeDirection == "long" ? obv_ma_long_entry : na, title="Long Entry MA", color=color.new(color.rgb(2, 130, 228), 0), linewidth=1)
plot(tradeDirection == "long" ? obv_ma_long_exit : na, title="Long Exit MA", color=color.new(color.rgb(106, 168, 209), 0), linewidth=1)

// Conditionally plot Short MAs with specified colors based on Direction Filter
plot(tradeDirection == "short" ? obv_ma_short_entry : na, title="Short Entry MA", color=color.new(color.rgb(163, 2, 227), 0), linewidth=1)
plot(tradeDirection == "short" ? obv_ma_short_exit : na, title="Short Exit MA", color=color.new(color.rgb(192, 119, 205), 0), linewidth=1)


Relacionados

Mais.