
A estratégia de formar o MACD através do cálculo do diferencial entre a média móvel rápida e a média móvel lenta, em combinação com a linha de sinal para determinar a tendência do mercado financeiro e a zona de sobrevenda e sobrevenda, fazendo mais quando a MACD e a linha de sinal formam um multi-cabeça e o preço está acima da média de 200 dias, formando um forquilho de cabeça vazia e o preço está abaixo da média de 200 dias, fazendo parte da típica estratégia de ruptura da linha de média dupla.
O princípio básico é calcular o diferencial entre a média móvel rápida e a média móvel lenta para formar o indicador MACD e determinar a direção da tendência do mercado. Em seguida, use a linha de sinal para determinar a região de sobrevenda e sobrevenda. Quando o MACD e a linha de sinal formam um garfo de ouro, o sinal de mais de um cara é feito.
O método de cálculo é o seguinte:
Quando o MACD atravessa a linha de sinalização e o MACD e a linha de sinalização estão simultaneamente abaixo de 0, faça um sinal de mais para a forca dourada. Quando o MACD atravessa a linha de sinalização e o MACD e a linha de sinalização estão simultaneamente acima de 0, faça um sinal de vazio para a forca morta. Ao mesmo tempo, faça mais para a forca dourada apenas quando o preço estiver acima da linha média de 200 dias e faça vazio para a forca morta quando o preço estiver abaixo da linha média de 200 dias.
Pode-se reduzir o risco através de uma redução apropriada do ciclo de média, da adição de outros critérios de avaliação e da adição de medidas de suspensão.
1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns
2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart
3.also tested hull moving average for MACD which gave good results
4.stoploss can also be trailed for better risk management
Esta estratégia é muito simples e prática, gerando um sinal de negociação de alta probabilidade por meio de julgamento duplo de indicadores e filtragem de preços. A margem de lucro é alta e o conjunto de parâmetros clássicos do MACD não é otimizado em excesso.
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
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/
// © Hurmun
//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
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)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// 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
movinga2 = input(title="movinga 2", type=input.integer, defval=200)
movinga200 = sma(close, movinga2)
plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100
longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
if (strategy.position_size > 0 )
strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)
if (strategy.position_size < 0 )
strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)