Strategi Perdagangan Kuantitatif Berdasarkan Beberapa Indikator

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

img

Gambaran umum

Strategi ini menggabungkan beberapa indikator teknis untuk membuat keputusan perdagangan panjang dan pendek.

Logika Strategi

RSI digunakan untuk mengidentifikasi kondisi overbought dan oversold. RSI di atas 70 adalah overbought sementara di bawah 30 adalah oversold. Ketika band sempit dan RSI mendekati batasnya, perdagangan terbalik dipertimbangkan.

Selain itu, ADX digunakan untuk menilai kekuatan tren. ADX tinggi mewakili tren yang kuat, mendukung perdagangan tren. ADX rendah tidak mewakili tren yang jelas, mengingat pembalikan rata-rata. Akhirnya, rata-rata bergerak menentukan arah tren jangka panjang. Uptrend mendukung panjang sementara downtrend mendukung pendek.

Secara khusus, ketika band memeras, RSI mendekati batasnya, dan harga pecah di bawah band bawah, bouncing diharapkan, pergi panjang. Ketika band memeras, RSI mendekati batasnya, dan harga pecah di atas band atas, penurunan diharapkan, pergi pendek. Juga, dengan ADX tinggi, tambahkan panjang dalam tren naik. Dengan ADX rendah, tambahkan pendek dalam tren turun. Menggabungkan indikator meningkatkan ketahanan sistem.

Analisis Keuntungan

Strategi multi-indikator memiliki keuntungan berikut:

  1. Menggabungkan indikator meningkatkan akurasi dan ketahanan. Indikator tunggal rentan terhadap sinyal palsu sementara beberapa indikator memverifikasi sinyal dan menghindari perdagangan yang buruk.

  2. Menganggap perdagangan trend dan range, dapat beradaptasi dengan kondisi pasar yang berbeda.

  3. Long dan short mengurangi risiko arah dan menghindari gerakan ekstrem.

  4. Hentikan kerugian dan ambil keuntungan mengunci keuntungan dan membatasi kerugian ketika perdagangan salah.

  5. Optimasi parameter terus meningkatkan strategi dengan beradaptasi dengan perubahan pasar.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Lebih banyak indikator meningkatkan kompleksitas. Pengaturan yang tidak tepat dapat menurunkan kinerja. pengujian dan optimasi yang ekstensif diperlukan.

  2. Mengandalkan terlalu banyak indikator teknis sementara mengabaikan indikator dasar dapat menyebabkan sinyal yang tidak akurat.

  3. Pasar mungkin sudah bergerak saat sinyal muncul, menimbulkan risiko mengejar.

  4. Perdagangan dua arah meningkatkan frekuensi, meningkatkan biaya dan tekanan.

  5. Ada risiko penyesuaian kurva. Ketahanan harus diuji di berbagai pasar.

Risiko dapat dikelola melalui stop loss yang ketat, ukuran posisi yang bijaksana, leverage yang wajar, dll. Secara keseluruhan, strategi ini memiliki nilai praktis yang kuat.

Peluang Peningkatan

Beberapa cara untuk mengoptimalkan strategi:

  1. Uji set parameter yang berbeda untuk menemukan nilai optimal menggunakan algoritma bertahap, acak atau genetik.

  2. Tambahkan lebih banyak indikator seperti KDJ, Williams untuk membangun ensemble indikator yang kuat.

  3. Mengoptimalkan model ukuran posisi untuk mengelola risiko secara dinamis.

  4. Menggabungkan model pembelajaran mesin untuk memprediksi tren dan pergerakan harga.

  5. Uji di berbagai produk, kerangka waktu dan pasar untuk meningkatkan kemampuan beradaptasi.

  6. Memperbaiki waktu masuk dan keluar untuk menangkap tren lebih awal dan keluar sebelum pembalikan.

  7. Gunakan profit taking, trailing stops untuk mengunci keuntungan dan membatasi kerugian.

  8. Tambahkan faktor fundamental dan analisis struktur pasar untuk menyaring sinyal teknis.

Ringkasan

Strategi ini mengotomatisasi perdagangan dengan menafsirkan beberapa indikator. Ini mendapat manfaat dari validasi silang indikator, perdagangan dua arah, stop loss / take profit dll. Overfitting dan sinyal palsu membutuhkan hati-hati. Optimasi dan pengujian terus-menerus dapat mengubahnya menjadi sistem yang kuat dan praktis, yang mewakili masa depan strategi perdagangan kuantum.


/*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 banyak