Estratégia quantitativa de negociação baseada no cruzamento de médias móveis duplas

Autora:ChaoZhang, Data: 2024-02-21 14:28:28
Tags:

img

Resumo

Esta estratégia é chamada de Quantitative Trading Strategy Based on Double Moving Average Crossover. A ideia principal desta estratégia é usar os sinais cruzados entre linhas médias rápidas e lentas para determinar as tendências de preços e tomar decisões de compra e venda em conformidade.

Princípio da estratégia

Os principais indicadores desta estratégia são as linhas médias móveis rápidas e lentas.

Especificamente, o parâmetro da linha média móvel rápida é definido em 24 períodos e o parâmetro da linha média móvel lenta é definido em 100 períodos. Quando a linha média móvel rápida cruza acima da linha média móvel lenta de baixo, isso indica que os preços estão entrando em uma tendência ascendente, e a estratégia emitirá um sinal de compra neste momento. Quando a linha média móvel rápida cruza abaixo da linha média móvel lenta de cima, isso indica que os preços estão entrando em uma tendência descendente, e a estratégia emitirá um sinal de venda neste momento.

Ao julgar a direcção cruzada das linhas médias móveis rápidas e lentas, as alterações da tendência dos preços podem ser efetivamente captadas para ajudar a tomar decisões de compra e venda.

Vantagens da estratégia

Esta estratégia tem as seguintes vantagens:

  1. O princípio é simples e fácil de compreender, fácil de implementar.

  2. Os parâmetros das médias móveis rápidas e lentas podem ser ajustados de acordo com as condições reais, tornando a estratégia mais flexível.

  3. Forte capacidade de capturar mudanças de tendência. Crossovers de média móvel dupla são frequentemente usados para capturar pontos de virada quando os preços passam da consolidação para a tendência.

  4. As médias móveis duplas podem ser utilizadas para identificar os intervalos de consolidação e evitar a abertura repetida de posições durante as consolidações.

Riscos da Estratégia

Há também alguns riscos com esta estratégia:

  1. Como indicadores de rastreamento de tendências, os sinais de cruzamento de médias móveis duplas geralmente estão atrasados por um certo período, o que pode levar a um certo grau de custo de oportunidade.

  2. É fácil produzir sinais falsos em mercados oscilantes. As médias móveis duplas funcionam melhor quando os preços mostram uma tendência clara. Mas em mercados oscilantes, elas tendem a produzir sinais falsos frequentes.

  3. Se os parâmetros da média móvel rápida e lenta forem definidos de forma incorreta, isso afetará a sensibilidade para capturar cruzamento de tendências.

Soluções correspondentes:

  1. Reduzir adequadamente o período da média móvel para aumentar a sensibilidade dos sinais cruzados.

  2. Adicionar indicadores de volatilidade ou volume para filtragem para reduzir as transações inválidas em mercados oscilantes.

  3. Optimização de parâmetros para encontrar as melhores combinações de parâmetros.

Orientações para a otimização da estratégia

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Usar indicadores técnicos de média móvel mais avançados, como a média móvel ponderada linear, para substituir a média móvel simples, para melhorar a capacidade de acompanhamento e de previsão dos indicadores.

  2. Adicionar mais indicadores auxiliares, tais como indicadores de volume e volatilidade para filtragem conjunta, para reduzir sinais inválidos.

  3. Otimizar os parâmetros da média móvel rápida e lenta para melhorar a adaptabilidade dos parâmetros.

  4. Após a estratégia entrar no mercado, os pontos de stop loss e trailing stop loss podem ser projetados para controlar perdas individuais.

  5. As novas tecnologias, como a aprendizagem profunda, podem ser utilizadas para identificar padrões de preços mais complexos para ajudar os crossovers da média móvel a tomar decisões de compra e venda, a fim de obter melhores resultados.

Resumo

Em geral, esta estratégia é relativamente clássica e simples. Determina as tendências de preços com base em indicadores de média móvel dupla para descobrir oportunidades quando os preços se movem de consolidação para tendência. As vantagens são lógica clara e simplicidade, adequado para rastrear mercados de tendência. Mas também há algumas falhas como o atraso do sinal que precisam ser melhorados através de ajuste de parâmetros e otimização para aumentar a estabilidade e eficiência da estratégia.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

//OBV
src = close
obv = ta.cum(math.sign(ta.change(src)) * volume)
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 20, minval = 1, maxval = 100, group="Smoothing")
Limit = input.float(title = "Limit", defval = 1, minval = 0.1, maxval = 10, group="Smoothing")
smoothingLine_ma = ma(obv,smoothingLength, typeMA)
obv_diff = (obv-smoothingLine_ma)*100/obv

//PVT
var cumVolp = 0.
cumVolp += nz(volume)
if barstate.islast and cumVolp == 0
    runtime.error("No volume is provided by the data vendor.")
srcp = close
vt = ta.cum(ta.change(srcp)/srcp[1]*volume)
smoothingLine_map = ma(vt,smoothingLength, typeMA)
pvt_diff = (vt-smoothingLine_map)*100/vt

// plot(obv_diff+close+100 ,title="OBV_DIFF", color = color.rgb(255, 118, 54))
// plot(pvt_diff+close+80 ,title="PVT_DIFF", color = color.rgb(223, 61, 255))

indicator = (pvt_diff+obv_diff)/2
goLongCondition1 = ta.crossover(indicator,Limit)
timePeriod = time >= timestamp(syminfo.timezone, 2023,1, 1, 0, 0)  // Backtesting Time
notInTrade = strategy.position_size <= 0
if goLongCondition1 and timePeriod and notInTrade
    stopLoss = low * 0.99 // -2%
    takeProfit = high * 1.05 // +5%
    strategy.entry('long', strategy.long )
    strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)






// fastEMA = ta.ema(close, 24)
// slowEMA = ta.ema(close, 100)
// goLongCondition1 = ta.crossover(fastEMA, slowEMA)
// timePeriod = time >= timestamp(syminfo.timezone, 2018, 12, 15, 0, 0)
// notInTrade = strategy.position_size <= 0
// if goLongCondition1 and timePeriod and notInTrade
//     stopLoss = low * 0.97
//     takeProfit = high * 1.12
//     strategy.entry('long', strategy.long)
//     strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
// plot(fastEMA, color=color.new(color.blue, 0))
// plot(slowEMA, color=color.new(color.yellow, 0))

Mais.