Strategi Scalping Berbasis CCI dan EMA

Penulis:ChaoZhang, Tanggal: 2024-01-31 16:01:21
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan osilasi jangka pendek yang menggabungkan indikator EMA dan indikator CCI untuk mengidentifikasi tren jangka pendek dan tingkat overbought/oversold di pasar, untuk menangkap peluang dari fluktuasi harga jangka pendek.

Logika Strategi

Strategi ini terutama menggunakan garis EMA 10 hari, EMA 21 hari dan EMA 50 hari dan indikator CCI untuk menentukan waktu masuk dan keluar.

Logika spesifiknya adalah: Ketika rata-rata bergerak jangka pendek (10 hari EMA) melintasi di atas rata-rata bergerak jangka menengah (21-hari EMA) dan rata-rata bergerak jangka pendek lebih tinggi dari rata-rata bergerak jangka panjang (50 hari EMA), dan pada saat yang sama indikator CCI lebih besar dari 0, itu dianggap sinyal bullish untuk pergi panjang.

Logika keluar adalah untuk menutup posisi ketika rata-rata bergerak jangka pendek melintasi kembali di atas rata-rata bergerak jangka menengah.

Keuntungan

  1. Menggabungkan sistem rata-rata bergerak dan indikator CCI dapat secara efektif mengidentifikasi tren harga jangka pendek dan tingkat overbought/oversold.

  2. Menggunakan crossover rata-rata bergerak untuk menentukan entri dan keluar sederhana dan praktis.

  3. Parameter CCI dan pengaturan siklus lebih wajar untuk menyaring beberapa sinyal palsu.

  4. Mengadopsi beberapa kerangka waktu rata-rata bergerak dapat mendapatkan peluang perdagangan yang lebih baik di pasar osilasi.

Risiko

  1. Fluktuasi besar dalam operasi jangka pendek dapat menyebabkan stop loss berturut-turut.

  2. Pengaturan parameter CCI yang tidak benar dapat meningkatkan sinyal palsu.

  3. Selama periode batas dan konsolidasi, strategi ini dapat mengalami beberapa kerugian kecil.

  4. Hanya cocok untuk pedagang jangka pendek, tidak cocok untuk kepemilikan jangka panjang.

Langkah-langkah mitigasi risiko yang sesuai meliputi: mengoptimalkan parameter CCI, menyesuaikan posisi stop loss, menambahkan kondisi FILTER, dll.

Arahan Optimasi

  1. Kombinasi panjang EMA yang berbeda dapat diuji untuk mengoptimalkan parameter.

  2. Indikator atau kondisi filter lainnya dapat ditambahkan untuk menyaring beberapa sinyal palsu, seperti MACD, KDJ dll.

  3. Gunakan stop loss dinamis untuk mengontrol kerugian tunggal.

  4. Menggabungkan indikator tren jangka waktu yang lebih tinggi dapat menghindari perdagangan melawan tren.

Kesimpulan

Secara keseluruhan, ini adalah strategi osilasi jangka pendek yang khas yang menggunakan penyeberangan garis rata-rata bergerak dikombinasikan dengan status overbought / oversold dari indikator CCI untuk menangkap peluang pembalikan jangka pendek. Strategi ini cocok untuk perdagangan jangka pendek yang sering, tetapi perlu menahan tekanan stop loss tertentu. Stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut melalui optimasi parameter dan penambahan kondisi filter.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")

Lebih banyak