Strategi Perdagangan Algoritma Berkinerja Tinggi Berdasarkan Model Kuantitatif

Penulis:ChaoZhang, Tanggal: 2023-12-22 13:14:33
Tag:

img

Gambaran umum

Strategi ini adalah strategi perdagangan algoritmik berkinerja tinggi berdasarkan model kuantitatif. Ini menggunakan model Volume Modelius sebagai model dasar dan lebih memperluas dan mengoptimalkannya. Strategi ini dapat menangkap peluang perdagangan kuantitatif di pasar dan mencapai keuntungan yang stabil.

Prinsip Strategi

Inti dari strategi ini adalah model Volume Modelius. Model ini mengidentifikasi peluang perdagangan kuantitatif di pasar dengan mendeteksi perubahan harga dan volume. Secara khusus, strategi ini menggabungkan harga tutup, harga terbuka, harga tertinggi, harga terendah untuk menghitung arah garis K saat ini berdasarkan aturan tertentu. Ketika arah garis K berubah, kualitas peluang perdagangan kuantitatif dinilai berdasarkan volume perdagangan. Selain itu, strategi ini juga menggabungkan indikator SAR dan indikator moving average untuk membantu menentukan waktu masuk dan keluar.

Logika dasar perdagangan adalah untuk pergi panjang ketika indikator menerobos dari negatif ke positif dan pergi pendek ketika indikator menerobos dari positif ke negatif.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa model Volume Modelius dapat secara efektif mengidentifikasi peluang perdagangan kuantitatif. Dibandingkan dengan indikator teknis tradisional, model ini lebih memperhatikan perubahan volume, yang sangat praktis dalam perdagangan kuantitatif frekuensi tinggi saat ini. Selain itu, aturan masuk strategi relatif ketat, yang dapat secara efektif menghindari kehilangan peluang perdagangan kuantitatif sambil mengurangi kemungkinan gangguan sebanyak mungkin.

Analisis Risiko

Risiko utama dari strategi ini adalah bahwa model Volume Modelius sendiri tidak dapat sepenuhnya menghindari kebisingan. Ketika ada fluktuasi pasar yang tidak normal, itu akan menyebabkan sinyal perdagangan yang salah. Selain itu, pengaturan parameter dalam strategi juga akan mempengaruhi hasil akhir.

Untuk mengendalikan risiko, parameter dapat disesuaikan dan dikombinasikan dengan indikator lain untuk penilaian tambahan.

Arahan Optimasi

Masih ada ruang untuk mengoptimalkan strategi ini. Misalnya, algoritma pembelajaran mesin dapat dipertimbangkan untuk mengoptimalkan pengaturan parameter secara dinamis. Atau menggabungkan analisis sentimen dan indikator lain untuk meningkatkan akurasi keputusan. Selain itu, korelasi antara varietas yang berbeda dapat dipelajari untuk membangun model arbitrase multi-varietas.

Ringkasan

Singkatnya, strategi ini memanfaatkan keuntungan dari model kuantitatif Volume Modelius dan merancang seperangkat strategi perdagangan algoritmik dengan kemampuan operasi yang tinggi.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=3
strategy(title="strategy modelius volume model ", shorttitle="mvm",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating=input(defval=true, type=bool, title="Oscillating")
normalize=input(defval=false, type=bool, title="Normalize")
vol = useTrueRange == "Always" or (useTrueRange == "Auto" and na(volume))? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close/methodvalue

currclose = na
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = na
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol/barcount : vol


x=isOscillating and directionIsDown ? -res : res

TP = input(0) * 10
SL = input(0) * 10
TS = input(1) * 10
TO = input(3) * 10
CQ = 100

TPP = (TP > 0) ? TP : na
SLP = (SL > 0) ? SL : na
TSP = (TS > 0) ? TS : na
TOP = (TO > 0) ? TO : na

longCondition = crossover(x,0)
if (longCondition)
    strategy.entry("Long", strategy.long)


shortCondition = crossunder(x,0)
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)
strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)

Lebih banyak