Estratégia de ruptura da média móvel

Autora:ChaoZhang, Data: 2023-11-28 13:50:49
Tags:

img

Resumo

Esta é uma estratégia de negociação de ruptura baseada em médias móveis. Ele calcula o preço médio durante um determinado período como a média móvel. Quando o preço quebra a média móvel, são gerados sinais de negociação.

Estratégia lógica

A estratégia é baseada principalmente no indicador da média móvel. Ele usa a função sma para calcular o preço médio de fechamento durante um período para obter a média móvel. Quando o último preço de fechamento quebra a média móvel para cima, um sinal de compra é gerado. Quando o último preço de fechamento quebra a média móvel para baixo, um sinal de venda é gerado.

Especificamente, define a fonte (preço de fechamento recente) e o comprimento da média móvel na estratégia para obter a seqüência de dados da média móvel. Em seguida, define duas condições: criar uma ordem longa quando o preço cruza acima da média móvel; criar uma ordem curta quando o preço cruza abaixo da média móvel. Depois de criar as ordens, também configura a tomada de lucro e a parada de perda: fecha parte da posição quando a ordem atinge uma taxa de lucro definida e fecha toda a posição quando a ordem atinge o preço de tomada de lucro ou parada de perda pré-definido.

Análise das vantagens

Trata-se de uma estratégia simples e prática, que tem as seguintes vantagens:

  1. A lógica é clara e fácil de entender e ajustar parâmetros.
  2. A média móvel é um indicador técnico comumente utilizado e fiável que pode filtrar o ruído do mercado e identificar tendências.
  3. A fixação de lucro e stop loss ao mesmo tempo pode bloquear alguns lucros e controlar os riscos.
  4. Pode funcionar apenas com parâmetros simples, adequados para o nível de entrada de quantidade.

Análise de riscos

Embora a estratégia tenha muitas vantagens, ainda há alguns riscos:

  1. As médias móveis tendem a atrasar-se e podem perder reversões de curto prazo.
  2. Não considera o ambiente geral do mercado e é propenso a ficar preso.
  3. Nenhuma otimização de parâmetros pode afetar o desempenho da estratégia.
  4. Pode apresentar alguns sinais falsos, uma vez que não são utilizados outros indicadores para a filtragem.

Para controlar esses riscos, podemos otimizar combinando outros indicadores para filtragem, introduzir julgamentos de tendências de mercado de curto prazo ou usar métodos de aprendizagem de máquina para encontrar as combinações ideais de parâmetros.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar outros indicadores técnicos para julgamento para construir um sistema de negociação e melhorar a taxa de vitória.

  2. Adicione mecanismos de stop loss. Use stop loss de trailing ou stop loss baseado no tempo para bloquear lucros e evitar perdas maiores.

  3. Realizar otimização de parâmetros. Alterar o parâmetro do período de média móvel para encontrar a melhor combinação. Diferentes tipos de médias móveis também podem ser testados.

  4. Usar algoritmos como floresta aleatória e LSTM combinados com vários fatores para determinar a direção da tendência.

  5. Otimizar a lógica de entrada e saída. Definir condições de filtragem da tendência para evitar negociações contra a tendência perto do seu fim.

Resumo

Em geral, esta estratégia de breakout média móvel é muito adequada como uma estratégia de negociação quant para iniciantes. Tem uma lógica simples, fácil de entender e operar, com alguns efeitos práticos. Ao mesmo tempo, deixa muito espaço para testes e otimização adicionais. Podemos introduzir mais indicadores técnicos e modelos com base nisso para desenvolver melhores estratégias quant.


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


Mais.