Strategi TradingVMA adalah strategi perdagangan kuantitatif yang didasarkan pada garis rata-rata bergerak variabel.
Inti dari strategi TradingVMA adalah perhitungan rata-rata bergerak panjang variabel (Variable Moving Average, VMA).
Secara khusus, strategi pertama menghitung serangkaian kuantitas perantara, seperti Indikator Gerakan Arah Harga (PDM, MDIM), data halus (PDM, MDM). Data ini akhirnya digunakan untuk mendapatkan kekuatan indikator (iS). Indikator ini mencerminkan intensitas fluktuasi harga.
Kemudian, strategi TradingVMA secara dinamis menyesuaikan periode rata-rata bergerak berdasarkan kekuatan indikator. Ketika volatilitas pasar meningkat, periode rata-rata bergerak menjadi lebih pendek, dan sebaliknya. Ini memungkinkan respons yang lebih cepat terhadap perubahan pasar.
Akhirnya, strategi ini membandingkan harga saat ini dengan VMA untuk menghasilkan sinyal perdagangan.
Strategi TradingVMA memiliki keuntungan utama berikut:
Periode Variabel Filter Noise More Steady
Tanggapan yang lebih cepat terhadap perubahan harga Meningkatkan responsif
Mengurangi Frekuensi Perdagangan Mengurangi Overtrading - Dibandingkan dengan indikator periode tetap, TradingVMA dapat mengurangi perdagangan yang tidak perlu.
Fleksibilitas parameter yang dapat disesuaikan - Strategi memungkinkan pengguna untuk memilih parameter berdasarkan preferensi mereka agar sesuai dengan lingkungan pasar yang berbeda.
Strategi TradingVMA juga memiliki risiko utama berikut:
Kurangnya Pembalikan Cepat
Bias Lagging
Sinyal yang Salah
Optimasi Parameter yang Sulit
Risiko ini dapat dikendalikan melalui metode seperti stop loss, penyesuaian kombinasi parameter, dll.
Strategi TradingVMA juga dapat ditingkatkan dalam aspek berikut:
Menggabungkan Indikator Lainnya
Optimasi Parameter
Adaptive Trading Rules
Sistemisasi
TradingVMA adalah strategi kuantitatif adaptif. Ini menangkap tren pasar menggunakan indikator VMA yang dirancang khusus, dengan keunggulan menjadi responsif dan menyaring kebisingan. Strategi dapat ditingkatkan dengan berbagai cara untuk kinerja yang lebih baik.
/*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)