Strategi Dagangan Algoritma Berprestasi Tinggi Berdasarkan Model Kuantitatif

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

img

Ringkasan

Strategi ini adalah strategi dagangan algoritma berprestasi tinggi berdasarkan model kuantitatif. Ia menggunakan model Volume Modelius sebagai model asas dan memperluaskan dan mengoptimumkannya. Strategi ini dapat menangkap peluang dagangan kuantitatif di pasaran dan mencapai keuntungan yang stabil.

Prinsip Strategi

Inti strategi ini adalah model Volume Modelius. Model ini mengenal pasti peluang perdagangan kuantitatif di pasaran dengan mengesan perubahan harga dan jumlah. Khususnya, strategi menggabungkan harga dekat, harga terbuka, harga tertinggi, harga terendah untuk mengira arah K-line semasa berdasarkan peraturan tertentu. Apabila arah K-line berubah, kualiti peluang perdagangan kuantitatif dinilai berdasarkan jumlah perdagangan. Di samping itu, strategi ini juga menggabungkan indikator SAR dan indikator purata bergerak untuk membantu menentukan masa masuk dan keluar.

Logik dagangan asas adalah untuk pergi panjang apabila penunjuk menembusi dari negatif ke positif dan pergi pendek apabila penunjuk menembusi dari positif ke negatif.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa model Volume Modelius dapat mengenal pasti peluang perdagangan kuantitatif dengan berkesan. Berbanding dengan penunjuk teknikal tradisional, model ini memberi lebih banyak perhatian kepada perubahan jumlah, yang sangat praktikal dalam perdagangan kuantitatif frekuensi tinggi hari ini. Di samping itu, peraturan kemasukan strategi ini agak ketat, yang dapat mengelakkan peluang perdagangan kuantitatif yang hilang sambil mengurangkan kebarangkalian gangguan sebanyak mungkin.

Analisis Risiko

Risiko utama strategi ini adalah bahawa model Volume Modelius sendiri tidak dapat sepenuhnya mengelakkan bunyi bising. Apabila terdapat turun naik pasaran yang tidak normal, ia akan membawa kepada isyarat perdagangan yang salah. Di samping itu, tetapan parameter dalam strategi juga akan mempengaruhi hasil akhir.

Untuk mengawal risiko, parameter boleh diselaraskan dengan sewajarnya dan digabungkan dengan penunjuk lain untuk penilaian tambahan.

Arahan pengoptimuman

Terdapat ruang untuk mengoptimumkan strategi ini. Sebagai contoh, algoritma pembelajaran mesin boleh dipertimbangkan untuk mengoptimumkan tetapan parameter secara dinamik. Atau menggabungkan analisis sentimen dan penunjuk lain untuk meningkatkan ketepatan keputusan. Di samping itu, korelasi antara pelbagai jenis boleh dikaji untuk menubuhkan model arbitrage pelbagai jenis.

Ringkasan

Ringkasnya, strategi ini menggunakan kelebihan model kuantitatif Volume Modelius dan merancang satu set strategi perdagangan algoritma dengan kebolehoperasian yang tinggi. Ia boleh ditingkatkan dan ditingkatkan melalui penyesuaian parameter, pengembangan model, pembelajaran mesin, dll. untuk mendapatkan pulangan yang agak baik dan stabil dalam perdagangan sebenar.


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