Strategi TradingVMA adalah strategi perdagangan kuantitatif berdasarkan garis purata bergerak yang berubah. Ia menggunakan purata bergerak yang berubah untuk menangkap trend pasaran dan menjana isyarat perdagangan dengan sewajarnya.
Inti strategi TradingVMA adalah pengiraan purata bergerak panjang berubah-ubah (Variable Moving Average, VMA). purata bergerak adalah penunjuk teknikal yang diketahui secara meluas yang mengira harga purata dalam tempoh tertentu.
Secara khusus, strategi ini mula-mula mengira satu siri kuantiti perantaraan, seperti Indikator Pergerakan Arah Harga (PDM, MDIM), data diluruskan (PDM, MDM). Data ini akhirnya digunakan untuk mendapatkan kekuatan penunjuk (iS).
Kemudian, strategi TradingVMA secara dinamik menyesuaikan tempoh purata bergerak berdasarkan kekuatan penunjuk. Apabila turun naik pasaran meningkat, tempoh purata bergerak menjadi lebih pendek, dan sebaliknya. Ini membolehkan tindak balas yang lebih cepat terhadap perubahan pasaran.
Akhirnya, strategi ini membandingkan harga semasa dengan VMA untuk menjana isyarat perdagangan.
Strategi TradingVMA mempunyai kelebihan utama berikut:
Tempoh Berubah Menapis Kebisingan Lebih Tetap
Tanggapan yang lebih cepat terhadap perubahan harga meningkatkan daya tanggap
Mengurangkan Frekuensi Dagangan Kurang Overtrading - Berbanding dengan penunjuk tempoh tetap, TradingVMA boleh mengurangkan dagangan yang tidak perlu.
Fleksibiliti Parameter yang boleh disesuaikan - Strategi ini membolehkan pengguna memilih parameter berdasarkan pilihan mereka untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza.
Strategi TradingVMA juga mempunyai risiko utama berikut:
Kekurangan Pembalikan Cepat
Bias Lagging
Isyarat yang salah
Pengoptimuman Parameter yang Sukar
Risiko ini boleh dikawal melalui kaedah seperti stop loss, menyesuaikan kombinasi parameter, dll.
Strategi TradingVMA juga boleh ditingkatkan dalam aspek berikut:
Menggabungkan Indikator Lain
Pengoptimuman Parameter
Peraturan Dagangan yang Sesuai
Sistemisasi
TradingVMA adalah strategi kuantitatif adaptif. Ia menangkap trend pasaran menggunakan penunjuk VMA yang direka khas, dengan kelebihan menjadi responsif dan menapis bunyi bising. Strategi ini boleh dinaik taraf dalam pelbagai cara untuk prestasi yang lebih baik. Tetapi beberapa masalah yang melekat seperti bias kelewatan mungkin berterusan. Secara keseluruhan, TradingVMA adalah strategi trend yang menjanjikan.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 23:59:59 period: 1h 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/ // © laptevmaxim92 //@version=4 strategy("Variable Moving Average Strategy", overlay=true) src=close l =input(5, title="VMA Length") std=input(true, title="Show Trend Direction Colors") utp = input(false, "Use take profit?") pr = input(100, "Take profit pips") usl = input(false, "Use stop loss?") sl = input(100, "Stop loss pips") fromday = input(01, defval=01, minval=01, maxval=31, title="From Day") frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month") fromyear = input(2000, minval=1900, maxval=2100, title="From Year") today = input(31, defval=01, minval=01, maxval=31, title="To Day") tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month") toyear = input(2019, minval=1900, maxval=2100, title="To Year") use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)) k = 1.0/l pdm = 0.0 pdm := max((src - src[1]), 0) mdm = 0.0 mdm := max((src[1] - src), 0) pdmS = 0.0 pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm) mdmS = 0.0 mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm) s = pdmS + mdmS pdi = pdmS/s mdi = mdmS/s pdiS = 0.0 pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi) mdiS = 0.0 mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi) d = abs(pdiS - mdiS) s1 = pdiS + mdiS iS = 0.0 iS := ((1 - k)*nz(iS[1]) + k*d/s1) hhv = highest(iS, l) llv = lowest(iS, l) d1 = hhv - llv vI = (iS - llv)/d1 vma = 0.0 vma := (1 - k*vI)*nz(vma[1]) + k*vI*src vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA") longCondition = vma > vma[1] if (longCondition) strategy.entry("BUY", strategy.long and use_date) shortCondition = vma < vma[1] if (shortCondition) strategy.entry("SELL", strategy.short and use_date) if (utp and not usl) strategy.exit("TP", "BUY", profit = pr) strategy.exit("TP", "SELL", profit = pr) if (usl and not utp) strategy.exit("SL", "BUY", loss = sl) strategy.exit("SL", "SELL", loss = sl) if (usl and utp) strategy.exit("TP/SL", "BUY", loss = sl, profit = pr) strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)