Estratégia de negociação de breakout com base em médias móveis


Data de criação: 2023-11-28 13:50:49 última modificação: 2023-11-28 13:50:49
cópia: 2 Cliques: 697
1
focar em
1617
Seguidores

Estratégia de negociação de breakout com base em médias móveis

Visão geral

Esta é uma estratégia de negociação de ruptura baseada na média móvel. Ela produz um sinal de negociação quando o preço quebra a média, calculando a média de preços de um determinado período como a média.

Princípio da estratégia

A estratégia é baseada principalmente no indicador de média móvel. Ela usa a função sma para calcular o preço de fechamento médio em um determinado período, obtendo a média móvel. Quando o preço de fechamento mais recente quebra a média móvel de baixo para cima, gera um sinal de compra; Quando a fechamento mais recente quebra a média móvel de cima para baixo, gera um sinal de venda.

Especificamente, define na estratégia a fonte de cálculo da média móvel (preço de fechamento recente) e o comprimento do período, obtendo uma sequência de dados de média móvel. Em seguida, define duas condições: criar uma ordem de compra quando o preço atravessa a média acima; criar uma ordem de venda quando o preço atravessa a média abaixo.

Análise de vantagens

Esta é uma estratégia simples e prática de acompanhamento de tendências, com as seguintes vantagens:

  1. A ideia é clara, fácil de entender e ajustar os parâmetros.
  2. A média móvel é um indicador técnico comum e confiável que filtra o ruído do mercado e identifica tendências.
  3. Ao mesmo tempo, o Stop Loss é configurado para bloquear parte dos lucros e controlar o risco.
  4. O que é necessário é apenas um parâmetro simples para ser executado, para ser aplicado a entrada de quantificação.

Análise de Riscos

Embora a estratégia tenha muitos benefícios, ela também apresenta alguns riscos:

  1. A média móvel é propensa a atraso e pode perder a reversão de curto prazo.
  2. A situação é muito complicada, e as pessoas que não têm cuidado com o ambiente podem ser aprisionadas.
  3. Sem otimização de parâmetros, a configuração inadequada dos parâmetros afetará o desempenho da estratégia.
  4. Não foi filtrado em combinação com outros indicadores, existindo uma certa taxa de erro.

Para controlar esses riscos, podemos usar filtros de otimização em combinação com outros indicadores, introduzir discernimentos de tendências de curto prazo em grande escala ou usar métodos de aprendizado de máquina para encontrar o melhor conjunto de parâmetros.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Adicionar outros indicadores técnicos de julgamento, formar um sistema de negociação, aumentar a taxa de vitória da estratégia. Por exemplo, adicionar indicadores auxiliares de julgamento, como MACD, KD.

  2. Adesão a um mecanismo de stop loss. Utilize tracking stop loss ou time stop loss para bloquear os lucros e evitar a expansão dos prejuízos.

  3. Optimizar os parâmetros. Alterar os parâmetros do ciclo da média móvel para encontrar a melhor combinação de parâmetros. Também é possível testar diferentes tipos de média móvel.

  4. Aumentar o julgamento de aprendizagem de máquina. Usar algoritmos como florestas aleatórias, LSTM e outros para combinar vários fatores para julgar a direção da tendência.

  5. Optimizar a lógica de entrada e saída. Definir condições de filtragem de tendências e evitar operações de reversão no final da tendência. Considere o uso de lógica de liquidação por lotes.

Resumir

Esta estratégia de ruptura de equilíbrio móvel é, em geral, muito adequada como uma estratégia de entrada para a quantificação de transações. Sua idéia é simples, fácil de entender e operar, com um certo efeito no campo de batalha. Ao mesmo tempo, há muito espaço para testes e otimização posteriores.

Código-fonte da estratégia
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-22 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//  |-- Initialize Strategy Parameters:
strategy( 
     // |-- Strategy Title.
     title='[Tutorial][RS]Working with orders', 
     // |-- if shorttitle is specified, it will overwrite the name on the chart window.
     shorttitle='WwO', 
     // |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs.
     overlay=true, 
     // |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity)
     default_qty_type=strategy.cash, 
     // |-- Value to use for default trade size
     default_qty_value=1000, 
     // |-- Default Account size 
     initial_capital=100000, 
     // |-- Account Currency parameter
     currency=currency.USD
     )

//  |-- Strategy Profit/loss parameters:
profit = input(defval=5000, title='Take Profit')
loss = input(defval=5000, title='Stop Loss')
ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).')
percent = input(defval=50.0, title='Percentage of position to take profit.')
//  |-- Signal Parameters:
//  |
//  |-- Moving Average input source and length parameters.
src = input(defval=close)
length = input(defval=100)
//  |-- Moving Average Data series.
ma = sma(src, length)

//  |-- Condition for triggering a buy(long) order(trade).
if crossover(src, ma)
    //  |-- Create the order.
    strategy.order(id='Buy', long=true)
    //  |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
    strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio)
    //  |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
    strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss)
if crossunder(src, ma)
    //  |-- Create the order.
    strategy.order(id='Sell', long=false)
    //  |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
    strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio)
    //  |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
    strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss)

//  |-- Output Functions.
plot(series=ma, title='MA', color=black)