
Esta estratégia é um sistema de rastreamento de tendências adaptável baseado na filtragem de múltiplos indicadores técnicos. Ele combina vários indicadores técnicos, como média móvel exponencial (EMA), média móvel simples (SMA) e convergência e divergência de média móvel (MACD), e ajusta dinamicamente os parâmetros para se adaptar a diferentes ambientes de mercado para obter captura de tendências eficiente e controle de risco. Essa estratégia adota um mecanismo de filtragem em camadas e melhora significativamente a confiabilidade dos sinais de negociação por meio da cooperação coordenada de vários indicadores técnicos.
A lógica central da estratégia é baseada em um mecanismo de filtragem de três camadas:
A geração de sinais de negociação requer o cumprimento de todas as condições de filtro: mudança de tendência, confirmação da direção da SMA e suporte da linha de sinal MACD. A estratégia também inclui um sistema dinâmico de gerenciamento de posição com base no patrimônio da conta, que ajusta automaticamente o tamanho da posição por meio de fatores de alavancagem.
Essa estratégia alcança um efeito de rastreamento de tendências mais confiável por meio de mecanismo de filtragem multicamadas e ajuste dinâmico de parâmetros. Embora existam certos riscos de atraso e dependência de parâmetros, um desempenho estável ainda pode ser alcançado em transações reais por meio de otimização razoável de parâmetros e medidas de controle de risco. É recomendável que os traders realizem uma verificação completa de backtesting antes do uso em tempo real e ajustem as configurações dos parâmetros de acordo com sua tolerância pessoal ao risco.
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500,
initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// User-defined inputs for trend logic
atr = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length = input.int(2, "Main Length", minval=2)
smooth_len = input.int(2, "Smoothing Length", minval=2)
sensitivity = input.float(2.0, "Sensitivity", step=0.1)
// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)
// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker = input("SPX", title= "Ticker/symbol of your broker")
bullcolor = #0097a7
bearcolor = #ff195f
showbars = input.bool(true, "Color Bars?")
showbg = input.bool(true, "Background Color?")
showsignals = input.bool(true, "Show Signals?")
// Trend calculation functions
calculate_trend_levels() =>
typical = hlc3
fast_ema = ta.ema(typical, length)
slow_ema = ta.ema(typical, length * 2)
basis = (fast_ema + slow_ema) / 2
vol = ta.stdev(typical, length)
smooth_vol = ta.ema(vol, smooth_len)
upper = basis + (smooth_vol * sensitivity)
lower = basis - (smooth_vol * sensitivity)
[basis, upper, lower]
get_trend_state(upper, lower, basis) =>
var float prev_level = na
var int trend = 0
if na(prev_level)
trend := close > basis ? 1 : -1
prev_level := trend == 1 ? lower : upper
if trend == 1
if close < lower
trend := -1
prev_level := upper
else
prev_level := lower
else
if close > upper
trend := 1
prev_level := lower
else
prev_level := upper
[trend, prev_level]
[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)
// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true
// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true
// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1
// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
// label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
// label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)
qty = strategy.equity / close * leverage_factor
// Automated alerts
if long_signal
alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)
// Strategy entries and exits
if long_signal
strategy.entry("Long", strategy.long, qty=qty)
if short_signal
strategy.close("Long")
// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")