
Strategi ini adalah sistem penyesuaian diri yang menggabungkan trend dan perdagangan selang, menilai keadaan pasaran melalui indeks turun naik (CI) dan menggunakan logik perdagangan yang sesuai dengan keadaan pasaran yang berbeza. Dalam pasaran yang sedang tren, strategi ini menggunakan EMA crossover dan RSI overbought oversold isyarat untuk perdagangan; dalam pasaran selang, ia adalah perdagangan berdasarkan nilai teratas RSI.
Strategi ini berpusat pada pengelompokan pasaran ke dalam pasaran trend (CI <38.2) dan pasaran selang (CI >61.8) melalui indeks bergelombang (CI <38.2) dan pasaran selang (CI >61.8). Dalam pasaran selang (CI <38.2) dan pasaran selang (CI >61.8) terdapat dua keadaan. Dalam pasaran selang, apabila EMA (peringkat 9) bergerak perlahan dan RSI berada di bawah 70, ia akan terbuka; apabila EMA (peringkat 9) bergerak perlahan dan RSI berada di atas 30, ia akan terbuka.
Strategi ini membina sistem perdagangan yang menyesuaikan diri dengan menggabungkan beberapa petunjuk teknikal, yang dapat mengekalkan prestasi yang stabil dalam keadaan pasaran yang berbeza. Kelebihan utama strategi ini adalah adaptasi pasaran dan mekanisme pengurusan risiko yang baik, tetapi juga perlu memperhatikan masalah seperti pengoptimuman parameter dan ketergantungan keadaan pasaran. Dengan pengoptimuman dan penambahbaikan yang berterusan, strategi ini dijangka dapat mencapai kesan perdagangan yang lebih baik dalam 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))