
Esta estratégia é uma estratégia de negociação baseada no MACD. O MACD é uma versão aprimorada de um indicador de média móvel que permite capturar melhor as mudanças nas tendências do mercado. A estratégia utiliza os sinais do MACD, combinados com os sinais de quebra de preços, para estabelecer regras de compra e venda para atingir o objetivo de obter lucro.
A estratégia usa principalmente duas médias, a média móvel de 21 dias e a média móvel de 42 dias. Quando a média curta atravessa a média longa, é considerada um sinal de compra; Quando a média curta atravessa a média longa abaixo, é considerada um sinal de venda.
Além disso, a estratégia também precisa atender às condições de que o preço esteja acima da média dinâmica não-McKinsey e que o preço quebre a média de curto prazo para gerar um sinal de compra. Para um sinal de venda, também precisa atender às condições de que o preço esteja abaixo da média não-McKinsey e que o preço caia abaixo da média de curto prazo.
Especificamente, a condição de ação de um sinal de compra é: atravessar a linha média longa na linha média curta, fechar o preço acima da linha média não-McKinsey, fechar o preço quebrar a linha média curta para baixo. A condição de ação de um sinal de venda é: atravessar a linha média longa abaixo da linha média curta, fechar o preço abaixo da linha média não-McKinsey, fechar o preço quebrar a linha média curta para cima.
A fórmula de cálculo para a média não-dinâmica de McKin é: MDIt = MDIt-1 + (Close - MDIt-1) / Max(k * Period * (Close / MDIt-1) ^ 4, 1) ∞, onde, MDIt representa o valor atual, MDIt-1 representa o valor do dia anterior, Close representa o preço de fechamento do dia, k representa a constante de smoothing, e Period representa o cálculo. A fórmula permite que a média acompanhe as mudanças de preços em tempo real.
O indicador de linha média de McKinsey melhora a latência da linha média tradicional, permitindo capturar mudanças de tendências de preços mais rapidamente.
A combinação de dois equilíbrios forma um sinal de transação que pode filtrar eficazmente as brechas falsas.
Adicionar condições de preços acima/abaixo da linha média de McKinsey para evitar a frequência de transações em zonas de turbulência.
O índice de média móvel é usado para tornar a média mais sensível às mudanças recentes de preços.
No mercado de oscilação horizontal, pode produzir falsos sinais, resultando em prejuízos. Os parâmetros podem ser adequadamente ajustados, filtrando os sinais.
Uma ruptura de grande dimensão pode impedir a construção de um depósito em tempo útil, devendo as condições de entrada ser relaxadas de forma apropriada.
A configuração inadequada de parâmetros também pode afetar a eficácia da estratégia, e os parâmetros devem ser testados de forma otimizada.
Os riscos sistêmicos associados à posse de longo prazo devem ser considerados e um ponto de parada pode ser estabelecido.
Pode-se testar parâmetros de linha média de diferentes comprimentos para encontrar a combinação mais adequada.
Pode-se adicionar outros indicadores técnicos, como KD, MACD, etc., para otimizar a escolha de pontos de compra e venda.
Para o cálculo da linha de McKinsey não-média, os parâmetros k podem ser ajustados de acordo com a variedade e o mercado.
Pode ser combinado com os indicadores de taxa de flutuação para dimensionamento de posição dinâmica, para controlar o risco individual.
Pode-se definir um ponto de parada para controlar o risco de perda, ou pode-se experimentar o movimento de parada para bloquear o lucro.
Esta estratégia utiliza a capacidade de rastreamento rápido do indicador de linha de equilíbrio de McKin, em conjunto com a formação de sinais de negociação de quebra de linha de equilíbrio de preços, para acompanhar a tendência de forma eficaz, em tempo de troca de posição quando a tendência se reverte. Em comparação com a estratégia de linha de equilíbrio binária tradicional, esta estratégia pode capturar mudanças de tendência de preços mais rapidamente.
/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// © LucasZancheta
//@version=4
strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true)
//Médias móveis
MA1Period=input(21, title="MA1")
MA2Period=input(42, title="MA2")
MA1 = ema(close, MA1Period)
MA2 = ema(close, MA2Period)
aboveAverage = MA1 >= MA2
hunderAverage = MA2 >= MA1
//Período do backtest
startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100)
endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100)
//Verifica se o candle está dentro do período do backtest
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
//Número de periodos da média móvel
period = input(title="Períodos", type=input.integer, defval=20)
//Constante K (0.6)
k = input(title="Constante K", type=input.float, defval=0.6)
//Preço de fechamento
closePrice = input(title="Preço", type=input.source, defval=close)
mdi = 0.0
//Fórmula de McGinley
mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1)
//Regra de coloração
mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black
//Inserindo as informações no gráfico
plot(MA1, color=color.blue, linewidth=2)
plot(MA2, color=color.purple, linewidth=2)
barcolor(mdiColor)
//Estratégia
buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1
buyLoss = closePrice < mdi and close < MA1 and close < MA2
if (inDateRange)
strategy.entry("Compra", strategy.long, qty=1, when= buySignal)
strategy.exit("Gain da compra", "Compra", qty=1, profit=20)
strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação")
sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1
sellLoss = closePrice > mdi and close > MA1 and close > MA2
if (inDateRange)
strategy.entry("Venda", strategy.short, qty=1, when= sellSignal)
strategy.exit("Gain da venda", "Venda", qty=1, profit=20)
strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação")
if (not inDateRange)
strategy.close_all()