
Strategi ini didasarkan pada indikator Commodity Channel Index (CCI) yang dirancang untuk melakukan overbought dan underbought. Strategi ini juga secara opsional menggunakan filter EMA untuk mengendalikan perdagangan hanya di arah tren. Strategi ini juga menawarkan stop loss yang didasarkan pada persentase tetap atau rentang rata-rata nyata (ATR).
Menggunakan indikator CCI untuk menilai tren pasar
CCI mengukur momentum dengan membandingkan harga saat ini dengan harga rata-rata dalam periode tertentu
CCI di atas 150 adalah overbought, di bawah -100 adalah oversold
Opsional menggunakan EMA filter
Hanya melakukan over jika harga lebih tinggi dari EMA, melakukan short jika harga lebih rendah dari EMA
Menggunakan EMA untuk menentukan arah tren dan menghindari perdagangan kontra-tren
Ada dua cara untuk menghentikan kerugian
Stop loss berdasarkan persentase tetap: menggunakan persentase tetap dari harga masuk untuk mengatur stop loss
Stop loss berdasarkan ATR: Stop loss ditetapkan dengan menggunakan kelipatan ATR, kemudian stop loss dihitung berdasarkan RRR
Syarat masuk
CCI melakukan lebih banyak saat melewati garis 100.
Di bawah CCI, kosong saat melewati garis 150
Jika EMA diaktifkan, hanya melakukan over jika harga lebih tinggi dari EMA, dan melakukan over jika harga lebih rendah dari EMA
Kondisi pertandingan
Harga mencapai level stop loss
CCI kembali ke zona overbought dan oversold
Peta
Menggunakan CCI untuk menilai overbought dan oversold, ini adalah penggunaan klasik dari indikator CCI
Opsional EMA memastikan hanya berdagang di arah tren dan menghindari pembalikan
Dua mode stop loss yang tersedia, parameter stop loss dapat disesuaikan dengan pasar
Dengan masuk kembali ke zona overbought dan oversold berdasarkan indikator CCI, Anda dapat mengunci keuntungan untuk membalikkan tren.
Peta yang menonjolkan sinyal CCI, mudah dibaca
Strategi logis yang jelas dan sederhana, mudah dipahami dan dioptimalkan
Indikator CCI terlambat, mungkin terjadi pembalikan yang terlewatkan atau menghasilkan sinyal palsu
Setting parameter EMA yang tidak tepat dapat melewatkan tren atau membatalkan strategi
Persentase stop loss yang sulit untuk beradaptasi dengan perubahan pasar, dengan parameter yang lebih luas
ATR Stop Stop Stop adalah sensitif terhadap siklus interval dan harus disesuaikan dengan parameter optimal
Risiko penarikan lebih tinggi, manajemen posisi harus disesuaikan
Efek Parameter indikator harus dinilai sesuai dengan perubahan lingkungan pasar
Evaluasi parameter CCI dari berbagai periode untuk menemukan kombinasi optimal
Uji siklus EMA yang berbeda untuk menentukan siklus penilaian tren yang paling sesuai
Menyesuaikan parameter stop loss dan stop loss untuk mendapatkan RRR optimal
Menambahkan kondisi filter lainnya, seperti volume transaksi, untuk lebih memfilter sinyal palsu
Menggabungkan garis tren atau grafik untuk penilaian bentuk, meningkatkan efektivitas
Menambahkan strategi manajemen posisi, seperti posisi tetap, untuk mengendalikan risiko penarikan
Data lingkungan pasar yang berbeda, parameter penyesuaian dinamis
Strategi ini menggunakan prinsip overbought dan oversold klasik dari indikator CCI untuk memulai. Anda dapat mengontrol arah tren dengan menambahkan filter EMA. Anda dapat dengan mudah menyesuaikan dengan dua cara stop loss dan stop loss.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alifer123
//@version=5
// strategy("CCI+EMA Strategy with Percentage or ATR TP/SL [Alifer]", shorttitle = "CCI_EMA_%/ATR_TP/SL", overlay=false,
// initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.045)
length = input(14, "CCI Length")
overbought = input.int(150, step = 10, title = "Overbought")
oversold = input.int(-140, step = 10, title = "Oversold")
src = hlc3
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
// EMA
useEMA = input(true, "Use EMA", tooltip = "Only enters long when price is above the EMA, only enters short when price is below the EMA")
emaLength = input(55, "EMA Length")
var float ema = na
if useEMA
ema := ta.ema(src, emaLength)
// Take Profit and Stop Loss Method
tpSlMethod_percentage = input(true, "Percentage TP/SL", group="TP/SL Method")
tpSlMethod_atr = input(false, "ATR TP/SL", group="TP/SL Method")
// Percentage-based Take Profit and Stop Loss
tp_percentage = input.float(10.0, title="Take Profit (%)", step=0.1, group="TP/SL Method")
sl_percentage = input.float(10.0, title="Stop Loss (%)", step=0.1, group="TP/SL Method")
// ATR-based Take Profit and Stop Loss
atrLength = input(20, title="ATR Length", group="TP/SL Method")
atrMultiplier = input(4, title="ATR SL Multiplier", group="TP/SL Method")
riskRewardRatio = input(2, title="Risk Reward Ratio", group="TP/SL Method")
// Calculate TP/SL levels based on the selected method, or leave them undefined if neither method is selected
longTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 + tp_percentage / 100) : na
longSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 - sl_percentage / 100) : na
shortTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 - tp_percentage / 100) : na
shortSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 + sl_percentage / 100) : na
if tpSlMethod_atr
longSL := strategy.position_avg_price - ta.atr(atrLength) * atrMultiplier
longTP := ((strategy.position_avg_price - longSL) * riskRewardRatio) + strategy.position_avg_price
shortSL := strategy.position_avg_price + ta.atr(atrLength) * atrMultiplier
shortTP := ((strategy.position_avg_price - shortSL) * riskRewardRatio) - strategy.position_avg_price
// Enter long position when CCI crosses below oversold level and price is above EMA
longCondition = ta.crossover(cci, oversold) and (not useEMA or close > ema)
if longCondition
strategy.entry("Buy", strategy.long)
// Enter short position when CCI crosses above overbought level and price is below EMA
shortCondition = ta.crossunder(cci, overbought) and (not useEMA or close < ema)
if shortCondition
strategy.entry("Sell", strategy.short)
// Close long positions with Take Profit or Stop Loss
if strategy.position_size > 0
strategy.exit("Long Exit", "Buy", limit=longTP, stop=longSL)
// Close short positions with Take Profit or Stop Loss
if strategy.position_size < 0
strategy.exit("Short Exit", "Sell", limit=shortTP, stop=shortSL)
// Close positions when CCI crosses back above oversold level in long positions or below overbought level in short positions
if ta.crossover(cci, overbought)
strategy.close("Buy")
if ta.crossunder(cci, oversold)
strategy.close("Sell")
// Plotting
color_c = cci > overbought ? color.red : (cci < oversold ? color.green : color.white)
plot(cci, "CCI", color=color_c)
hline(0, "Middle Band", color=color.new(#787B86, 50))
obband = hline(overbought, "OB Band", color=color.new(#78867a, 50))
osband = hline(oversold, "OS Band", color=color.new(#867878, 50))
fill(obband, osband, color=color.new(#787B86, 90))