Sistema de negociação inteligente com rastreamento de tendências e obtenção de lucro dinâmico, combinando média móvel dupla e MACD

MA MACD SMA EMA TP SL PIPS
Data de criação: 2024-12-13 11:23:00 última modificação: 2024-12-13 11:23:00
cópia: 0 Cliques: 434
1
focar em
1617
Seguidores

Sistema de negociação inteligente com rastreamento de tendências e obtenção de lucro dinâmico, combinando média móvel dupla e MACD

Visão geral

A estratégia é um sistema de acompanhamento de tendências que combina duas médias móveis e um indicador MACD. Utiliza médias móveis de 50 e 200 períodos para determinar a direção da tendência e, ao mesmo tempo, usa o indicador MACD para capturar momentos de entrada específicos. A estratégia usa um mecanismo de stop-loss dinâmico e melhora a qualidade das negociações com condições de filtragem múltiplas.

Princípio da estratégia

A lógica central da estratégia baseia-se nos seguintes elementos-chave:

  1. Julgamento de tendência: Use a relação de posição da linha média de 50 e 200 para julgar a tendência geral, quando a linha média rápida está acima da linha média lenta, julgue a tendência ascendente, ao contrário da tendência descendente.
  2. O sinal de entrada: depois de confirmar a direção da tendência, use o cruzamento do indicador MACD para acionar o sinal de entrada específico. Em uma tendência ascendente, o MACD faz mais entrada quando atravessa a linha de sinal na linha; em uma tendência descendente, o MACD faz vazio quando atravessa a linha de sinal na linha abaixo.
  3. Filtragem de negociação: introdução de mecanismos de filtragem múltiplos, como intervalos mínimos de negociação, intensidade de tendência e MACD devaluação, para evitar o excesso de negociação em um ambiente de mercado altamente volátil.
  4. Controle de risco: utiliza-se um mecanismo de stop loss com um número fixo de pontos e um parâmetro de parada ajustável, em combinação com a média móvel e o sinal de reversão do MACD como condição de saída dinâmica.

Vantagens estratégicas

  1. A combinação de acompanhamento de tendências com a dinâmica: a combinação de medias móveis e indicadores MACD permite a compreensão das grandes tendências e a precisão da hora de entrada.
  2. Gestão de risco perfeita: configuração de múltiplos mecanismos de suspensão de perdas, incluindo suspensão de perdas fixas e suspensão de perdas dinâmicas acionadas por indicadores técnicos.
  3. Configuração de parâmetros flexíveis: parâmetros-chave como o número de pontos de parada de perda, o ciclo de linha média, etc. podem ser ajustados de forma flexível de acordo com as condições do mercado.
  4. Mecanismos de filtragem inteligentes: reduzem os falsos sinais e melhoram a qualidade das transações através de múltiplas condições de filtragem.
  5. Estatísticas de desempenho completas: funções detalhadas de estatísticas de transações embutidas, incluindo o cálculo em tempo real de indicadores-chave, como taxa de vitória, ganhos e perdas médias.

Risco estratégico

  1. Risco de mercado de choque: Falso sinal frequente pode ser gerado em mercados de choque horizontal, sugerindo a adição de indicadores de confirmação de tendência.
  2. Risco de deslizamento: as operações de curto prazo são vulneráveis a deslizamentos, sendo recomendado um afrouxamento apropriado da configuração de stop loss.
  3. Sensibilidade de parâmetros: a performance da estratégia é sensível à configuração de parâmetros e precisa de otimização de parâmetros adequada.
  4. Dependência do cenário de mercado: a estratégia tem um bom desempenho em mercados de forte tendência, mas pode ser instável em outros cenários de mercado.

Direção de otimização da estratégia

  1. Optimização de stop loss dinâmico: pode-se ajustar a amplitude de stop loss de acordo com a dinâmica do indicador ATR, para torná-lo mais adaptado às flutuações do mercado.
  2. Otimização do tempo de entrada: Indicadores auxiliares como o RSI podem ser adicionados para confirmar o tempo de entrada e melhorar a precisão da negociação.
  3. Optimização da gestão de posições: introdução de um sistema de gestão de posições dinâmico baseado na volatilidade, para melhor controlar o risco.
  4. Identificação do cenário de mercado: adicionar módulos de identificação do cenário de mercado, usando diferentes combinações de parâmetros em diferentes condições de mercado.

Resumir

Trata-se de um sistema de negociação de rastreamento de tendências concebido de forma racional e logicamente completa. Combinando indicadores técnicos clássicos e métodos modernos de gerenciamento de risco, a estratégia concentra-se no controle do risco ao mesmo tempo em que capta as tendências. Apesar de existirem algumas áreas que precisam de otimização, é uma estratégia de negociação de valor prático.

Código-fonte da estratégia
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
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/
// © WolfofAlgo

