Esta estratégia negocia sinais de cruzamento do MACD para decisões de entrada e saída.
Estratégia lógica:
Calcule a EMA rápida e a EMA lenta, sua diferença forma a linha MACD.
Suavizar a linha MACD usando outra EMA para derivar a linha de sinal.
Ir longo no cruzamento do MACD acima do sinal e curto no cruzamento abaixo.
Defina percentagem de stop loss e take profit para gestão de riscos.
Vantagens:
O MACD melhora em relação à EMA única para uma identificação mais clara da tendência.
A negociação de breakout capta pontos de virada em tempo hábil.
Os mecanismos de stop loss/take profit ajudam a controlar os riscos comerciais.
Riscos:
Mais falhas perto da linha zero do MACD.
Ajuste de parâmetros necessário para diferentes instrumentos de negociação.
Trades de tendência propensos a riscos de eventos, exigindo paradas.
Em resumo, essa estratégia é baseada no MACD e no cruzamento de linhas de sinal. Os pontos fortes do MACD beneficiam o desempenho, mas os riscos de falha de ruptura permanecem. Controles de risco prudentes ainda são necessários para ganhos constantes a longo prazo.
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("uray MACD", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=2, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2017) ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window inTimeframe() => true isPosLong = strategy.position_size > 0 isPosShort = strategy.position_size < 0 isNoMarginPos= strategy.position_size == 0 fastLength = input(12, minval = 1, title = "MACD fast") slowlength = input(26, minval = 1, title = "MACD slow") MACDLength = input( 9, minval = 1, title = "MACD length") stopLoss = input( 10, minval = 1, title = "Stop Loss (price %)", type=float) takeProfit = input( 50, minval = 1, title = "Take Profit (price %)", type=float) src = close // Source of Calculations (Close of Bar) MACD = ta.ema(src, fastLength) - ta.ema(src, slowlength) aMACD = ta.ema(MACD, MACDLength) delta = MACD - aMACD stopLossValue = close*(stopLoss/100)/syminfo.mintick takeProfitValue = close*(takeProfit/100)/syminfo.mintick switchLongTrigger = ta.crossover(delta, 0) switchShortTrigger = ta.crossunder(delta, 0) closeLongTrigger = ta.crossunder(delta, 0) closeShortTrigger = ta.crossover(delta, 0) entryLongTrigger = ta.crossover(delta, 0) entryShortTrigger = ta.crossunder(delta, 0) // if inTimeframe() // if isNoMarginPos // if entryLongTrigger // strategy.entry("Long", strategy.long, comment="Entry Long") // strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if entryShortTrigger // strategy.entry("Short", strategy.short, comment="Entry Short") // strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if isPosShort // if switchLongTrigger // strategy.close_all() // strategy.entry("Long", strategy.long, comment="switch Long") // strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if closeLongTrigger // strategy.close_all() // if isPosLong // if switchShortTrigger // strategy.close_all() // strategy.entry("Short", strategy.short, comment="switch Short") // strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) // if closeShortTrigger // strategy.close_all() if inTimeframe() strategy.entry("Long", strategy.long, comment="Entry Long", when=entryLongTrigger) strategy.close("Long", when=entryShortTrigger) strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShortTrigger) strategy.close("Short", when=entryLongTrigger) strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShortTrigger) strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLongTrigger)