Estratégia Quantitativa: Acompanhamento de Tendências de Força e Fraqueza de MA


Data de criação: 2024-01-19 16:50:13 última modificação: 2024-01-19 16:50:13
cópia: 3 Cliques: 609
1
focar em
1617
Seguidores

Estratégia Quantitativa: Acompanhamento de Tendências de Força e Fraqueza de MA

Visão geral

A estratégia é capaz de avaliar a força e a fraqueza da tendência do mercado, através da computação de uma média móvel (MA) forte e fraca em vários períodos de tempo. Quando o MA curto sobe em sequência, eleva-se, formando um indicador de queda de força do MA curto. Quando o indicador supera o seu próprio MA longo, gera um sinal de compra.

Princípio da estratégia

  1. Calcule o MA de 5 dias, 10 dias, 20 dias, etc. e determine se o preço quebrou cada MA para cima, quebrou a marca, integrando-a para formar a curva de intensidade do MA.
  2. Aplicação de média móvel para a intensidade do MA, formando um indicador de linha média, julgando que a linha média está vazia, gerando um sinal de negociação.
  3. Parâmetros de ciclo de rastreamento configuráveis: número de grupos de MA de curto prazo, ciclo de linha média de longo prazo, condições de abertura de posição, etc.

Esta estratégia determina principalmente a abundância de espaços no indicador de linha média, e a intensidade média do grupo de linhas MA que reagem ao indicador de linha média. O grupo de linhas MA concentra-se em determinar a direção e a intensidade da tendência, e o indicador de linha média determina a continuidade.

Análise de vantagens

  1. Modelos multidimensionais para avaliar a força da tendência. Uma única linha MA não pode determinar a força suficiente; a estratégia mede várias rupturas de MA para garantir que a força suficiente seja emitida após o sinal, com alta confiabilidade.
  2. Ciclo de seguimento configurável. Ajustar os parâmetros de MA de curto prazo para capturar diferentes níveis de tendência; Ajustar os parâmetros de MA de longo prazo para controlar o ritmo de saída. O usuário pode ajustar o ciclo de acordo com o mercado.
  3. Apenas fazer mais pode evitar erros e acompanhar a tendência ascendente a longo prazo. A estratégia de apenas fazer mais, apenas acompanhar e não acompanhar, pode reduzir a perda de reversão.

Análise de Riscos

  1. Existe risco de retração. Existe um maior risco de retração quando a linha curta atravessa a linha média da linha longa. Pode-se reduzir a perda individual por meio de stop loss.
  2. Existem riscos de reversão. A operação de longo prazo do mercado necessariamente tem ajustes, a estratégia deve parar o Exiting em tempo hábil. Recomenda-se a combinação de bandas de onda, canais e outras técnicas para julgar o final do grande ciclo e controlar o risco de reversão.
  3. Risco de parâmetros. A configuração inadequada dos parâmetros pode gerar um sinal de erro. Os parâmetros devem ser ajustados para diferentes variedades para garantir a estabilidade dos parâmetros.

Direção de otimização

  1. Combinando mais indicadores de filtragem de entrada, pode-se considerar a combinação de volumes de tráfego, emitindo sinais de verificação quantitativa, evitando falsas brechas.
  2. Aumentar o stop loss. O stop loss móvel e o stop loss curvo podem reduzir os prejuízos na recuperação. O stop loss também pode ser considerado, bloqueando os lucros e evitando a reversão.
  3. Considere a configuração de variedades de futuros e de divisas. A ruptura da linha MA é mais adequada para variedades de tendência. Pode-se avaliar a estabilidade dos parâmetros de diferentes variedades de futuros e selecionar a melhor variedade.

Resumir

A estratégia de determinar a tendência de preços através da computação do indicador de força MA, e com a linha de equilíbrio cruzado como fonte de sinal, para o seguimento de tendências. A vantagem da estratégia é a precisão de determinar a força da tendência, a alta confiabilidade. O principal risco está na reversão da tendência e ajuste de parâmetros.

Código-fonte da estratégia
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MA Strength Strategy", overlay=false, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(10, step=10)

IndexMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
IndexMAPeriod = input(200, step=10)

considerTrendDirection = input(true)
considerTrendDirectionForExit = input(true)
offset = input(1, step=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0.0
    upwardScore := close > ma5? upwardScore+1.10:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1.10:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1.10:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1.10:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1.15:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1.20:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1.25:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    trendStrength = upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 6? 0.5: upwardScore < 2?-0.5:upwardScore>4?0.25:-0.25) : 0
    [trendStrength, upwardScore]
    
includePartiallyAligned = true
[trendStrength, upwardScore] = f_getMaAlignment(MAType, includePartiallyAligned)

upwardSum = sum(upwardScore, LookbackPeriod)

indexSma = f_getMovingAverage(upwardSum,IndexMAType,IndexMAPeriod)

plot(upwardSum, title="Moving Average Strength", color=color.green, linewidth=2, style=plot.style_linebr)
plot(indexSma, title="Strength MA", color=color.red, linewidth=1, style=plot.style_linebr)
buyCondition = crossover(upwardSum,indexSma) and (upwardSum > upwardSum[offset] or not considerTrendDirection) 
sellCondition = crossunder(upwardSum,indexSma) and (upwardSum < upwardSum[offset]  or not considerTrendDirection)

exitBuyCondition = crossunder(upwardSum,indexSma)
exitSellCondition = crossover(upwardSum,indexSma) 
strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when= inDateRange and buyCondition, oca_name="oca_buy")
strategy.close("Buy", when = considerTrendDirectionForExit? sellCondition : exitBuyCondition)
strategy.entry("Sell", strategy.short, when= inDateRange and sellCondition, oca_name="oca_sell")
strategy.close( "Sell", when = considerTrendDirectionForExit? buyCondition : exitSellCondition)