Estratégia de negociação de tendência de média móvel

Autora:ChaoZhang, Data: 2023-10-09 16:00:02
Tags:

Resumo

Esta estratégia é uma estratégia de negociação de tendência baseada em médias móveis. Ele usa 3 médias móveis com diferentes parâmetros para gerar sinais de negociação. Ele vai longo quando o preço cruza acima da média móvel e vai curto quando o preço cruza abaixo.

Estratégia lógica

A estratégia calcula a média móvel da linha ma com comprimento len utilizando a função sma. Em seguida, calcula 3 linhas médias móveis adicionais longline1, longline2, longline3 que são deslocadas em -4%, -5%, -6% respectivamente com base na ma.

Para a geração de sinal longo, se a posição atual for plana, ela vai longa com 1 lote quando o preço cruza acima da longline1. Se já for 1 lote longo, ela adiciona mais 1 lote quando o preço cruza acima da longline2. Se já for 2 lotes longos, ela adiciona mais 1 lote quando o preço cruza acima da longline3.

Para a geração de sinal curto, se já for longo, ele sai de todas as posições longas quando o preço cruza abaixo de ma.

A entrada por etapas permite que a estratégia siga a tendência.

Vantagens

  • Usando médias móveis para determinar a direção da tendência filtra o ruído do mercado e permite lucros constantes
  • As entradas longas/cortas encenadas podem beneficiar mais das tendências
  • Usando médias móveis deslocadas como pontos de entrada é melhor captar tendências
  • Utilizações relativamente pequenas, com uma utilização máxima controlada em torno de 20%

Riscos

  • A tendência pura de seguir a estratégia tende a ser desviada durante os mercados de gama
  • Os sinais de atraso das médias móveis podem perder pontos de virada da tendência
  • As entradas longas por etapas podem provocar preços elevados e aumentar o risco
  • Nenhum mecanismo de stop loss poderia levar a grandes perdas de eventos súbitos

Soluções de riscos:

  • Adicionar outros indicadores para determinar pontos de virada da tendência
  • Parâmetros de média móvel razoavelmente definidos, não demasiado longos para evitar sinais com atraso excessivo
  • Reduzir os lotes de entrada em fases para evitar a busca de preços elevados
  • Adicionar stop loss móvel para limitar perdas

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar outros indicadores como o MACD para determinar a força da tendência

  2. Otimizar os parâmetros da média móvel para encontrar a melhor combinação

  3. Ajustar o tamanho e a proporção dos lotes de entrada por etapas para evitar a busca de preços elevados

  4. Adicionar um mecanismo de stop loss em movimento baseado no ATR

  5. Ajustar dinamicamente o tamanho da posição com base na volatilidade do mercado, reduzir o tamanho quando a volatilidade for elevada

  6. Parâmetros de ensaio em diferentes produtos para encontrar o símbolo ideal

  7. Desenvolver módulo de saída para considerar a obtenção de lucros em certos padrões

Resumo

Em geral, a estratégia negocia com base na direção da tendência determinada por médias móveis e lucros das tendências através de entradas escalonadas. Mas tem alguns problemas atrasados e riscos de perseguir preços altos. Podemos otimizá-lo adicionando indicadores auxiliares, otimizando parâmetros, ajustando o tamanho da posição, adicionando stop loss, etc., para se adaptar a diferentes condições de mercado e alcançar lucros constantes.


/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Lenghs")
src = input(ohlc4, title = "MA Source")
longlevel1 = input(-4.0, title = "Long line 1")
longlevel2 = input(-5.0, title = "Long line 2")
longlevel3 = input(-6.0, title = "Long line 3")
needoffset = input(true, title = "Offset")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult
longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult
longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult

//Lines
offset = needoffset ? 1 : 0
plot(ma, color = color.blue)
plot(longline1, offset = offset, color = color.lime)
plot(longline2, offset = offset, color = color.lime)
plot(longline3, offset = offset, color = color.lime)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2))
if size > 0
    strategy.entry("TP", strategy.short, 0, limit = ma)
    

Mais.