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

Autora:ChaoZhang, Data: 2023-10-07 16:39:01
Tags:

Resumo

Esta estratégia usa a cruz de ouro e a cruz de morte de médias móveis duplas para determinar a tendência e gerar sinais de compra e venda. Quando a média móvel rápida cruza acima da média móvel lenta de baixo, ocorre uma cruz de ouro e um sinal de compra é gerado. Quando a média móvel rápida cruza abaixo da média móvel lenta de cima, ocorre uma cruz de morte e um sinal de venda é gerado.

Estratégia lógica

A estratégia consiste nos seguintes elementos:

  1. Calcule o valor do oscilador do preço em forma de porcentagem. O valor do oscilador é a porcentagem do preço menos um valor mediano. O valor mediano é calculado como a média dos preços mais altos e mais baixos de 20 dias.

  2. Calcular a média móvel dos valores do oscilador, como a média móvel de Hull de 20 dias.

  3. Calcular o valor de atraso da média móvel, por exemplo, atraso de 12 dias.

  4. Determinar se a média móvel cruza acima ou abaixo da média móvel atrasada, gerando sinais de cruz de ouro ou cruz de morte.

  5. Emissão de sinais de compra e venda.

Especificamente, a estratégia calcula primeiro o valor do oscilador do preço, em seguida, a média móvel do oscilador e, em seguida, o valor atrasado da média móvel.

Quando a média móvel do oscilador cruza acima da média móvel atrasada, um sinal de cruz de ouro é gerado para longo.

Ao julgar o cruzamento das médias móveis duplas, determina-se a direcção da negociação.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. O uso de médias móveis duplas filtra sinais falsos e melhora a confiabilidade do sinal.

  2. A combinação de médias móveis rápidas e lentas capta tendências de médio prazo. A MA rápida é sensível às mudanças de preço, enquanto a MA lenta tem qualidade atrasada. A combinação de ambos filtra o ruído de curto prazo enquanto capta inversões de tendência de médio prazo.

  3. O oscilador destaca os pontos de ruptura e gera sinais de negociação mais claros.

  4. Algoritmos e parâmetros MA personalizáveis adequados a diferentes ambientes de mercado.

  5. Lógica estratégica simples e clara, fácil de entender e implementar, amigável para iniciantes.

Análise de riscos

Os riscos desta estratégia incluem:

  1. Os crossovers de dupla MA têm sinais atrasados, potencialmente perdendo os melhores pontos de entrada.

  2. São propensos a sinais errados durante os mercados de gama.

  3. Incapaz de determinar a força da tendência, corre o risco de saída antecipada durante os mercados de alta.

  4. Muitos parâmetros ajustáveis, difíceis de otimizar para as melhores combinações de parâmetros.

  5. Sem mecanismo de stop loss, incapaz de controlar perdas de negociação única.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os tipos e parâmetros de MA, testar a estabilidade em diferentes mercados.

  2. Adicione indicadores de tendência como o ADX para evitar negociações desnecessárias de sinais errados.

  3. Adicione mecanismos de stop loss como trailing stop ou stop percentual para controlar a perda de uma única negociação.

  4. Incorporar outros indicadores como volume, RSI para melhorar a qualidade do sinal.

  5. Use aprendizado de máquina para otimizar automaticamente parâmetros para configurações mais robustas.

  6. Considere a possibilidade de relaxar ligeiramente as condições de entrada para reduzir as transacções perdidas.

Resumo

Esta estratégia de cruzamento de média móvel dupla capta pontos de reversão de tendência de médio prazo, combinando médias móveis rápidas e lentas, filtrando o ruído do mercado de curto prazo. Tem a vantagem de ser simples, fácil de entender e amigável para iniciantes. Mas também tem desvantagens como gerar sinais errados e incapacidade de determinar a força da tendência. A estratégia pode ser melhorada por otimização de parâmetros de MA, adição de filtros de tendência, definição de condições de stop loss, etc. para atender a diferentes ambientes de mercado.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 4h
basePeriod: 15m
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/
// © EvoCrypto

//@version=4
strategy("Distance Oscillator Strategy- evo", shorttitle="Distance Oscillator Strategy")

// INPUTS {
na_1                =   input(false,    title="────────────{ Oscillator }──────────────")

// Osc_Src             =   input(close,    title="Oscillator Source                                ")

Example_Length      =   input(20,       title="Example Length", minval=1)
Osc_Src             =   (highest(Example_Length) + lowest(Example_Length)) / 2

// Strategy can not let you choose a Moving Average to connect with like the study version, so I use the MA above as example

Osc_Format          =   input("Percent",title="Oscillator Format",              options=["Percent", "Currency"]) 

na_2                =   input(false,    title="─────────────{ Average }──────────────")
Average_Type        =   input("Hull",   title="Average Type",                   options=["Hull", "Sma", "Ema", "Wma"])
Length              =   input(50,       title="Average Length", minval=1)
Lagg                =   input(12,       title="Average Lagg",   minval=1)
Display_MA          =   input(true,     title="Display Average")
// }

// SETTINGS {
Osc_Sum             =   
 Osc_Format == "Percent"  ? (close - Osc_Src) / close * 100 :
 Osc_Format == "Currency" ? (close - Osc_Src)               : na

Osc_MA              =   Display_MA == false ? na:
 Average_Type == "Hull"? hma(Osc_Sum, Length)   :
 Average_Type == "Sma" ? sma(Osc_Sum, Length)   :
 Average_Type == "Ema" ? ema(Osc_Sum, Length)   :
 Average_Type == "Wma" ? wma(Osc_Sum, Length)   : na
Osc_MA_1            =   Osc_MA[Lagg]

Cross_Up            =   crossover( Osc_MA, Osc_MA_1)
Cross_Down          =   crossunder(Osc_MA, Osc_MA_1)

Osc_Color           =   Osc_Sum > 0         ? color.new(#bbdefb, 70)  : Osc_Sum < 0          ? color.new(#000000, 70)  : na
Average_Color       =   Osc_MA  > Osc_MA_1  ? color.new(#311b92, 100) : Osc_MA  < Osc_MA_1   ? color.new(#b71c1c, 100) : na
// }

// PLOT {
plot(Osc_Sum,                           title="Oscillator", color=Osc_Color, style=plot.style_histogram, linewidth=2)

Plot_0              =   plot(Osc_MA,    title="Osc Average",color=#b71c1c, linewidth=2)
Plot_1              =   plot(Osc_MA_1,  title="Osc Average",color=#311b92, linewidth=2)
fill(Plot_0, Plot_1,                    title="Average",    color=Average_Color)

plotshape(Cross_Up   ? Osc_MA_1 : na,   title="Cross Up",   color=#bbdefb, location=location.absolute, size=size.tiny, style=shape.circle)
plotshape(Cross_Down ? Osc_MA_1 : na,   title="Cross Down", color=#000000, location=location.absolute, size=size.tiny, style=shape.circle)
// }

// STRATEGY {
if (Cross_Up)
    strategy.entry("Long", strategy.long)
if (Cross_Down)
    strategy.entry("Short", strategy.short)
// }

Mais.