Esta é uma estratégia de tendência adaptativa baseada em múltiplos indicadores técnicos que ajusta automaticamente os parâmetros de acordo com diferentes características do mercado. A estratégia combina o fluxo de dinheiro de Chaikin (CMF), o oscilador de preço detido (DPO) e a curva de Coppock para capturar as tendências do mercado, com fatores de ajuste de volatilidade para se adaptar a diferentes características do mercado. Inclui um sistema abrangente de gerenciamento de posição e controle de risco que ajusta dinamicamente o tamanho das negociações com base na volatilidade do mercado.
A lógica central da estratégia consiste em confirmar a direção da tendência e o calendário das negociações através da cooperação de múltiplos indicadores: 1. Usa o indicador CMF para medir o fluxo de caixa e julgar o sentimento do mercado 2. Emprega o DPO para eliminar a influência da tendência a longo prazo e concentrar-se nas flutuações de preços a médio e curto prazo 3. Adota indicador Coppock modificado para capturar pontos de virada da tendência 4. Gerar sinais de negociação somente quando todos os três indicadores confirmam 5. Calcula dinamicamente os níveis de stop-loss e take-profit usando o ATR Ajusta automaticamente os parâmetros de alavancagem e volatilidade com base em diferentes características do mercado (ações, forex, futuros)
Esta estratégia é um sistema abrangente de tendência que equilibra retornos e riscos através de múltiplos indicadores e mecanismos de controle de risco. A estratégia tem forte extensão com espaço significativo para otimização. Recomenda-se começar com pequena escala na negociação ao vivo, aumentar gradualmente o tamanho da negociação, monitorando continuamente o desempenho da estratégia e ajustando os parâmetros em tempo hábil.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Multi-Market Adaptive Trading Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Input parameters i_market_type = input.string("Crypto", "Market Type", options=["Forex", "Crypto", "Futures"]) i_risk_percent = input.float(1, "Risk Per Trade (%)", minval=0.1, maxval=100, step=0.1) i_volatility_adjustment = input.float(1.0, "Volatility Adjustment", minval=0.1, maxval=5.0, step=0.1) i_max_position_size = input.float(5.0, "Max Position Size (%)", minval=1.0, maxval=100.0, step=1.0) i_max_open_trades = input.int(3, "Max Open Trades", minval=1, maxval=10) // Indicator Parameters i_cmf_length = input.int(20, "CMF Length", minval=1) i_dpo_length = input.int(21, "DPO Length", minval=1) i_coppock_short = input.int(11, "Coppock Short ROC", minval=1) i_coppock_long = input.int(14, "Coppock Long ROC", minval=1) i_coppock_wma = input.int(10, "Coppock WMA", minval=1) i_atr_length = input.int(14, "ATR Length", minval=1) // Market-specific Adjustments volatility_factor = i_market_type == "Forex" ? 0.1 : i_market_type == "Futures" ? 1.5 : 1.0 volatility_factor *= i_volatility_adjustment leverage = i_market_type == "Forex" ? 100.0 : i_market_type == "Futures" ? 20.0 : 3.0 // Calculate Indicators mf_multiplier = ((close - low) - (high - close)) / (high - low) mf_volume = mf_multiplier * volume cmf = ta.sma(mf_volume, i_cmf_length) / ta.sma(volume, i_cmf_length) dpo_offset = math.floor(i_dpo_length / 2) + 1 dpo = close - ta.sma(close, i_dpo_length)[dpo_offset] roc1 = ta.roc(close, i_coppock_short) roc2 = ta.roc(close, i_coppock_long) coppock = ta.wma(roc1 + roc2, i_coppock_wma) atr = ta.atr(i_atr_length) // Define Entry Conditions long_condition = cmf > 0 and dpo > 0 and coppock > 0 and ta.crossover(coppock, 0) short_condition = cmf < 0 and dpo < 0 and coppock < 0 and ta.crossunder(coppock, 0) // Calculate Position Size account_size = strategy.equity risk_amount = math.min(account_size * (i_risk_percent / 100), account_size * (i_max_position_size / 100)) position_size = (risk_amount / (atr * volatility_factor)) * leverage // Execute Trades if (long_condition and strategy.opentrades < i_max_open_trades) sl_price = close - (atr * 2 * volatility_factor) tp_price = close + (atr * 3 * volatility_factor) strategy.entry("Long", strategy.long, qty=position_size) strategy.exit("Long Exit", "Long", stop=sl_price, limit=tp_price) if (short_condition and strategy.opentrades < i_max_open_trades) sl_price = close + (atr * 2 * volatility_factor) tp_price = close - (atr * 3 * volatility_factor) strategy.entry("Short", strategy.short, qty=position_size) strategy.exit("Short Exit", "Short", stop=sl_price, limit=tp_price) // Plot Indicators plot(cmf, color=color.blue, title="CMF") plot(dpo, color=color.green, title="DPO") plot(coppock, color=color.red, title="Coppock") hline(0, "Zero Line", color=color.gray) // Alerts alertcondition(long_condition, title="Long Entry", message="Potential Long Entry Signal") alertcondition(short_condition, title="Short Entry", message="Potential Short Entry Signal") // // Performance reporting // if barstate.islastconfirmedhistory // label.new(bar_index, high, text="Strategy Performance:\nTotal Trades: " + str.tostring(strategy.closedtrades) + // "\nWin Rate: " + str.tostring(strategy.wintrades / strategy.closedtrades * 100, "#.##") + "%" + // "\nProfit Factor: " + str.tostring(strategy.grossprofit / strategy.grossloss, "#.##"))