Uma estratégia de negociação cruzada de média móvel dupla

Autora:ChaoZhang, Data: 2023-11-27
Tags:

img

Resumo

Esta estratégia gera sinais de compra e venda com base no cruzamento de duas médias móveis com configurações de parâmetros diferentes. Quando o período mais curto cruza acima da média móvel do período mais longo de baixo, um sinal de compra é gerado. Quando o período mais curto cruza abaixo da média móvel do período mais longo de cima, um sinal de venda é gerado.

Estratégia lógica

A estratégia é escrita em código Pine. Primeiro define duas médias móveis, chamadas p1 e p2, com tipo, comprimento e fonte de preço personalizáveis através da entrada. Aqui p1 representa o MA de período mais curto e p2 representa o MA de período mais longo.

As funções crossover e crossunder são usadas para detectar o crossover entre os dois MA. Quando p1 cruza sobre p2 de baixo, um sinal de compra é gerado. Quando p1 cruza sob p2 de cima, um sinal de venda é gerado.

Para executar transacções, a estratégia entra em posições longas ou curtas usando a estratégia.entry quando os sinais são acionados.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Regras claras, fáceis de compreender e de aplicar
  2. O crossover MA é um sinal comercial clássico e amplamente conhecido
  3. Tipos de MA, comprimentos e fontes de preços altamente personalizáveis
  4. Pode negociar somente sinais de venda com menor frequência de negociação

Análise de riscos

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

  1. Vários cruzes inválidos podem ocorrer durante mercados agitados, levando a um excesso de negociação.
  2. Os parâmetros precisam de otimização para diferentes produtos e prazos.
  3. Incapaz de determinar a direção da tendência, pode negociar contra a tendência.

Os riscos podem ser reduzidos ajustando os comprimentos de MA, adicionando condições de filtro, etc. Indicadores de tendência também podem ser adicionados para determinar o viés do mercado.

Oportunidades de melhoria

A estratégia pode ser reforçada pelos seguintes aspectos:

  1. Usar VWAP ou preço típico como fonte de preço para tornar os sinais de cruzamento mais confiáveis.

  2. Adicionar um Período de Validação para evitar cruzes erradas a curto prazo.

  3. Incorporar paradas ATR com base na perda máxima aceitável de acordo com a volatilidade do mercado.

  4. Optimização de parâmetros através do ajuste de curvas para encontrar combinações ideais.

  5. Considere apenas sinais na direção de tendências de um período de tempo mais longo.

Resumo

A estratégia de crossover de MA dupla é fácil de entender e implementar, gerando sinais comerciais de dois crossovers de MA com alta personalização.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)


Mais.