Estratégia de negociação cruzada de média móvel quantitativa ponderada

Autora:ChaoZhang, Data: 12-06-2023 12:05:01
Tags:

img

Resumo

Esta estratégia chama-seEstratégia de cruzamento das médias móveis quantitativas ponderadasA ideia básica é desenhar linhas rápidas e lentas com base no preço, volume de negociação e outros indicadores, e gerar sinais de compra e venda quando ocorrem cruz de ouro e cruz morta entre eles.

Estratégia lógica

O indicador central desta estratégia é a média móvel quantitativa (QMA). A QMA mede a direção da tendência calculando o preço médio ponderado ao longo de um período de tempo. Diferente da média móvel regular, os pesos (peso = preço * volume de negociação) dos preços na QMA declinarão ao longo do tempo. Assim, os preços mais recentes têm pesos maiores que podem responder à mudança do mercado mais rapidamente.

Especificamente, esta estratégia constrói uma linha QMA rápida com 25 dias e uma linha QMA lenta com 29 dias.

Análise das vantagens

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

  1. Responder mais rapidamente ao mercado, o que lhe permite aproveitar oportunidades de curto prazo.
  2. Combinar múltiplas dimensões, incluindo preço e volume de negociação, o que a torna mais estável.
  3. Configuração flexível dos parâmetros para se adaptar aos diferentes ambientes de mercado.

Análise de riscos

Esta estratégia tem também alguns riscos:

  1. Frequência elevada de negociação de operações de curto prazo, o que pode conduzir a um aumento dos custos de transacção e deslizamentos.
  2. Sobreajuste devido à otimização excessiva dos parâmetros.
  3. O efeito do indicador pode ser comprometido quando o volume de negociação é insuficiente.

Os riscos acima referidos poderiam ser mitigados ajustando adequadamente a frequência, aplicando estritamente a análise de avanço e incorporando outros indicadores.

Orientações para melhorias

Ainda há espaço para uma melhor otimização desta estratégia:

  1. Ajustar dinamicamente os parâmetros da QMA para que esta se adapte à volatilidade do mercado.
  2. Filtrar oportunidades de negociação com indicadores como volatilidade e volume de negociação.
  3. Adicionar estratégias de stop loss para controlar perdas individuais.

Conclusão

Em geral, esta é uma estratégia de negociação estável a curto prazo. Em comparação com a média de preço único, seu indicador pode refletir melhor a relação oferta-demanda no mercado. Com ajuste adequado dos parâmetros e gerenciamento de risco, essa estratégia pode operar de forma estável a longo prazo e obter lucro sólido.


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


Mais.