
A estratégia é uma estratégia de acompanhamento de tendências que usa o indicador MACD para identificar a direção do polinômio. Ela gera a linha principal do MACD calculando a diferença entre a média móvel rápida e a média móvel lenta. A estratégia usa a cruz dourada da linha principal do MACD e a linha de sinal para gerar um sinal de compra e a cruz morta para gerar um sinal de venda, realizando o acompanhamento de equilíbrio polinômio.
O código define primeiro o tempo de início da retrospectiva para testar o desempenho histórico da estratégia.
Depois, é calculado o indicador MACD, incluindo a configuração do comprimento da média móvel rápida, da média móvel lenta e da linha média MACD. A linha rápida é mais sensível e a linha lenta é mais estável.
De acordo com os sinais de cabeça e cabeça vazia, registre a última vez que o sinal foi produzido. Quando a linha rápida e a linha lenta se cruzam, confirme e registre o sinal de compra / venda, e então você pode abrir uma posição.
Depois de entrar no mercado, continue a acompanhar o preço máximo e mínimo da posição. Defina uma porcentagem de parada de perda e, quando a perda atingir essa porcentagem, pare de perder.
O MACD é um dos indicadores clássicos da análise técnica, capaz de identificar tendências.
O desenho diferencial da média lenta e rápida permite a captação antecipada da dinâmica e direção das mudanças de preço.
O efeito de filtragem da linha uniforme pode filtrar alguns sinais falsos.
A estratégia inclui um mecanismo de stop loss para controlar o risco.
Os indicadores MACD são propensos a falsos sinais, e o próprio indicador tem um espaço limitado para otimização.
A configuração inadequada do ponto de parada pode ser excessivamente ativa ou conservadora e precisa ser otimizada individualmente para diferentes variedades.
As posições de quantidade fixa são propensas a aumentar a alavancagem e podem ser consideradas como um limite de risco de acordo com o tamanho do capital.
A racionalidade da escolha da janela de tempo de retorno precisa ser verificada, evitando a sobre-ajuste.
Otimizar combinações de parâmetros de linha média rápida e lenta para encontrar os melhores parâmetros para as diferentes variedades.
Adicione filtros de outros indicadores, como K-line, Brinks, RSI, etc. para validar o sinal.
A eficácia de diferentes pontos de parada pode ser avaliada com base em indicadores como retração e taxa de Sharpe.
Optimizar as estratégias de stop loss, como o stop loss móvel, o stop loss pendurado, etc.
Tente estabelecer posições dinâmicas com base nas mudanças de capital, volatilidade, etc.
A estratégia de equilíbrio MACD é uma estratégia de acompanhamento de tendências baseada em indicadores técnicos clássicos. Tem capacidade de captura sensível à dinâmica das mudanças de preço e pode ser bem adaptada a diferentes variedades por meio de otimização de parâmetros. Combinado com mais indicadores de flutuação, métodos de parada e gestão de posição dinâmica, pode continuar a melhorar a estabilidade e a lucratividade da estratégia.
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("MACD BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Component Code Start ///////////////
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
/////////////// MACD Component - Default settings for one day. ///////////////
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12) // 12 for 4hr
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
long = crossover(delta, 0)
short = crossunder(delta, 0)
last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(5.0, title='Stop Loss %', type=float)/100
/////////////// Strategy Component ///////////////
// Strategy Entry
if testPeriod()
strategy.entry("Long Entry", strategy.long, when=long_signal)
strategy.entry("Short Entry", strategy.short, when=short_signal)
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
// Strategy SL Exit
if testPeriod()
strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)
//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)