Berdasarkan sistem perdagangan kuantitatif ganda


Tanggal Pembuatan: 2024-02-26 14:30:54 Akhirnya memodifikasi: 2024-02-26 14:30:54
menyalin: 5 Jumlah klik: 654
1
fokus pada
1617
Pengikut

Berdasarkan sistem perdagangan kuantitatif ganda

Strategi ini adalah sistem perdagangan gabungan yang menggabungkan indikator CCI, indikator RSI, dan dua rata-rata bergerak. Sistem ini dapat menangkap tren konvensional, sementara menggunakan indikator RSI yang bersilang untuk menambah konfirmasi saat masuk, untuk menyaring beberapa kebisingan.

Prinsip Strategi

Strategi ini terutama didasarkan pada indikator CCI untuk menentukan arah tren. Jika nilai indikator CCI lebih tinggi dari 100 adalah pasar overhead, jika lebih rendah dari 100 adalah pasar overhead. Sistem ini menggunakan dua persilangan rata-rata bergerak untuk membantu menentukan arah tren.

Setelah menentukan tren overhead, sistem kemudian menggunakan silang dari dua parameter RSI dengan panjang yang berbeda sebagai verifikasi masuk. Sebagai contoh, dalam pasar multihead, jika indikator RSI berjangka pendek melewati indikator RSI berjangka panjang, untuk sinyal pembelian akhir.

Strategi ini hanya membuka posisi pada waktu perdagangan yang ditentukan, dan secara aktif menutup seluruh posisi 15 menit sebelum penutupan, untuk menghindari risiko semalam. Setelah membuka posisi, Anda akan menggunakan stop loss bergerak untuk mengunci keuntungan.

Analisis Keunggulan

  • Kombinasi penilaian tren dan indikator silang, dapat mengidentifikasi tren secara efektif dan memfilter kebisingan, masuk ke dalam dengan tepat
  • Menggunakan Stop Loss Mobile untuk Mengontrol Risiko Secara Aktif dan Menghindari Stop Loss yang Diikuti
  • Hanya buka posisi pada waktu yang ditentukan untuk menghindari risiko overnight
  • Parameter indikator RSI dapat disesuaikan dan dapat disesuaikan dengan berbagai kondisi pasar

Analisis risiko

  • Indeks CCI kurang efektif dalam menilai pasar yang sangat berfluktuasi
  • Kondisi crossover RSI ganda lebih dibatasi, mungkin kehilangan beberapa peluang
  • Stop loss bergerak mungkin terlalu subjektif dan parameter yang perlu dioptimalkan
  • Tentukan waktu perdagangan yang mungkin terlewatkan akibat berita besar malam hari

Saran untuk Optimasi

  • CCI yang dapat diuji dengan parameter yang berbeda untuk menemukan kombinasi optimal
  • Uji coba apakah bisa membatalkan RSI cross-restricted condition dan langsung masuk ke CCI
  • Optimalkan pengukuran kembali parameter stop loss mobile untuk menemukan parameter optimal
  • Uji coba membatalkan logika posisi kosong yang wajib, dan menggantikannya dengan pelacakan stop loss yang bergerak selama periode kepemilikan posisi untuk memaksimalkan keuntungan

Meringkaskan

Strategi ini secara komprehensif mempertimbangkan penilaian tren dan cross-verifikasi indikator, memastikan efektivitas sinyal perdagangan sambil mengendalikan risiko. Dengan pengoptimalan parameter dan penyesuaian logis, strategi ini dapat lebih meningkatkan ruang keuntungan dan mengurangi peluang kehilangan. Ini adalah ide perdagangan yang sangat potensial.

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