
A estratégia é uma versão melhorada da estratégia de negociação baseada no indicador MACD. Combina as características de rastreamento de tendências do indicador MACD e a filosofia de negociação de volume para gerar sinais de negociação através da análise da diferença entre a média móvel rápida e a média móvel lenta. A estratégia também introduz meios de otimização como confirmação de tendências, confirmação de sinais de atraso, paralisação e paralisação de percentual fixo para melhorar a robustez e a lucratividade da estratégia.
O núcleo da estratégia é o indicador MACD, que é formado pela diferença entre a média móvel rápida (EMA) e a média móvel lenta (EMA). Quando a EMA rápida e a EMA lenta se cruzam, um sinal de compra ou venda é produzido.
Além do sinal de cruzamento MACD básico, a estratégia também introduz um mecanismo de confirmação de tendência. Comparando-o com a média móvel simples (SMA), ele determina se o mercado atual está em uma tendência ascendente ou descendente.
Além disso, a estratégia também estende a janela de tempo de confirmação do sinal. A transação é executada quando a linha K atual satisfaz as condições de compra ou venda e a linha K anterior também satisfaz as mesmas condições. Isso aumenta ainda mais a confiabilidade do sinal.
Por fim, a estratégia define um percentual fixo de stop loss e stop loss. Uma vez que a negociação é realizada, o stop loss e o stop loss são calculados com base no preço de abertura da posição e, quando esses preços são atingidos, o posicionamento é automaticamente liquidado. Isso ajuda a controlar o risco e os ganhos de uma única negociação.
A estratégia é uma estratégia de negociação melhorada baseada nos indicadores MACD, aumentando a estabilidade e o potencial de lucro da estratégia por meio de métodos como confirmação de tendência, confirmação de atraso de sinal e parada de perda fixa. Mas, ao mesmo tempo, há riscos de otimização de parâmetros, identificação de tendências, indicadores individuais e dados de retrospecção. No futuro, pode-se considerar a otimização da estratégia em combinação com outros indicadores, parada de perda dinâmica, gerenciamento de posição e aprendizagem de máquina, para melhorar ainda mais a eficácia de sua aplicação real.
/*backtest
start: 2023-05-08 00:00:00
end: 2024-05-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sligetit
//@version=5
strategy("Improved MACD_VXI Strategy", overlay=true)
// Calculate MACD and Signal Line
fastLength = input.int(13, title="Fast Length")
slowLength = input.int(21, title="Slow Length")
signalLength = input.int(8, title="Signal Length")
fastMA = ta.ema(close, fastLength)
slowMA = ta.ema(close, slowLength)
macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
// Plot MACD and Signal Line
plot(macd, color=color.red, linewidth=1)
plot(signal, color=color.blue, linewidth=2)
// Calculate Cross Signals with Trend Confirmation
smaPeriod = input.int(50, title="SMA Period")
sma = ta.sma(close, smaPeriod)
trendUp = close > sma
trendDown = close < sma
crossOver = ta.crossover(signal, macd)
crossUnder = ta.crossunder(signal, macd)
buySignal = crossOver and trendUp
sellSignal = crossUnder and trendDown
// Execute Buy/Sell Operations
if buySignal
strategy.entry("Buy", strategy.long)
if sellSignal
strategy.entry("Sell", strategy.short)
// Extend Signal Confirmation Time Window
longSignal = crossOver[1] and trendUp[1]
shortSignal = crossUnder[1] and trendDown[1]
if longSignal
strategy.entry("Buy", strategy.long)
if shortSignal
strategy.entry("Sell", strategy.short)
// Set Fixed Percentage Stop Loss and Take Profit
stopLossPercent = input.float(1, title="Stop Loss (%)") / 100
takeProfitPercent = input.float(2, title="Take Profit (%)") / 100
stopLossPrice = strategy.position_avg_price * (1 - stopLossPercent)
takeProfitPrice = strategy.position_avg_price * (1 + takeProfitPercent)
strategy.exit("Stop Loss/Profit", "Buy", stop=stopLossPrice, limit=takeProfitPrice)
strategy.exit("Stop Loss/Profit", "Sell", stop=stopLossPrice, limit=takeProfitPrice)