Berdasarkan sistem perdagangan dua kuantitatif


Tarikh penciptaan: 2024-02-26 14:30:54 Akhirnya diubah suai: 2024-02-26 14:30:54
Salin: 5 Bilangan klik: 654
1
fokus pada
1617
Pengikut

Berdasarkan sistem perdagangan dua kuantitatif

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.

Prinsip Strategi

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.

Analisis kelebihan

  • Gabungan penilaian trend dan penyambungan penunjuk, dapat mengenal pasti trend dengan berkesan dan menyaring kebisingan, masuk dengan tepat
  • Menggunakan Stop Loss Bergerak untuk mengawal risiko secara proaktif dan mengelakkan Stop Loss dari diserang
  • Berdagang hanya pada waktu yang ditetapkan untuk mengelakkan risiko terjatuh pada waktu malam
  • Parameter RSI boleh disesuaikan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza

Analisis risiko

  • Indeks CCI kurang berkesan dalam menilai pasaran yang tidak stabil
  • RSI dua kali lebih terhad dan mungkin terlepas beberapa peluang
  • Kemusnahan bergerak mungkin terlalu subjektif dan parameter yang perlu dioptimumkan
  • Tentukan masa perdagangan yang mungkin terlepas berita utama malam

Cadangan Optimasi

  • CCI yang boleh diuji dengan parameter yang berbeza untuk mencari kombinasi parameter yang terbaik
  • Uji apakah boleh membatalkan syarat sekatan silang RSI dan masuk secara langsung berdasarkan CCI
  • Optimumkan pengulangan parameter stop loss bergerak untuk mencari parameter terbaik
  • Uji ujian untuk membatalkan logik kedudukan kosong yang wajib dan beralih kepada pengesanan berhenti bergerak dalam tempoh pegangan untuk memaksimumkan keuntungan

ringkaskan

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.

Kod 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")