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.
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.
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.
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.
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.
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)