Estratégia quantitativa de crossover de média móvel filtrada por tendência


Data de criação: 2023-12-01 14:25:08 última modificação: 2023-12-01 14:25:08
cópia: 0 Cliques: 619
1
focar em
1619
Seguidores

Estratégia quantitativa de crossover de média móvel filtrada por tendência

Visão geral

A estratégia de quantificação de cruzamento de média móvel de filtragem de tendências é uma estratégia de negociação de quantificação de linha média e longa. A estratégia julga a direção da tendência do mercado por meio do cruzamento da média móvel rápida e da média móvel lenta, com entrada prevista para determinar a tendência efetiva.

Princípio da estratégia

A estratégia baseia-se principalmente no princípio do cruzamento de médias móveis. Concretamente, dois médios móveis de diferentes períodos são calculados separadamente, tipicamente configurados como a linha de 20 dias e a linha de 50 dias. Um sinal de compra é gerado quando a linha de 20 dias quebra a linha de 50 dias de baixo para cima; um sinal de venda é gerado quando a linha de 20 dias quebra a linha de 50 dias de cima para baixo.

Além disso, a estratégia também estabelece uma média móvel de 200 dias como um indicador de julgamento da tendência geral. Os sinais cruzados simples acima são considerados válidos apenas quando o preço ultrapassa a linha de 200 dias. Isso constitui um mecanismo de filtragem de tendência que evita a produção de uma grande quantidade de sinais inválidos no mercado de liquidação.

Análise de vantagens estratégicas

  1. A operação de linhas médias e longas evita transações muito frequentes, reduzindo os custos de transação e o risco de deslizamento.

  2. A transversal de equilíbrio móvel é clara e fácil de entender.

  3. O mecanismo de filtragem de tendências pode filtrar a maioria dos sinais inativos, aumentando a taxa de vitória.

  4. Os parâmetros da média móvel podem ser ajustados com flexibilidade para diferentes variedades e períodos de tempo.

  5. Pode-se definir um Stop Loss Stop para controlar o lucro individual.

Análise de risco estratégico

  1. Quando os preços se movem perto da linha de equilíbrio, pode-se gerar vários sinais de invalidez que levam a uma sobre-negociação.

  2. A linha média de longo prazo pode estar atrasada no mercado, perdendo o ponto de viragem da tendência.

  3. A construção de indicadores de média móvel requer dados históricos mais longos e não permite a aplicação de novas variedades ou períodos mais curtos.

  4. Os parâmetros da estratégia precisam ser testados e otimizados repetidamente, e a configuração incorreta pode levar à falha da estratégia.

A solução para o risco:

  1. O uso de médias de períodos mais longos, ou o aumento de condições de filtragem de tendências.

  2. Combinação com outros indicadores para determinar grandes tendências, como indicadores de energia, indicadores de taxa de flutuação, etc.

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

  4. Adição de parâmetros de otimização e mecanismo de feedback, ajuste dinâmico de parâmetros de estratégia.

Direção de otimização da estratégia

  1. Experimente diferentes tipos de médias móveis, como médias móveis de peso linear.

  2. Adição de função de ciclo de média linear móvel adaptável.

  3. Combinando os indicadores de taxa de flutuação para determinar a segmentação de tendências, a eficácia do cruzamento de médias móveis é aumentada.

  4. Adição de algoritmos de aprendizagem de máquina para otimização automática de parâmetros de estratégia.

  5. Explorar estratégias de combinação de várias variedades, aproveitando a correlação entre as variedades.

Resumir

A estratégia de cruzamento de linha média móvel de filtragem de tendências é, em geral, uma estratégia de quantificação de linha média e longa simples e prática. Ela julga a tendência de linha média e longa através do cruzamento de linha média e, em seguida, combina com a filtragem de tendências para reduzir os sinais inativos. A estratégia é fácil de entender e implementar e é adequada para iniciantes em negociação de quantificação.

Código-fonte da estratégia
/*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)