Strategi Dagangan Kuantitatif Berdasarkan Pelbagai Penunjuk

Penulis:ChaoZhang, Tarikh: 2023-10-25 18:06:44
Tag:

img

Ringkasan

Strategi ini menggabungkan beberapa penunjuk teknikal untuk membuat keputusan perdagangan panjang dan pendek. Ia terutamanya menggunakan Bollinger Bands, RSI, ADX dan penunjuk lain, bersama dengan purata bergerak untuk menentukan arah trend.

Logika Strategi

RSI digunakan untuk mengenal pasti keadaan overbought dan oversold. RSI di atas 70 adalah overbought manakala di bawah 30 adalah oversold. Apabila band sempit dan RSI mendekati hadnya, perdagangan terbalik dipertimbangkan.

Selain itu, ADX digunakan untuk menilai kekuatan trend. ADX yang tinggi mewakili trend yang kuat, memihak kepada perdagangan trend. ADX yang rendah tidak mewakili trend yang jelas, mempertimbangkan pembalikan purata. Akhirnya, purata bergerak menentukan arah trend jangka panjang. Uptrend memihak lama manakala downtrend memihak pendek.

Secara khusus, apabila band memerah, RSI mendekati hadnya, dan harga pecah di bawah band bawah, lompatan dijangka, pergi panjang. Apabila band memerah, RSI mendekati hadnya, dan harga pecah di atas band atas, penurunan dijangka, pergi pendek. Juga, dengan ADX yang tinggi, tambah panjang dalam trend menaik. Dengan ADX yang rendah, tambah pendek dalam downtrend. Menggabungkan penunjuk meningkatkan ketahanan sistem.

Analisis Kelebihan

Strategi pelbagai penunjuk mempunyai kelebihan berikut:

  1. Menggabungkan penunjuk meningkatkan ketepatan dan ketahanan. Penunjuk tunggal terdedah kepada isyarat palsu manakala beberapa penunjuk mengesahkan isyarat dan mengelakkan perdagangan yang buruk.

  2. Merangkumi kedua-dua perdagangan trend dan julat, dapat disesuaikan dengan keadaan pasaran yang berbeza.

  3. Long dan short mengurangkan risiko arah dan mengelakkan pergerakan yang melampau.

  4. Hentikan kerugian dan ambil keuntungan mengunci keuntungan dan hadkan kerugian apabila perdagangan salah.

  5. Pengoptimuman parameter terus meningkatkan strategi dengan menyesuaikan diri dengan pasaran yang berubah.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Lebih banyak penunjuk meningkatkan kerumitan. Tetapan yang tidak betul boleh merosot prestasi. Ujian dan pengoptimuman yang luas diperlukan.

  2. Mengandalkan terlalu banyak kepada teknikal sambil mengabaikan asas boleh menyebabkan isyarat yang tidak tepat. isyarat indikator yang salah harus ditangani dengan berhati-hati.

  3. Pasaran mungkin telah bergerak apabila isyarat muncul, menimbulkan risiko mengejar.

  4. Dagangan dua arah meningkatkan kekerapan, meningkatkan kos dan tekanan.

  5. Terdapat risiko pemasangan lengkung. Kekuatan harus diuji di pelbagai pasaran.

Risiko boleh dikendalikan melalui stop loss yang ketat, ukuran kedudukan yang berhati-hati, leverage yang munasabah dan lain-lain. Secara keseluruhan, strategi ini mempunyai nilai praktikal yang kuat.

Peluang Peningkatan

Beberapa cara untuk mengoptimumkan strategi:

  1. Uji set parameter yang berbeza untuk mencari nilai optimum menggunakan algoritma langkah, rawak atau genetik.

  2. Tambah lebih banyak penunjuk seperti KDJ, Williams untuk membina ensemble penunjuk yang kukuh.

  3. Mengoptimumkan model ukuran kedudukan untuk menguruskan risiko secara dinamik.

  4. Menggabungkan model pembelajaran mesin untuk meramalkan trend dan pergerakan harga.

  5. Ujian merentasi produk, jangka masa dan pasaran yang berbeza untuk meningkatkan kesesuaian.

  6. Memperbetulkan masa masuk dan keluar untuk menangkap trend awal dan keluar sebelum pembalikan.

  7. Gunakan mengambil keuntungan, berhenti untuk mengunci keuntungan dan hadkan kerugian.

  8. Tambah faktor asas dan analisis struktur pasaran untuk menapis isyarat teknikal.

Ringkasan

Strategi ini mengotomatiskan perdagangan dengan menafsirkan pelbagai penunjuk. Ia mendapat manfaat daripada pengesahan silang penunjuk, perdagangan arah dua, hentikan kerugian / ambil keuntungan dll. Overfitting dan isyarat palsu memerlukan berhati-hati. Pengoptimuman dan ujian berterusan dapat mengubahnya menjadi sistem yang kukuh dan praktikal, mewakili masa depan strategi perdagangan kuant.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
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/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)

//RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up1 = ta.change(high)
	down1 = -ta.change(low)
	plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
	minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)




out = ta.sma(close, 14)

sma1=ta.sma(close,55)

ema200=ta.ema(close,200)



longCondition = (out>sma1) and ta.crossover(source1, lower1)

if (longCondition )
    strategy.entry("long", strategy.long)
    
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)

if (shortCondition )
    strategy.entry("short", strategy.short)
    
    
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100

strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))

    
//if strategy.position_avg_price<0
    
    
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)


    
    


Lebih lanjut