
Strategi ini adalah sistem perdagangan gabungan yang menggabungkan CCI, RSI, dan dua purata bergerak. Sistem ini dapat menangkap trend biasa, dan menggunakan RSI yang bersilang untuk menambah pengesahan masa masuk untuk menyaring beberapa bunyi.
Strategi ini adalah berdasarkan kepada petunjuk CCI untuk menentukan arah trend. Jika nilai CCI melebihi 100 maka ia adalah pasaran bertopeng, dan jika ia di bawah 100 maka ia adalah pasaran kosong. Sistem ini menggunakan dua persilangan purata bergerak untuk membantu menentukan arah trend.
Setelah menentukan trend kosong, sistem kemudian menggunakan persilangan dua parameter RSI yang berbeza panjangnya sebagai pengesahan masuk. Sebagai contoh, dalam pasaran berbilang kepala, jika RSI jangka pendek menembusi RSI jangka panjang, ia adalah isyarat pembelian akhir. Reka bentuk ini terutama untuk menapis kebisingan dan mengelakkan perubahan jangka pendek dalam trend yang menyebabkan perdagangan yang salah.
Strategi ini hanya membuka kedudukan pada waktu perdagangan yang ditetapkan, dan secara aktif menutup seluruh kedudukan 15 minit sebelum penutupan, untuk mengelakkan risiko semalaman. Selepas membuka kedudukan, ia akan menggunakan hentian bergerak untuk mengunci keuntungan.
Strategi ini mengambil kira penilaian trend dan cross-verifikasi penunjuk, memastikan keberkesanan isyarat perdagangan sambil mengawal risiko. Dengan pengoptimuman parameter dan penyesuaian logik, strategi ini dapat meningkatkan ruang keuntungan dan mengurangkan peluang kehilangan. Ini adalah idea perdagangan yang sangat berpotensi.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
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/
// © rwestbrookjr
//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)
//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)
fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)
fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)
fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')
// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA
//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")
up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))
//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))
//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)
longStop = 0.0, shortStop = 0.0
longStop := if Bull
stopValue = close - trstp
math.max(stopValue, longStop[1])
else
0.0
shortStop := if Bear
stopValue = close + trstp
math.min(stopValue, shortStop[1])
else
999999
//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)
//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
strategy.entry("Long", strategy.long, 1)
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
strategy.close("Long")
shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
strategy.entry("Short", strategy.short, 1)
//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
strategy.close("Short")