//@version=5
strategy("Trend Following Scalping Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Input Parameters
stopLossPips = input.float(5.0, "Stop Loss in Pips", minval=1.0)
takeProfitPips = input.float(10.0, "Take Profit in Pips", minval=1.0)
useFixedTakeProfit = input.bool(true, "Use Fixed Take Profit")

// Moving Average Parameters
fastMA = input.int(50, "Fast MA Period")
slowMA = input.int(200, "Slow MA Period")

// MACD Parameters
macdFastLength = input.int(12, "MACD Fast Length")
macdSlowLength = input.int(26, "MACD Slow Length")
macdSignalLength = input.int(9, "MACD Signal Length")

// Trade Filter Parameters (Adjusted to be less strict)
minBarsBetweenTrades = input.int(5, "Minimum Bars Between Trades", minval=1)
trendStrengthPeriod = input.int(10, "Trend Strength Period")
minTrendStrength = input.float(0.4, "Minimum Trend Strength", minval=0.1, maxval=1.0)
macdThreshold = input.float(0.00005, "MACD Threshold", minval=0.0)

// Variables for trade management
var int barsLastTrade = 0
barsLastTrade := nz(barsLastTrade[1]) + 1

// Calculate Moving Averages
ma50 = ta.sma(close, fastMA)
ma200 = ta.sma(close, slowMA)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)

// Calculate trend strength (simplified)
trendDirection = ta.ema(close, trendStrengthPeriod) > ta.ema(close, trendStrengthPeriod * 2)
isUptrend = close > ma50 and ma50 > ma200
isDowntrend = close < ma50 and ma50 < ma200

// Calculate pip value
pointsPerPip = syminfo.mintick * 10

// Entry Conditions with Less Strict Filters
macdCrossUp = ta.crossover(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold
macdCrossDown = ta.crossunder(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold

// Long and Short Conditions
longCondition = close > ma50 and macdCrossUp and barsLastTrade >= minBarsBetweenTrades and isUptrend
shortCondition = close < ma50 and macdCrossDown and barsLastTrade >= minBarsBetweenTrades and isDowntrend

// Exit Conditions (made more lenient)
exitLongCondition = macdCrossDown or close < ma50
exitShortCondition = macdCrossUp or close > ma50

// Reset bars counter on new trade
if (longCondition or shortCondition)
    barsLastTrade := 0

// Calculate stop loss and take profit levels
longStopPrice = strategy.position_avg_price - (stopLossPips * pointsPerPip)
longTakeProfitPrice = strategy.position_avg_price + (takeProfitPips * pointsPerPip)
shortStopPrice = strategy.position_avg_price + (stopLossPips * pointsPerPip)
shortTakeProfitPrice = strategy.position_avg_price - (takeProfitPips * pointsPerPip)

// Plot Moving Averages
plot(ma50, "50 MA", color=color.blue)
plot(ma200, "200 MA", color=color.red)

// Plot Entry Signals
plotshape(longCondition, "Long Signal", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown, location.abovebar, color.red, size=size.small)

// Strategy Entry Rules
if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// Strategy Exit Rules
if (strategy.position_size > 0 and exitLongCondition)
    strategy.close("Long")

if (strategy.position_size < 0 and exitShortCondition)
    strategy.close("Short")

// Stop Loss and Take Profit Management
if (strategy.position_size > 0)
    strategy.exit("Long TP/SL", "Long", stop=longStopPrice, limit=useFixedTakeProfit ? longTakeProfitPrice : na)

if (strategy.position_size < 0)
    strategy.exit("Short TP/SL", "Short", stop=shortStopPrice, limit=useFixedTakeProfit ? shortTakeProfitPrice : na)

// Performance Metrics
var float totalTrades = 0
var float winningTrades = 0
var float totalProfitPips = 0
var float totalLossPips = 0

if (strategy.closedtrades > 0)
    totalTrades := strategy.closedtrades
    winningTrades := strategy.wintrades
    totalProfitPips := strategy.grossprofit / pointsPerPip
    totalLossPips := math.abs(strategy.grossloss) / pointsPerPip

// Display Stats
var label statsLabel = na
label.delete(statsLabel[1])

// Create performance stats text
var string stats = ""
if (strategy.closedtrades > 0)
    winRate = (winningTrades / math.max(totalTrades, 1)) * 100
    avgWin = totalProfitPips / math.max(winningTrades, 1)
    avgLoss = totalLossPips / math.max(totalTrades - winningTrades, 1)
    plRatio = avgWin / math.max(avgLoss, 1)
    
    stats := "Win Rate: " + str.tostring(winRate, "#.##") + "%\n" +
             "Avg Win: " + str.tostring(avgWin, "#.##") + " pips\n" +
             "Avg Loss: " + str.tostring(avgLoss, "#.##") + " pips\n" +
             "P/L Ratio: " + str.tostring(plRatio, "#.##") + "\n" +
             "Total Trades: " + str.tostring(totalTrades, "#")

statsLabel := label.new(x=bar_index, y=high, text=stats, style=label.style_label_down, color=color.new(color.blue, 80))