Esta estratégia é um sistema de negociação adaptativo que combina os indicadores de volatilidade e momentum para capturar as tendências do mercado através da coordenação de vários indicadores técnicos. A estratégia usa o indicador ATR para monitorar a volatilidade do mercado, o MACD para julgar o momentum da tendência e combina os indicadores de momentum de preço para confirmar os sinais de negociação, com um mecanismo flexível de stop-loss e take-profit. O sistema tem forte adaptabilidade e pode ajustar automaticamente a frequência de negociação e o controle de posição de acordo com as condições do mercado.
A estratégia baseia-se em um sistema de indicadores triplos como sua lógica de negociação central: primeiro, o ATR é usado para medir as condições de volatilidade do mercado para fornecer referência de volatilidade para decisões de negociação; segundo, os cruzes douradas e da morte do indicador MACD são usados para capturar pontos de virada da tendência, com cruzes de linha rápidas e lentas do MACD usadas como os principais sinais de gatilho de negociação; terceiro, os indicadores de impulso de preço são usados para verificação, observando mudanças de preço em relação aos períodos anteriores para confirmar a força da tendência. O sistema também incorpora uma média móvel de 50 dias como um filtro de tendência, permitindo apenas posições longas quando o preço está acima da média móvel e posições curtas quando abaixo. Para evitar o excesso de negociação, a estratégia de sinal impõe intervalos mínimos de negociação e opcionalmente execução alternada.
Esta estratégia é um sistema de negociação quantitativo bem projetado e logicamente rigoroso que consegue capturar efetivamente as tendências do mercado através do uso de múltiplos indicadores técnicos. O sistema fez considerações detalhadas no controle de riscos e execução de negociações, mostrando boa praticidade.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD) // === Input Parameters === // trade_size = input.float(5, title="Trade Size (ETH)") atr_length = input.int(8, minval=1, title="ATR Length") macd_fast = input.int(8, minval=1, title="MACD Fast Length") macd_slow = input.int(7, minval=1, title="MACD Slow Length") macd_signal = input.int(9, minval=1, title="MACD Signal Length") momentum_length = input.int(37, title="Momentum Length") stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)") take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)") alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals") // === Indicators === // // ATR to measure volatility atr = ta.atr(atr_length) // MACD for trend momentum [macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal) macd_cross_up = ta.crossover(macd_line, signal_line) macd_cross_down = ta.crossunder(macd_line, signal_line) // Momentum momentum = ta.mom(close, momentum_length) // === Signal Control Variables === // var bool last_signal_long = na var int last_trade_bar = na min_bars_between_trades = 5 // Adjust for minimal trade frequency control time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades // === Buy and Sell Conditions === // // Buy when: buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed) // Sell when: sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed) // Enforce alternate signals if selected if alternate_signal buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long) sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long) // === Trade Execution === // // Buy Position if (buy_signal) if strategy.position_size < 0 strategy.close("Short") strategy.entry("Long", strategy.long, qty=trade_size) last_signal_long := true last_trade_bar := bar_index // Sell Position if (sell_signal) if strategy.position_size > 0 strategy.close("Long") strategy.entry("Short", strategy.short, qty=trade_size) last_signal_long := false last_trade_bar := bar_index // === Stop Loss and Take Profit === // if strategy.position_size > 0 long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100) long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100) strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss) if strategy.position_size < 0 short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100) short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100) strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss) // === Visual Signals === // plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")