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.
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.
Menggabungkan sistem purata bergerak dan penunjuk CCI dapat dengan berkesan mengenal pasti trend harga jangka pendek dan tahap overbought/oversold.
Menggunakan persilangan purata bergerak untuk menentukan entri dan keluar adalah mudah dan praktikal.
Parameter CCI dan tetapan kitaran lebih munasabah untuk menapis beberapa isyarat palsu.
Menggunakan pelbagai jangka masa purata bergerak boleh mendapatkan peluang perdagangan yang lebih baik di pasaran berayun.
Fluktuasi besar dalam operasi jangka pendek boleh membawa kepada kerugian berhenti berturut-turut.
Tetapan parameter CCI yang tidak betul boleh meningkatkan isyarat palsu.
Semasa tempoh terhad dan pengukuhan, strategi ini mungkin menghadapi banyak kerugian kecil.
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.
Gabungan panjang EMA yang berbeza boleh diuji untuk mengoptimumkan parameter.
Indikator atau keadaan penapis lain boleh ditambah untuk menapis beberapa isyarat palsu, seperti MACD, KDJ dll.
Gunakan stop loss dinamik untuk mengawal kerugian tunggal.
Menggabungkan penunjuk trend jangka masa yang lebih tinggi dapat mengelakkan perdagangan terhadap trend.
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")