Estratégia de Crossover do Oscilador MACD e EMA


Data de criação: 2023-09-23 15:24:12 última modificação: 2023-09-23 15:24:12
cópia: 0 Cliques: 746
1
focar em
1617
Seguidores

Visão geral

A estratégia é uma estratégia de negociação simples e eficiente, que combina o MACD do indicador de oscilação com a EMA da média móvel. Atualmente, a linha K está configurada para 4 horas e pode ser ajustada para outros períodos de tempo, conforme necessário.

Princípio da estratégia

A estratégia é composta por:

  1. Indicador MACD: determina mudanças na dinâmica dos preços.

  2. EMA: A linha média determina a direção da tendência dos preços.

  3. Condições de tempo: período de vigência da estratégia.

  4. Opções de espaço: opção de fazer mais ou fazer espaço.

As regras de negociação são as seguintes:

  1. Aumento/descenso: quando o preço de fechamento é superior ao EMA, a linha MACD é positiva e a linha K atual é superior ao dia anterior.

  2. Curto/Blanco: quando o preço de fechamento está abaixo da EMA, a linha MACD é negativa, e a linha K atual está abaixo do dia anterior.

A estratégia é clara e concisa, combinando tendências e ideias de negociação de curto prazo, formando um sistema de decisão quantitativa e eficiente.

Análise de vantagens

A estratégia tem as seguintes vantagens em relação a um único indicador:

  1. O MACD determina a dinâmica de curto prazo, a EMA determina a direção da tendência, e o indicador está em sintonia.

  2. As regras são simples, claras, fáceis de entender e de implementar, sem grandes dificuldades.

  3. Parâmetros flexíveis para variedades e períodos de tempo diferentes.

  4. Pode-se optar por fazer apenas ativos ou passivos, ou ativos e passivos.

  5. Pode-se definir um período de vigência da estratégia para evitar transações desnecessárias.

  6. A empresa é uma das maiores do mundo, com um desempenho consistente e lucro constante há anos.

  7. A administração de fundos é controlada, evitando perdas individuais excessivas.

  8. A tecnologia de aprendizagem de máquina pode ser introduzida para otimização e melhoria.

Análise de Riscos

Embora a estratégia tenha vários benefícios, os riscos a serem considerados são:

  1. A optimização de parâmetros é mais ampla e existe o risco de otimização excessiva.

  2. Não foi estabelecido um stop loss, o que representa um risco de expansão de perdas.

  3. Não tendo em conta o volume de transações, pode haver uma falsa brecha.

  4. O atraso na identificação dos pontos de viragem da tendência não permite evitar completamente os prejuízos.

  5. O efeito pode diminuir devido a mudanças no ambiente de mercado.

  6. O que é um modelo robusto baseado apenas em dados históricos?

  7. A frequência das transações é maior e os custos podem ser maiores.

  8. A curva de retorno deve ser observada para evitar que a curva fique muito curta.

Direção de otimização

De acordo com a análise acima, a estratégia pode ser otimizada em:

  1. Adicionar indicadores de volume de negócios para evitar falsas rupturas.

  2. Aumentar a configuração do Stop Loss Stop, para controlar o ganho único.

  3. Avaliar o efeito dos parâmetros em diferentes períodos de tempo.

  4. Introdução de tecnologia de aprendizagem de máquina para otimização dinâmica.

  5. Verificação de múltiplos mercados, melhoria da robustez.

  6. Ajustar o tamanho das posições e reduzir a frequência das transações.

  7. Otimizar estratégias de gestão de fundos.

  8. Contratos de diferença de preço de teste, aumento da frequência.

  9. O teste de ressonância é feito continuamente para evitar a sobre-adaptação.

Resumir

A estratégia como um todo, em combinação com os indicadores MACD e EMA, forma uma estratégia de quantificação simples e eficiente. Mas qualquer estratégia precisa ser constantemente otimizada e verificada para manter a capacidade de adaptação e robustez às mudanças no ambiente de mercado. A estratégia de negociação precisa ser constantemente evoluída e atualizada.

Código-fonte da estratégia
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("My Script", overlay=true)

//heiking ashi calculation
UseHAcandles    = input(false, title="Use Heikin Ashi Candles in Algo Calculations")
//
// === /INPUTS ===

// === BASE FUNCTIONS ===

haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow   = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low

//timecondition
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 //monday and session 
 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//ema data  -- moving average
len = input(9, minval=1, title="Length")
src = input(hl2, title="Source")
out = ema(src, len)
//plot(out, title="EMA", color=color.blue)

//histogram
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


//main variables to apply conditions are going to be out(moving avg) and hist(macd)

long = haClose > out and haClose > haClose[1] and out > out[1] and hist> 0 and hist[1] < 0 and time_cond
short = haClose < out and haClose < haClose[1] and out < out[1] and hist < 0 and hist[1] > 0 and time_cond

//limit to 1 entry
var longOpeneda = false
var shortOpeneda = false
var int timeOfBuya = na



longCondition= long and not longOpeneda 

if longCondition
    longOpeneda := true
    timeOfBuya := time


longExitSignala = short
exitLongCondition = longOpeneda[1] and longExitSignala

if exitLongCondition
    longOpeneda := false
    timeOfBuya := na


plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="BUY", text="BUY", textcolor=color.white)
plotshape(exitLongCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="SELL", text="SELL", textcolor=color.white)

//automatization

longEntry= input(true)
shortEntry=input(false)

if(longEntry)
    strategy.entry("long",strategy.long,when=longCondition)
    strategy.close("long",when=exitLongCondition)

if(shortEntry)
    strategy.entry("short",strategy.short,when=exitLongCondition)
    strategy.close("short",when=longCondition)