Sistem Perdagangan Dual Quant

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

img

Strategi ini menggabungkan penunjuk CCI, penunjuk RSI dan dua purata bergerak ke dalam sistem perdagangan komposit. Ia boleh menangkap trend konvensional sambil menggunakan persilangan RSI untuk menambah pengesahan untuk entri untuk menapis beberapa bunyi bising.

Prinsip Strategi

Strategi ini terutamanya menggunakan penunjuk CCI untuk menentukan arah trend. Bacaan CCI di atas 100 menunjukkan pasaran bullish, sementara yang di bawah -100 menunjukkan pasaran bearish. Sistem ini menggunakan dua persilangan purata bergerak untuk membantu menentukan arah trend.

Selepas menentukan trend menaik atau menurun, sistem kemudian menggunakan persilangan dua RSI dengan panjang parameter yang berbeza sebagai pengesahan kemasukan. Sebagai contoh, dalam pasaran lembu, jika RSI jangka pendek melintasi di atas RSI jangka panjang, ini adalah isyarat beli akhir. Reka bentuk ini terutamanya menapis bunyi bising untuk mengelakkan perdagangan yang salah yang dicetuskan oleh pembetulan jangka pendek semasa trend.

Strategi ini hanya membuka kedudukan semasa sesi dagangan yang ditentukan, secara aktif menutup semua kedudukan 15 minit sebelum penutupan untuk mengelakkan risiko semalam.

Analisis Kelebihan

  • Menggabungkan penilaian trend dan persilangan penunjuk dapat dengan berkesan mengenal pasti trend dan menapis bunyi bising untuk entri yang tepat
  • Menggunakan hentian penghantaran untuk mengawal risiko secara aktif mengelakkan hentian kerana kemalangan kilat
  • Hanya membuka kedudukan semasa sesi dagangan tertentu mengelakkan risiko jurang semalaman
  • Parameter RSI yang boleh diselaraskan boleh disesuaikan dengan fleksibel dengan persekitaran pasaran yang berbeza

Analisis Risiko

  • CCI menunjukkan prestasi yang lemah di pasaran yang tidak biasa berubah
  • Keadaan silang RSI berganda agak ketat, berpotensi kehilangan beberapa peluang
  • Penghentian penghantaran boleh menjadi terlalu subjektif, memerlukan pengoptimuman parameter
  • Sesi dagangan tertentu mungkin terlepas jurang berita utama semalam

Cadangan Pengoptimuman

  • Uji kombinasi parameter CCI yang berbeza untuk mencari tetapan optimum
  • Ujian menghilangkan keadaan silang RSI dan memasuki secara langsung berdasarkan CCI
  • Backtest dan mengoptimumkan parameter hentian untuk mencari tetapan optimum
  • Uji menghilangkan logik penutupan kedudukan yang dipaksa dan sebaliknya menjejaki keuntungan dengan berhenti di belakang semasa kedudukan untuk memaksimumkan keuntungan

Ringkasan

Strategi ini secara komprehensif mempertimbangkan penentuan trend dan pengesahan silang penunjuk untuk memastikan kesahihan isyarat sambil mengawal risiko. Melalui pengoptimuman parameter dan penyesuaian logik, strategi ini mempunyai potensi untuk memperluaskan peluang keuntungan dan mengurangkan 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 lanjut