Die TradingVMA-Strategie ist eine quantitative Handelsstrategie, die auf variablen gleitenden Durchschnittslinien basiert.
Der Kern der TradingVMA-Strategie ist die Berechnung von gleitenden Durchschnitten mit variabler Länge (Variable Moving Average, VMA). Der gleitende Durchschnitt ist ein weithin bekannter technischer Indikator, der den durchschnittlichen Preis über einen bestimmten Zeitraum berechnet.
Insbesondere berechnet die Strategie zunächst eine Reihe von Zwischengrößen, wie z. B. Preisrichtungsbewegungsindicator (PDM, MDIM), glättete Daten (PDMs, MDMs). Diese Daten werden schließlich verwendet, um die Indikatorstärke (iS) zu erhalten. Dieser Indikator spiegelt die Intensität der Preisschwankungen wider.
Wenn die Marktvolatilität steigt, wird die gleitende Durchschnittsperiode kürzer und umgekehrt. Dies ermöglicht eine schnellere Reaktion auf Marktveränderungen.
Schließlich vergleicht die Strategie den aktuellen Preis mit dem VMA, um Handelssignale zu generieren.
Die Strategie der TradingVMA hat folgende Hauptvorteile:
Variable Period Filters Noise More Steady
Verringert die Handelsfrequenz Weniger Überhandelungen - Im Vergleich zu Festzeitrahmenindikatoren kann TradingVMA unnötige Trades reduzieren.
Anpassbare Parameter Flexibilität - Die Strategie ermöglicht es den Nutzern, Parameter auf der Grundlage ihrer Vorlieben zu wählen, die verschiedenen Marktumgebungen entsprechen.
Die TradingVMA-Strategie beinhaltet außerdem folgende primäre Risiken:
Fehlende schnelle Umkehrungen
Verzögerungsbeeinflussung
Falsche Signale
Schwierige Parameteroptimierung
Diese Risiken können durch Methoden wie Stop-Losses, Anpassung von Parameterkombinationen usw. kontrolliert werden.
Die Strategie der TradingVMA kann auch in folgenden Aspekten verbessert werden:
Kombination mit anderen Indikatoren
Parameteroptimierung
Adaptive Handelsregeln
Systemisierung
TradingVMA ist eine anpassungsfähige quantitative Strategie. Sie erfasst Markttrends mit einem speziell entwickelten VMA-Indikator, mit dem Vorteil, reaktionsschnell zu sein und Lärm auszufiltern. Die Strategie kann auf mehrere Arten verbessert werden, um eine bessere Leistung zu erzielen.
/*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)