
Chiến lược này là một hệ thống tự điều chỉnh kết hợp theo dõi xu hướng và giao dịch trong khoảng thời gian, đánh giá tình trạng thị trường thông qua chỉ số biến động (CI) và áp dụng logic giao dịch tương ứng cho các môi trường thị trường khác nhau. Trong thị trường xu hướng, chiến lược sử dụng các tín hiệu giao dịch EMA và RSI để mua và bán; trong thị trường trong khoảng thời gian, giao dịch chủ yếu dựa trên giá trị cực đại của chỉ số RSI. Chiến lược cũng bao gồm cơ chế dừng lỗ để kiểm soát rủi ro và khóa lợi nhuận.
Cốt lõi của chiến lược là phân chia thị trường thành thị trường xu hướng (CI <38.2) và thị trường phân đoạn (CI >61.8) thông qua chỉ số dao động (CI). Trong thị trường xu hướng, khi EMA nhanh (chu kỳ 9) đi qua EMA chậm (chu kỳ 21) và RSI thấp hơn 70, mở đầu; khi EMA chậm (chu kỳ 9) đi qua EMA nhanh và RSI cao hơn 30, mở đầu trống. Trong thị trường phân đoạn, khi RSI thấp hơn 30 mở đầu, mở đầu trống khi cao hơn 70.
Chiến lược này xây dựng một hệ thống giao dịch tự điều chỉnh bằng cách kết hợp nhiều chỉ số kỹ thuật, có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Điểm mạnh cốt lõi của chiến lược là khả năng thích ứng với thị trường và cơ chế quản lý rủi ro tốt, nhưng cũng cần chú ý đến các vấn đề như tối ưu hóa tham số và phụ thuộc vào điều kiện thị trường. Bằng cách tối ưu hóa và cải tiến liên tục, chiến lược này có thể đạt được hiệu quả giao dịch tốt hơn trong các môi trường 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))