Sistem Perdagangan Dual Quant

Penulis:ChaoZhang, Tanggal: 2024-02-26 14:30:54
Tag:

img

Strategi ini menggabungkan indikator CCI, indikator RSI dan dua rata-rata bergerak ke dalam sistem perdagangan gabungan.

Prinsip Strategi

Strategi ini terutama menggunakan indikator CCI untuk menentukan arah tren. pembacaan CCI di atas 100 menunjukkan pasar bullish, sementara yang di bawah -100 menunjukkan pasar bearish. Sistem ini menggunakan dua crossover rata-rata bergerak untuk membantu menentukan arah tren.

Setelah menentukan tren bullish atau bearish, sistem kemudian menggunakan silang dua RSI dengan panjang parameter yang berbeda sebagai verifikasi masuk. Misalnya, di pasar bull, jika RSI jangka pendek melintasi di atas RSI jangka panjang, itu adalah sinyal beli akhir. Desain ini terutama menyaring kebisingan untuk menghindari perdagangan yang salah yang dipicu oleh koreksi jangka pendek selama tren.

Strategi ini hanya membuka posisi selama sesi perdagangan yang ditentukan, secara aktif menutup semua posisi 15 menit sebelum penutupan untuk menghindari risiko overnight.

Analisis Keuntungan

  • Menggabungkan penilaian tren dan crossover indikator dapat secara efektif mengidentifikasi tren dan menyaring kebisingan untuk entri yang tepat
  • Menggunakan trailing stop untuk secara aktif mengendalikan risiko menghindari dihentikan karena flash crash
  • Hanya membuka posisi selama sesi perdagangan tertentu yang menghindari risiko gap overnight
  • Parameter RSI yang dapat disesuaikan dapat beradaptasi secara fleksibel dengan lingkungan pasar yang berbeda

Analisis Risiko

  • CCI menunjukkan kinerja yang buruk di pasar yang sangat volatile
  • Kondisi silang RSI ganda relatif ketat, berpotensi kehilangan beberapa peluang
  • Trailing berhenti bisa terlalu subjektif, membutuhkan optimasi parameter
  • Sesi perdagangan tertentu mungkin melewatkan kesenjangan berita utama dalam semalam

Saran Optimalisasi

  • Uji kombinasi parameter CCI yang berbeda untuk menemukan pengaturan optimal
  • Tes menghilangkan kondisi crossover RSI dan langsung masuk berdasarkan CCI
  • Backtest dan mengoptimalkan parameter trailing stop untuk menemukan pengaturan yang optimal
  • Uji menghilangkan logika penutupan posisi yang dipaksakan dan sebaliknya melacak keuntungan dengan trailing stop selama posisi untuk memaksimalkan keuntungan

Ringkasan

Strategi ini secara komprehensif mempertimbangkan penentuan tren dan validasi crossover indikator untuk memastikan validitas sinyal sambil mengendalikan risiko. Melalui optimasi parameter dan penyesuaian logika, strategi ini memiliki potensi lebih lanjut untuk memperluas peluang keuntungan dan mengurangi peluang yang hilang. Ini adalah konsep perdagangan yang sangat menjanjikan.


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


Lebih banyak