
Strategi ini adalah sistem penyesuaian diri yang menggabungkan pelacakan tren dan perdagangan interval untuk menilai kondisi pasar melalui indeks fluktuasi (CI) dan menggunakan logika perdagangan yang sesuai sesuai dengan kondisi pasar yang berbeda. Dalam pasar tren, strategi ini melakukan perdagangan dengan menggunakan sinyal overbought dan oversold EMA crossover dan RSI. Dalam pasar interval, strategi ini terutama didasarkan pada nilai teratas dari indikator RSI.
Inti dari strategi ini adalah untuk membagi pasar menjadi pasar tren (CI <38.2) dan pasar interval (CI >61.8) melalui indeks fluktuasi. Di pasar tren, ketika EMA cepat (siklus 9) melintasi EMA lambat (siklus 21) dan RSI di bawah 70, membuka overhead; ketika EMA lambat (siklus 9) melintasi EMA cepat dan RSI di atas 30, membuka overhead. Di pasar interval, ketika RSI di bawah 30 membuka overhead, dan di atas 70 membuka overhead.
Strategi ini membangun sistem perdagangan yang dapat beradaptasi sendiri dengan menggabungkan beberapa indikator teknis, yang dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar. Keunggulan inti dari strategi ini adalah adaptasi pasar dan mekanisme manajemen risiko yang baik, tetapi juga perlu memperhatikan masalah seperti optimasi parameter dan ketergantungan pada kondisi pasar. Dengan terus-menerus mengoptimalkan dan memperbaiki, strategi ini diharapkan untuk mencapai efek perdagangan yang lebih baik di berbagai lingkungan pasar.
/*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))