Strategi ini adalah sistem adaptif yang menggabungkan trend mengikuti dan perdagangan julat, menggunakan Indeks Choppiness (CI) untuk menentukan keadaan pasaran dan menggunakan logik perdagangan yang sesuai.
Inti strategi ini terletak pada menggunakan Indeks Kesukaan (CI) untuk mengklasifikasikan pasaran ke dalam keadaan trend (CI<38.2) dan julat (CI>61.8). Di pasaran trend, kedudukan panjang dibuka apabila EMA cepat (9-periode) melintasi di atas EMA perlahan (21-periode) dan RSI di bawah 70, sementara kedudukan pendek dibuka apabila EMA perlahan melintasi di atas EMA cepat dan RSI di atas 30. Di pasaran julat, kedudukan panjang dibuka apabila RSI di bawah 30, dan kedudukan pendek apabila RSI di atas 70.
Strategi ini membina sistem dagangan adaptif dengan menggabungkan beberapa penunjuk teknikal, mengekalkan prestasi yang stabil di pelbagai persekitaran pasaran. Kelebihan utamanya terletak pada kemampuan penyesuaian pasaran dan mekanisme pengurusan risiko yang komprehensif, sementara perhatian mesti diberikan kepada pengoptimuman parameter dan ketergantungan keadaan pasaran. Melalui pengoptimuman dan peningkatan yang berterusan, strategi menunjukkan janji untuk mencapai hasil dagangan yang lebih baik di pelbagai keadaan pasaran.
/*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))