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.
A estratégia é composta por:
Indicador MACD: determina mudanças na dinâmica dos preços.
EMA: A linha média determina a direção da tendência dos preços.
Condições de tempo: período de vigência da estratégia.
Opções de espaço: opção de fazer mais ou fazer espaço.
As regras de negociação são as seguintes:
Aumento/descenso: quando o preço de fechamento é superior ao EMA, a linha MACD é positiva e a linha K atual é superior ao dia anterior.
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.
A estratégia tem as seguintes vantagens em relação a um único indicador:
O MACD determina a dinâmica de curto prazo, a EMA determina a direção da tendência, e o indicador está em sintonia.
As regras são simples, claras, fáceis de entender e de implementar, sem grandes dificuldades.
Parâmetros flexíveis para variedades e períodos de tempo diferentes.
Pode-se optar por fazer apenas ativos ou passivos, ou ativos e passivos.
Pode-se definir um período de vigência da estratégia para evitar transações desnecessárias.
A empresa é uma das maiores do mundo, com um desempenho consistente e lucro constante há anos.
A administração de fundos é controlada, evitando perdas individuais excessivas.
A tecnologia de aprendizagem de máquina pode ser introduzida para otimização e melhoria.
Embora a estratégia tenha vários benefícios, os riscos a serem considerados são:
A optimização de parâmetros é mais ampla e existe o risco de otimização excessiva.
Não foi estabelecido um stop loss, o que representa um risco de expansão de perdas.
Não tendo em conta o volume de transações, pode haver uma falsa brecha.
O atraso na identificação dos pontos de viragem da tendência não permite evitar completamente os prejuízos.
O efeito pode diminuir devido a mudanças no ambiente de mercado.
O que é um modelo robusto baseado apenas em dados históricos?
A frequência das transações é maior e os custos podem ser maiores.
A curva de retorno deve ser observada para evitar que a curva fique muito curta.
De acordo com a análise acima, a estratégia pode ser otimizada em:
Adicionar indicadores de volume de negócios para evitar falsas rupturas.
Aumentar a configuração do Stop Loss Stop, para controlar o ganho único.
Avaliar o efeito dos parâmetros em diferentes períodos de tempo.
Introdução de tecnologia de aprendizagem de máquina para otimização dinâmica.
Verificação de múltiplos mercados, melhoria da robustez.
Ajustar o tamanho das posições e reduzir a frequência das transações.
Otimizar estratégias de gestão de fundos.
Contratos de diferença de preço de teste, aumento da frequência.
O teste de ressonância é feito continuamente para evitar a sobre-adaptação.
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.
// 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)