Estratégia de negociação quantitativa baseada em cruzamento de média móvel ponderada


Data de criação: 2023-12-06 12:05:01 última modificação: 2023-12-06 12:05:01
cópia: 0 Cliques: 626
1
focar em
1619
Seguidores

Estratégia de negociação quantitativa baseada em cruzamento de média móvel ponderada

Visão geral

Esta estratégia chama-seA estratégia de cruzamento de médias móveis quantitativas ponderadas(Weighted Quantitative Moving Average Crossover Strategy), cuja ideia básica é combinar vários indicadores, como preço, volume de transação, para projetar linhas rápidas e lentas, e enviar sinais de compra e venda quando ocorrem golden forks e dead forks.

Princípio da estratégia

O indicador central desta estratégia é a média móvel quantitativa (MMA). A MMA mede a direção da tendência calculando a média ponderada dos preços ao longo de um período de tempo. A diferença entre ela e a média móvel comum é que a média ponderada dos preços é a média ponderada dos preços.*O volume de transações (ou volume de transações) diminui com o tempo. Assim, os preços mais recentes têm mais peso e podem responder mais rapidamente às mudanças no mercado.

Especificamente, esta estratégia constrói uma linha de QMA rápida e uma linha de QMA lenta. O parâmetro da linha rápida é definido como 25 dias e o parâmetro da linha lenta como 29 dias. Um sinal de compra é gerado quando a linha rápida atravessa a linha lenta de baixo para cima e um sinal de venda quando a linha rápida atravessa a linha lenta de cima para baixo.

Análise de vantagens

Em comparação com a média móvel normal, esta estratégia tem as seguintes vantagens:

  1. Responder mais rapidamente ao mercado e aproveitar oportunidades de curta distância
  2. Combinação de várias dimensões de preços e volumes de transação, com maior estabilidade
  3. Definição de parâmetros flexível para diferentes cenários de mercado

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. Operações de linhas curtas são frequentes e podem aumentar os custos de transação e os pontos de deslizamento.
  2. PARAMETERS Otimização excessiva, que pode levar à curva de encaixe
  3. O efeito do indicador pode ser reduzido quando o volume de transações é insuficiente

Os riscos acima mencionados podem ser mitigados por meio de ajustes adequados na frequência dos parâmetros, análise rigorosa do walk forward e combinação com outros indicadores.

Direção de otimização

A estratégia ainda tem espaço para ser melhorada:

  1. Ajustar dinamicamente os parâmetros da QMA, permitindo-lhe adaptar-se à volatilidade do mercado
  2. Indicadores como volatilidade, volume de transações e outros, filtrando oportunidades de entrada
  3. Aumentar as estratégias de stop loss para controlar as perdas individuais

Resumir

Esta estratégia é, em geral, uma estratégia de negociação de curto prazo com melhor estabilidade. Em comparação com uma única média de preços, seus indicadores refletem melhor a relação de oferta e demanda do mercado. Com a introdução de ajustes de parâmetros e meios de controle de risco, esta estratégia pode operar com estabilidade a longo prazo e obter bons retornos.

Código-fonte da estratégia
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA