Chiến lược này là một hệ thống theo xu hướng thích nghi dựa trên nhiều bộ lọc chỉ số kỹ thuật. Nó kết hợp các chỉ số kỹ thuật khác nhau bao gồm Trung bình chuyển động nhân tố (EMA), Trung bình chuyển động đơn giản (SMA), và Divergence hội tụ trung bình chuyển động (MACD), điều chỉnh động các tham số để thích nghi với các môi trường thị trường khác nhau để nắm bắt xu hướng hiệu quả và kiểm soát rủi ro. Chiến lược sử dụng một cơ chế lọc nhiều lớp, cải thiện đáng kể độ tin cậy của tín hiệu giao dịch thông qua sự kết hợp phối hợp của nhiều chỉ số kỹ thuật.
Lý thuyết cốt lõi dựa trên một cơ chế lọc ba lớp:
Việc tạo tín hiệu giao dịch đòi hỏi phải đáp ứng tất cả các điều kiện lọc: chuyển đổi xu hướng, xác nhận hướng SMA và hỗ trợ đường tín hiệu MACD. Chiến lược cũng bao gồm một hệ thống quản lý vị trí năng động dựa trên vốn chủ sở hữu tài khoản, tự động điều chỉnh kích thước vị trí thông qua một yếu tố đòn bẩy.
Chiến lược đạt được xu hướng tương đối đáng tin cậy thông qua các cơ chế lọc đa lớp và điều chỉnh tham số động. Mặc dù có một số rủi ro về sự chậm trễ và sự phụ thuộc tham số, nhưng vẫn có thể đạt được hiệu suất ổn định trong giao dịch thực tế thông qua tối ưu hóa tham số hợp lý và các biện pháp kiểm soát rủi ro. Các nhà giao dịch được khuyến cáo kiểm tra kỹ lưỡng và điều chỉnh cài đặt tham số theo dung nạp rủi ro cá nhân trước khi giao dịch trực tiếp.
/*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")