Strategi Scalping berasaskan CCI dan EMA

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

img

Ringkasan

Ini adalah strategi perdagangan osilasi jangka pendek yang menggabungkan penunjuk EMA dan penunjuk CCI untuk mengenal pasti trend jangka pendek dan tahap overbought / oversold di pasaran, untuk merebut peluang dari turun naik harga jangka pendek.

Logika Strategi

Strategi ini terutamanya menggunakan garis EMA 10 hari, EMA 21 hari dan EMA 50 hari dan penunjuk CCI untuk menentukan masa masuk dan keluar.

Logiknya ialah: Apabila purata bergerak jangka pendek (10 hari EMA) melintasi di atas purata bergerak jangka sederhana (21-hari EMA) dan purata bergerak jangka pendek lebih tinggi daripada purata bergerak jangka panjang (50 hari EMA), dan pada masa yang sama penunjuk CCI lebih besar daripada 0, ia dianggap sebagai isyarat kenaikan untuk pergi panjang. Apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka sederhana dan purata bergerak jangka pendek lebih rendah daripada purata bergerak jangka panjang, dan pada masa yang sama penunjuk CCI kurang daripada 0, ia dianggap sebagai isyarat penurunan untuk pergi pendek.

Logik keluar adalah untuk menutup kedudukan apabila purata bergerak jangka pendek menyeberangi semula purata bergerak jangka sederhana.

Kelebihan

  1. Menggabungkan sistem purata bergerak dan penunjuk CCI dapat dengan berkesan mengenal pasti trend harga jangka pendek dan tahap overbought/oversold.

  2. Menggunakan persilangan purata bergerak untuk menentukan entri dan keluar adalah mudah dan praktikal.

  3. Parameter CCI dan tetapan kitaran lebih munasabah untuk menapis beberapa isyarat palsu.

  4. Menggunakan pelbagai jangka masa purata bergerak boleh mendapatkan peluang perdagangan yang lebih baik di pasaran berayun.

Risiko

  1. Fluktuasi besar dalam operasi jangka pendek boleh membawa kepada kerugian berhenti berturut-turut.

  2. Tetapan parameter CCI yang tidak betul boleh meningkatkan isyarat palsu.

  3. Semasa tempoh terhad dan pengukuhan, strategi ini mungkin menghadapi banyak kerugian kecil.

  4. Hanya sesuai untuk peniaga kerap jangka pendek, tidak sesuai untuk pegangan jangka panjang.

Langkah-langkah mengurangkan risiko yang sepadan termasuk: mengoptimumkan parameter CCI, menyesuaikan kedudukan stop loss, menambah syarat FILTER, dll.

Arahan pengoptimuman

  1. Gabungan panjang EMA yang berbeza boleh diuji untuk mengoptimumkan parameter.

  2. Indikator atau keadaan penapis lain boleh ditambah untuk menapis beberapa isyarat palsu, seperti MACD, KDJ dll.

  3. Gunakan stop loss dinamik untuk mengawal kerugian tunggal.

  4. Menggabungkan penunjuk trend jangka masa yang lebih tinggi dapat mengelakkan perdagangan terhadap trend.

Kesimpulan

Secara keseluruhan, ini adalah strategi osilasi jangka pendek yang biasa yang menggunakan persilangan garis purata bergerak digabungkan dengan status overbought / oversold penunjuk CCI untuk menangkap peluang pembalikan jangka pendek. Strategi ini sesuai untuk perdagangan jangka pendek yang kerap, tetapi perlu menahan tekanan stop loss tertentu. Kestabilan dan keuntungan strategi dapat ditingkatkan lagi melalui pengoptimuman parameter dan penambahan keadaan penapis.


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