Estratégia quantitativa de cruzamento de média móvel de filtro de tendência

Autora:ChaoZhang, Data: 2023-12-01 14:25:08
Tags:

img

Resumo

A estratégia quantitativa de cruzamento de média móvel de filtro de tendência é uma estratégia de negociação quantitativa de médio a longo prazo. Determina a direção da tendência do mercado através do cruzamento de médias móveis rápidas e lentas e entra no mercado sob a premissa de identificar uma tendência eficaz. Ao mesmo tempo, esta estratégia também define uma média móvel de ciclo mais longo como um filtro de tendência, de modo que sinais comerciais válidos só podem ser gerados quando os preços quebram essa média móvel.

Estratégia lógica

Esta estratégia baseia-se principalmente no princípio do cruzamento da média móvel. Especificamente, são calculadas duas médias móveis com períodos diferentes, normalmente definidas em linhas de 20 dias e 50 dias. Um sinal de compra é gerado quando a linha de 20 dias quebra acima da linha de 50 dias de baixo para cima e um sinal de venda é gerado quando a linha de 20 dias quebra a linha de 50 dias de cima para baixo. Esses sinais de cruzamento simples são considerados para capturar breakouts no médio a longo prazo.

Além disso, a estratégia também estabelece uma média móvel de 200 dias como referência de tendência geral. Somente quando o preço atravessa a linha de 200 dias, os sinais simples de cruzamento acima mencionados são considerados válidos. Isso constitui um mecanismo de filtragem de tendência para evitar a geração de muitos sinais inválidos em um mercado limitado a faixa.

Análise das vantagens

  1. A frequência de negociação a médio e longo prazo evita a negociação excessiva, reduzindo os custos de negociação e os riscos de deslizamento.

  2. A determinação da média móvel cruzada é clara, fácil de compreender e de aplicar.

  3. O mecanismo de filtragem de tendências pode filtrar a maioria dos sinais inválidos e melhorar a taxa de vitória.

  4. O ajustamento flexível dos parâmetros da média móvel é aplicável a diferentes variedades e ciclos de tempo.

  5. O stop loss e o take profit podem ser definidos para controlar um único lucro e perda.

Análise de riscos

  1. Quando o preço oscila em torno das médias móveis, podem ser gerados múltiplos sinais inválidos, resultando em excesso de negociação.

  2. As médias móveis de ciclo longo podem ficar para trás do mercado, perdendo assim pontos de inversão da tendência.

  3. Os dados históricos relativamente longos são necessários para estabelecer as médias móveis de referência, o que torna inapplicaveis as novas variedades ou os ciclos curtos.

  4. Os parâmetros da estratégia precisam de testes e otimização repetidos, configurações inadequadas podem causar falha da estratégia.

Mitigação de riscos:

  1. Adotar médias móveis de ciclo mais longo ou aumentar as condições de filtragem da tendência.

  2. Incorporar outros indicadores para determinar a tendência principal, tais como indicadores de energia, indicadores de volatilidade, etc.

  3. Melhorar a adaptabilidade dos parâmetros do ciclo da média móvel.

  4. Aumentar a otimização de parâmetros e mecanismos de feedback para ajustar dinamicamente os parâmetros da estratégia.

Optimização da Estratégia

  1. Tente diferentes tipos de médias móveis, como a média móvel ponderada linear.

  2. Aumentar a funcionalidade do ciclo da média móvel adaptativa.

  3. Incorporar indicadores de volatilidade para determinar os estágios de tendência, melhorando a validade dos crossovers da média móvel.

  4. Introduzir algoritmos de aprendizagem de máquina para otimizar automaticamente os parâmetros da estratégia.

  5. Explorar estratégias de combinação de vários ativos utilizando correlações entre ativos para lucro.

Resumo

A estratégia de cruzamento de média móvel de filtro de tendência é, em geral, uma estratégia quantitativa de médio a longo prazo simples e prática. Determina a tendência de médio a longo prazo através de cruzamento de média móvel e, em seguida, usa a filtragem de tendência para reduzir sinais inválidos. Esta estratégia tem a vantagem de ser fácil de entender e implementar, adequada para iniciantes em negociação quantitativa. As áreas potenciais de melhoria estão na otimização das médias móveis, bem como na integração com outros indicadores e algoritmos de aprendizado de máquina.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Booz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
strategy("Booz Strategy", "", true)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")        
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = 1

// Long Side
strategy.entry("Long Entry", strategy.long, trade_qty, when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, trade_qty, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)

Mais.