A estratégia é um sistema de negociação auto-adaptável que combina indicadores de volatilidade e dinâmica para capturar tendências de mercado por meio da combinação sincronizada de vários indicadores técnicos. A estratégia usa o indicador ATR para monitorar a flutuação do mercado, o MACD para determinar a dinâmica da tendência e, ao mesmo tempo, combina o indicador de dinâmica de preços para confirmar os sinais de negociação e configura um mecanismo de stop-loss flexível. O sistema é altamente adaptável e pode ajustar automaticamente a frequência de negociação e o controle de posição de acordo com a situação do mercado.
A estratégia baseia-se principalmente em um sistema de três indicadores como lógica de negociação central: primeiro, o ATR mede a volatilidade do mercado, fornecendo referência à volatilidade para a decisão de negociação; segundo, o MACD é usado para capturar os pontos de reversão da tendência, e o cruzamento entre a linha rápida e a lenta do MACD é usado como o principal sinal de ação; terceiro, a verificação reversa usa o indicador de volume de movimento do preço para confirmar a força da tendência, observando as mudanças nos preços em relação ao período anterior. O sistema também inclui a média de 50 dias como filtro de tendência, permitindo apenas que o instrumento faça mais na linha média do preço, ao contrário.
A estratégia é um sistema de negociação quantitativa concebido de forma racional e logicamente rigorosa, que capta eficazmente as tendências do mercado através da utilização conjunta de múltiplos indicadores técnicos. O sistema tem uma consideração meticulosa em termos de controle de risco e execução de negociações, com uma melhor praticidade. Embora existam alguns riscos potenciais, a estabilidade e a rentabilidade da estratégia devem ser ainda melhoradas com a orientação de otimização recomendada.
/*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")