Esta estratégia é uma versão aprimorada da estratégia de negociação baseada no indicador MACD. Combina as características de tendência do indicador MACD com as ideias de negociação de momento, gerando sinais de negociação analisando as diferenças entre as médias móveis rápidas e lentas. Enquanto isso, a estratégia também introduz métodos de otimização como confirmação de tendência, confirmação de atraso de sinal, stop-loss e take-profit em porcentagem fixa, para melhorar a robustez e lucratividade da estratégia.
O núcleo desta estratégia é o indicador MACD, que consiste na diferença entre a média móvel rápida (EMA) e a média móvel lenta (EMA). Quando a EMA rápida cruza a EMA lenta, ela gera um sinal de compra ou venda. Especificamente, quando a linha MACD atravessa a linha de sinal de baixo para cima, ela gera um sinal de compra; quando a linha MACD cai abaixo da linha de sinal de cima para baixo, ela gera um sinal de venda.
Além dos sinais cruzados MACD básicos, a estratégia também introduz um mecanismo de confirmação de tendência. Ele compara com a média móvel simples (SMA) para determinar se o mercado atual está em uma tendência de alta ou em uma tendência de baixa. Somente quando um sinal de compra aparece em uma tendência de alta, ou um sinal de venda aparece em uma tendência de baixa, a operação de negociação será executada. Isso evita efetivamente falsos sinais gerados em um mercado oscilante.
Além disso, a estratégia estende a janela de tempo de confirmação do sinal. Ou seja, somente quando o candelabro atual satisfazer as condições de compra ou venda e o candelabro anterior também satisfazer as mesmas condições, a transação correspondente será executada. Isso melhora ainda mais a confiabilidade dos sinais.
Por fim, a estratégia define níveis fixos de stop-loss e take-profit. Uma vez que uma negociação é realizada, os preços de stop-loss e take-profit serão calculados com base no preço de entrada, e a posição será fechada automaticamente quando esses preços forem atingidos. Isso ajuda a controlar o risco e o retorno de uma única transação.
Esta estratégia é uma estratégia de negociação aprimorada baseada no indicador MACD. Através da confirmação de tendência, confirmação de atraso de sinal, stop-loss fixo e take-profit e outros métodos, melhora a robustez e o potencial de lucro da estratégia. No entanto, também enfrenta riscos na otimização de parâmetros, reconhecimento de tendências, indicadores únicos, dados de backtesting e outros aspectos. No futuro, podemos considerar a otimização da estratégia a partir de aspectos como a combinação de outros indicadores, stop-loss dinâmico e take-profit, gerenciamento de posição e aprendizado de máquina para melhorar ainda mais seu efeito prático de aplicação.
/*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)