Esta é uma estratégia de negociação quantitativa baseada no índice direcional médio (ADX) e nas rupturas de preço. A estratégia monitora principalmente os valores do indicador ADX para avaliar a força da tendência do mercado e combina sinais de ruptura de preço para capturar o ímpeto do mercado. A estratégia opera dentro de sessões de negociação específicas e implementa gerenciamento de risco por meio de limites de stop-loss e de negociação diária.
A lógica de base inclui os seguintes elementos-chave:
Esta é uma estratégia de tendência bem estruturada com lógica clara. Captura as tendências do mercado combinando indicadores ADX com quebras de preço sob uma estrutura de gerenciamento de risco eficaz. Embora haja espaço para otimização, a base da estratégia é robusta e adequada como um componente básico de um sistema de negociação quantitativa. Os traders são aconselhados a realizar um backtesting completo e otimização de parâmetros antes da negociação ao vivo e fazer melhorias específicas com base nas condições do mercado.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 00:00:00 period: 1d basePeriod: 1d 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/ // © HuntGatherTrade // ======================== // NQ 30 minute, ES 30 minute //@version=5 strategy("ADX Breakout", overlay=false, initial_capital=25000, default_qty_value=1) // =============================== // Input parameters // =============================== stopLoss = input(1000.0, title="Stop Loss ($)", group="Exits") session = input("0730-1430:1234567", group="Trade Session") highestLB = input(34, title="Highest lookback window", group="Indicator values") // =============================== // Trade Session Handling // =============================== t = time(timeframe.period, session) // Reset numTrades at the start of each session var int numTrades = 0 is_new_session = ta.change(time("D")) != 0 if is_new_session numTrades := 0 // =============================== // Entry Conditions // =============================== [plusDI, minusDI, adxValue] = ta.dmi(50, 14) entryCondition = (close >= ta.highest(close, highestLB)[1]) and (adxValue < 17.5) and (strategy.position_size == 0) and (numTrades < 3) and not na(t) // =============================== // 7. Execute Entry // =============================== var float stopPricePlot = na if entryCondition entryPrice = close + syminfo.mintick strategy.entry("Long Entry", strategy.long, stop=entryPrice) //stopPrice = strategy.position_avg_price - (stopLoss / syminfo.pointvalue) //strategy.exit("Stop Loss", "Long Entry", stop=stopPrice) numTrades += 1 if (strategy.position_size > 0) and (strategy.position_size[1] == 0) stopPoints = stopLoss / syminfo.pointvalue stopPrice = strategy.position_avg_price - stopPoints stopPrice := math.round(stopPrice / syminfo.mintick) * syminfo.mintick strategy.exit("Stop Loss", from_entry="Long Entry", stop=stopPrice) if ta.change(strategy.opentrades) == 1 float entryPrice = strategy.opentrades.entry_price(0) stopPricePlot := entryPrice - (stopLoss / syminfo.pointvalue) if ta.change(strategy.closedtrades) == 1 stopPricePlot := na plot(stopPricePlot, "Stop-loss level", color.red, 1, plot.style_linebr) // =============================== // Exit at End of Session // =============================== if na(t) and strategy.position_size != 0 strategy.close_all(comment="End of Day Exit")