Chiến lược này là một hệ thống giao dịch thích nghi kết hợp nhiều chỉ số phân tích kỹ thuật và chuyển đổi giữa các chiến lược giao dịch khác nhau bằng cách xác định động điều kiện thị trường. Hệ thống chủ yếu dựa trên Moving Average (MA), Bollinger Bands (BB) và Relative Strength Index (RSI), tự động chọn phương pháp giao dịch phù hợp nhất theo xu hướng thị trường và đặc điểm dao động phạm vi. Chiến lược thực hiện các giải pháp quản lý rủi ro khác biệt cho các thị trường xu hướng và dao động bằng cách đặt các tham số lấy lợi nhuận và dừng lỗ khác nhau.
Trong các thị trường xu hướng, hệ thống chủ yếu giao dịch dựa trên mối quan hệ giá với trung bình di chuyển chậm và chéo giữa các đường nhanh và chậm; trong các thị trường dao động, nó chủ yếu giao dịch trên các dấu hiệu đột phá Bollinger Bands và tín hiệu RSI quá mua / quá bán. Hệ thống tự động điều chỉnh mức lợi nhuận theo điều kiện thị trường, sử dụng 6% cho các thị trường xu hướng và 4% cho các thị trường dao động, với mức dừng lỗ đồng đều 2% để kiểm soát rủi ro.
Chiến lược này xây dựng một hệ thống giao dịch thích nghi có khả năng thích nghi với các môi trường thị trường khác nhau bằng cách kết hợp nhiều chỉ số kỹ thuật cổ điển. Trong khi duy trì tính đơn giản hoạt động, hệ thống đạt được xác định trạng thái thị trường năng động và chuyển đổi chiến lược giao dịch tự động, chứng minh tính thực tế mạnh mẽ. Thông qua các thiết lập lấy lợi nhuận và dừng lỗ khác biệt, chiến lược duy trì lợi nhuận tốt trong khi kiểm soát rủi ro. Sự ổn định và độ tin cậy của chiến lược có thể được tăng thêm bằng cách giới thiệu nhiều chỉ số kỹ thuật hơn và tối ưu hóa các cơ chế điều chỉnh tham số.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("Supply & Demand Test 1 - Enhanced", overlay=true) // Inputs ma_length = input.int(50, title="50-period Moving Average Length", minval=1) ma_length_fast = input.int(20, title="20-period Moving Average Length", minval=1) bb_length = input.int(20, title="Bollinger Bands Length", minval=1) bb_std_dev = input.float(2.0, title="Bollinger Bands Std Dev", step=0.1) rsi_length = input.int(14, title="RSI Length", minval=1) stop_loss_percent = input.float(0.02, title="Stop Loss Percent", step=0.001, minval=0.001) take_profit_trend = input.float(0.06, title="Take Profit Percent (Trend)", step=0.001, minval=0.001) take_profit_range = input.float(0.04, title="Take Profit Percent (Range)", step=0.001, minval=0.001) // Moving Averages ma_slow = ta.sma(close, ma_length) ma_fast = ta.sma(close, ma_length_fast) // Bollinger Bands bb_basis = ta.sma(close, bb_length) bb_dev = ta.stdev(close, bb_length) bb_upper = bb_basis + bb_std_dev * bb_dev bb_lower = bb_basis - bb_std_dev * bb_dev // RSI rsi = ta.rsi(close, rsi_length) // Market Conditions is_trending_up = close > ma_slow is_trending_down = close < ma_slow is_range_bound = not (is_trending_up or is_trending_down) // Entry Conditions long_trend_entry = is_trending_up and close >= ma_slow * 1.02 short_trend_entry = is_trending_down and close <= ma_slow * 0.98 long_ma_crossover = ta.crossover(ma_fast, ma_slow) short_ma_crossover = ta.crossunder(ma_fast, ma_slow) long_range_entry = is_range_bound and close <= bb_lower * 0.97 short_range_entry = is_range_bound and close >= bb_upper * 1.03 long_rsi_entry = is_range_bound and rsi < 30 short_rsi_entry = is_range_bound and rsi > 70 // Entry and Exit Logic if long_trend_entry strategy.entry("Long Trend", strategy.long) strategy.exit("Exit Long Trend", from_entry="Long Trend", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_trend)) alert("Entered Long Trend", alert.freq_once_per_bar) if short_trend_entry strategy.entry("Short Trend", strategy.short) strategy.exit("Exit Short Trend", from_entry="Short Trend", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_trend)) alert("Entered Short Trend", alert.freq_once_per_bar) if long_ma_crossover strategy.entry("Long MA Crossover", strategy.long) strategy.exit("Exit Long MA Crossover", from_entry="Long MA Crossover", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_trend)) alert("Entered Long MA Crossover", alert.freq_once_per_bar) if short_ma_crossover strategy.entry("Short MA Crossover", strategy.short) strategy.exit("Exit Short MA Crossover", from_entry="Short MA Crossover", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_trend)) alert("Entered Short MA Crossover", alert.freq_once_per_bar) if long_range_entry strategy.entry("Long Range", strategy.long) strategy.exit("Exit Long Range", from_entry="Long Range", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_range)) alert("Entered Long Range", alert.freq_once_per_bar) if short_range_entry strategy.entry("Short Range", strategy.short) strategy.exit("Exit Short Range", from_entry="Short Range", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_range)) alert("Entered Short Range", alert.freq_once_per_bar) if long_rsi_entry strategy.entry("Long RSI", strategy.long) strategy.exit("Exit Long RSI", from_entry="Long RSI", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_range)) alert("Entered Long RSI", alert.freq_once_per_bar) if short_rsi_entry strategy.entry("Short RSI", strategy.short) strategy.exit("Exit Short RSI", from_entry="Short RSI", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_range)) alert("Entered Short RSI", alert.freq_once_per_bar) // Plotting plot(ma_slow, color=color.blue, title="50-period MA") plot(ma_fast, color=color.orange, title="20-period MA") plot(bb_upper, color=color.red, title="Bollinger Upper") plot(bb_lower, color=color.green, title="Bollinger Lower") plot(bb_basis, color=color.gray, title="Bollinger Basis") hline(70, "Overbought (RSI)", color=color.red, linestyle=hline.style_dotted) hline(30, "Oversold (RSI)", color=color.green, linestyle=hline.style_dotted)