Baseado na estratégia de negociação de crossover de média móvel dupla


Data de criação: 2023-11-27 15:32:57 última modificação: 2023-11-27 15:32:57
cópia: 1 Cliques: 613
1
focar em
1617
Seguidores

Baseado na estratégia de negociação de crossover de média móvel dupla

Visão geral

A estratégia é baseada em um cruzamento de duas médias móveis de diferentes configurações de parâmetros para emitir um sinal de compra e venda. Um sinal de compra é emitido quando uma média móvel de curto período quebra uma média móvel de longo período em uma direção inferior; um sinal de venda é emitido quando uma média móvel de curto período quebra uma média móvel de longo período em uma direção superior.

Princípio da estratégia

A estratégia é escrita usando a linguagem de script pine. Primeiro, define o tipo, a duração e a origem dos preços de duas médias móveis, denominadas p1 e p2, respectivamente. P1 representa a média de um período mais curto e p2 representa a média de um período mais longo.

A função de crossover e crossunder julga a interseção de duas linhas de equilíbrio. Quando p1 atravessa p2 de baixo, emite um sinal de compra; quando p1 atravessa p2 de cima, emite um sinal de venda.

Para executar uma transação, a estratégia cria uma posição de cabeça ou de cabeça vazia ao emitir um sinal através da função strategy.entry. Se o parâmetro shortOnly estiver ativado, apenas a transação vende um sinal.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Regras claras, fáceis de entender e de implementar
  2. A linha de equilíbrio cruzada é um sinal de negociação clássico e conhecido.
  3. Tipos, comprimentos e fontes de preços de linhas médias altamente personalizáveis
  4. A única forma de vender sinais é reduzir a frequência de negociação.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. Em situações de turbulência, a linha média pode produzir vários cruzamentos ineficazes, resultando em excesso de negociação.
  2. Parâmetros a serem otimizados para diferentes variedades e ciclos de negociação
  3. Não sei qual é a direção da tendência, pode ser um retrocesso

Pode-se reduzir o sinal de invalidez através do ajuste do comprimento da linha média, da introdução de condições de filtragem, etc. Pode-se também combinar o indicador de tendência para determinar o movimento da bolsa principal.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. A introdução de uma média ponderada de volume ou um preço típico como fonte de preço aumenta a confiabilidade do sinal cruzado

  2. Aumentar o período de validação para evitar erros de cruzamento de curto prazo

  3. Combinado com um stop loss ATR, definindo o máximo de perdas suportáveis em função da amplitude das flutuações do mercado

  4. Parâmetros de otimização de encaixe de curva para encontrar a combinação de parâmetros ótima

  5. Considere emitir sinais de negociação somente quando a tendência do grande ciclo for consistente

Resumir

A estratégia de cruzamento de duas linhas uniformes é fácil de entender e implementar, formando sinais de negociação através do cruzamento de duas linhas uniformes, e pode ser altamente personalizada. Mas também pode produzir sinais de invalidez em situações de turbulência. O risco pode ser reduzido por meio de otimização de parâmetros e otimização de regras, cujo espaço de otimização é grande e vale a pena estudar mais.

Código-fonte da estratégia
/*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)