Strategi CCI Pengesanan Momentum

Penulis:ChaoZhang, Tarikh: 2023-10-25 17:37:39
Tag:

img

Ringkasan

Strategi ini adalah berdasarkan kepada penunjuk Indeks Saluran Komoditi (CCI), bertujuan untuk pergi panjang dalam keadaan oversold dan pergi pendek dalam keadaan overbought. Ia juga secara opsyen menggunakan penapis Purata Bergerak Eksponensial (EMA) untuk hanya berdagang ke arah trend. Strategi ini juga menyediakan peratusan tetap atau Julat Benar Purata (ATR) berdasarkan stop loss dan mengambil keuntungan.

Logika Strategi

  1. Menggunakan penunjuk CCI untuk menentukan trend pasaran

    • CCI mengukur momentum dengan membandingkan harga semasa dengan harga purata sepanjang tempoh.

    • CCI di atas 150 adalah overbought, di bawah -100 adalah oversold

  2. Pilihan menggunakan penapis EMA

    • Hanya pergi panjang apabila harga di atas EMA, dan pendek apabila di bawah EMA

    • Menggunakan EMA untuk menentukan arah trend, mengelakkan perdagangan kontra-trend

  3. Menyediakan dua jenis stop loss dan mengambil keuntungan

    • Stop loss dan mengambil keuntungan berasaskan peratusan tetap: Gunakan peratusan tetap daripada harga masuk

    • Stop loss berasaskan ATR dan mengambil keuntungan: Gunakan pengganda ATR untuk stop loss, mengira mengambil keuntungan berdasarkan nisbah ganjaran risiko

  4. Syarat kemasukan

    • Pergi panjang apabila CCI melintasi di atas -100

    • Berjalan pendek apabila CCI melintasi di bawah 150

    • Jika EMA diaktifkan, masukkan hanya apabila harga berada di sebelah kanan EMA

  5. Syarat keluar

    • Posisi ditutup apabila stop loss atau mengambil keuntungan dipukul

    • Posisi tertutup apabila CCI memasuki semula kawasan overbought/oversold

  6. Merancang

    • Grafik penunjuk CCI, kawasan kod warna

Analisis Kelebihan

  1. Menggunakan CCI overbought/oversold untuk kemasukan, penggunaan klasik CCI

  2. EMA pilihan memastikan perdagangan dengan trend, mengelakkan pembalikan

  3. Menyediakan dua jenis stop loss / mengambil keuntungan untuk fleksibiliti

  4. Penutupan pada isyarat CCI sekali lagi mengunci keuntungan pembalikan

  5. Merangkumi tanda-tanda CCI dengan jelas

  6. Logik yang mudah dan jelas, mudah difahami dan dioptimumkan

Analisis Risiko

  1. CCI mempunyai kesan lambat, mungkin terlepas pembalikan atau memberikan isyarat palsu

  2. Parameter EMA yang salah boleh terlepas trend atau membuat strategi tidak berkesan

  3. Peratusan tetap stop loss/take profit kurang menyesuaikan diri dengan perubahan pasaran

  4. ATR stop loss/take profit sensitif kepada tempoh ATR, harus mengoptimumkan

  5. Risiko pengambilan yang lebih besar, saiz kedudukan harus diselaraskan

  6. Prestasi berbeza-beza mengikut keadaan pasaran, menilai semula parameter

Arahan pengoptimuman

  1. Menilai tempoh CCI untuk mencari kombinasi parameter yang optimum

  2. Uji tempoh EMA yang berbeza untuk anggaran trend terbaik

  3. Sesuaikan stop loss/take profit untuk nisbah ganjaran risiko yang optimum

  4. Tambah penapis lain seperti kelantangan untuk mengelakkan isyarat palsu

  5. Gabungkan dengan garis trend / corak carta untuk pengesahan corak

  6. Tambah peraturan saiz kedudukan seperti saiz tetap untuk mengawal pengeluaran

  7. Ujian semula dalam keadaan pasaran yang berbeza, menyesuaikan secara dinamik

Ringkasan

Strategi ini menggunakan prinsip overbought / oversold CCI klasik untuk kemasukan. Penapis EMA mengawal perdagangan trend. Dua jenis stop loss / mengambil keuntungan disediakan untuk fleksibiliti. Merancang menyoroti isyarat dengan jelas. Logik yang mudah dan jelas, mudah difahami dan dioptimumkan. Penambahbaikan lanjut boleh dibuat melalui penyesuaian parameter, menambah penapis, kawalan risiko dan lain-lain.


/*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))


Lebih lanjut