Chiến lược này là một hệ thống thích nghi kết hợp theo xu hướng và giao dịch phạm vi, sử dụng Chỉ số Choppiness (CI) để xác định điều kiện thị trường và áp dụng logic giao dịch tương ứng. Trong các thị trường xu hướng, chiến lược sử dụng các dấu hiệu giao dịch EMA và tín hiệu mua quá mức / bán quá mức RSI cho giao dịch; trong các thị trường dao động, nó chủ yếu dựa vào các giá trị cực của RSI. Chiến lược cũng bao gồm các cơ chế dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro và khóa lợi nhuận.
Cốt lõi của chiến lược nằm trong việc sử dụng Chỉ số Choppiness (CI) để phân loại thị trường thành các trạng thái xu hướng (CI<38.2) và dao động (CI>61.8). Trong các thị trường xu hướng, các vị trí dài được mở khi EMA nhanh (9 giai đoạn) vượt qua EMA chậm (21-thời gian) và RSI dưới 70, trong khi các vị trí ngắn được mở khi EMA chậm vượt qua EMA nhanh và RSI trên 30. Trong các thị trường dao động, các vị trí dài được mở khi RSI dưới 30, và các vị trí ngắn khi RSI trên 70. Chiến lược bao gồm các điều kiện thoát tương ứng với mức dừng lỗ 2% và mức lợi nhuận 4%.
Chiến lược này xây dựng một hệ thống giao dịch thích nghi bằng cách kết hợp nhiều chỉ số kỹ thuật, duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Ưu điểm cốt lõi của nó nằm trong khả năng thích nghi thị trường và cơ chế quản lý rủi ro toàn diện, trong khi phải chú ý đến tối ưu hóa tham số và sự phụ thuộc của điều kiện thị trường. Thông qua tối ưu hóa và cải thiện liên tục, chiến lược cho thấy hứa hẹn để đạt được kết quả giao dịch tốt hơn trong các điều kiện thị trường khác nhau.
/*backtest start: 2024-12-19 00:00:00 end: 2024-12-26 00:00:00 period: 45m basePeriod: 45m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nopology //@version=6 strategy("CI, EMA, RSI", overlay=false) // Input parameters lengthCI = input(14, title="CI Length") lengthRSI = input(14, title="RSI Length") fastLength = input(9, title="Fast EMA Length") slowLength = input(21, title="Slow EMA Length") // Calculate CI atr = ta.atr(lengthCI) highLowRange = math.log10(math.max(high[lengthCI], high) - math.min(low[lengthCI], low)) sumATR = math.sum(atr, lengthCI) ci = 100 * (math.log10(sumATR / highLowRange) / math.log10(lengthCI)) // Calculate RSI rsi = ta.rsi(close, lengthRSI) // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Define conditions trendingMarket = ci < 38.2 rangingMarket = ci > 61.8 bullishSignal = ta.crossover(fastEMA, slowEMA) and rsi < 70 bearishSignal = ta.crossover(slowEMA, fastEMA) and rsi > 30 // Plot indicators for visualization plot(ci, title="Choppiness Index", color=color.purple, linewidth=2) plot(fastEMA, title="Fast EMA", color=color.blue) plot(slowEMA, title="Slow EMA", color=color.red) // Strategy Execution if (trendingMarket) if (bullishSignal) strategy.entry("Long", strategy.long) if (bearishSignal) strategy.entry("Short", strategy.short) else if (rangingMarket) if (rsi < 30) strategy.entry("Long", strategy.long) if (rsi > 70) strategy.entry("Short", strategy.short) // Close positions when conditions no longer met or reverse if (trendingMarket and not bullishSignal) strategy.close("Long") if (trendingMarket and not bearishSignal) strategy.close("Short") if (rangingMarket and rsi > 40) strategy.close("Long") if (rangingMarket and rsi < 60) strategy.close("Short") // Optional: Add stop loss and take profit stopLossPerc = input.float(2, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 takeProfitPerc = input.float(4, title="Take Profit (%)", minval=0.1, step=0.1) / 100 strategy.exit("Exit Long", "Long", stop=close*(1-stopLossPerc), limit=close*(1+takeProfitPerc)) strategy.exit("Exit Short", "Short", stop=close*(1+stopLossPerc), limit=close*(1-takeProfitPerc))