TradingVMA Handelsstrategie mit variablem gleitendem Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2024-02-21 11:47:43
Tags:

img

Übersicht

Die TradingVMA-Strategie ist eine quantitative Handelsstrategie, die auf variablen gleitenden Durchschnittslinien basiert.

Strategie Logik

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.

Analyse der Vorteile

Die Strategie der TradingVMA hat folgende Hauptvorteile:

  1. Variable Period Filters Noise More Steady Die variable gleitende Durchschnittsperiode passt sich den Marktveränderungen an, um Lärm und stabilere Trendsignale auszufiltern.

  2. Der variable gleitende Durchschnitt kann schnell auf Preisänderungen reagieren und Trendumkehrpunkte erfassen.

  3. Verringert die Handelsfrequenz Weniger Überhandelungen - Im Vergleich zu Festzeitrahmenindikatoren kann TradingVMA unnötige Trades reduzieren.

  4. Anpassbare Parameter Flexibilität - Die Strategie ermöglicht es den Nutzern, Parameter auf der Grundlage ihrer Vorlieben zu wählen, die verschiedenen Marktumgebungen entsprechen.

Risikoanalyse

Die TradingVMA-Strategie beinhaltet außerdem folgende primäre Risiken:

  1. Fehlende schnelle Umkehrungen Wenn sich Trends rasch umkehren, kann der sich ständig anpassende gleitende Durchschnitt in der Reaktion verzögern.

  2. Verzögerungsbeeinflussung Alle gleitenden Durchschnittsstrategien haben ein gewisses Maß an Verzögerungsbeeinflussung, entweder lang oder kurz.

  3. Falsche Signale TradingVMA kann in Bereichsgrenzungsmärkten falsche Long/Short-Signale erzeugen.

  4. Schwierige Parameteroptimierung Die optimale Parameterkombination zu finden, kann eine Herausforderung sein.

Diese Risiken können durch Methoden wie Stop-Losses, Anpassung von Parameterkombinationen usw. kontrolliert werden.

Optimierungsrichtlinien

Die Strategie der TradingVMA kann auch in folgenden Aspekten verbessert werden:

  1. Kombination mit anderen Indikatoren Mit anderen Trendindikatoren können Gegentrendindikatoren die Signalqualität verbessern.

  2. Parameteroptimierung Entdecken Sie optimale Parameter durch Backtesting und Optimierung.

  3. Adaptive Handelsregeln Verwenden Sie unterschiedliche Einstiegsregeln, Stoppverluste pro Marktregime.

  4. Systemisierung Algorithmieren und systematisieren Sie die Strategie für eine einfachere Optimierung.

Schlussfolgerung

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)

Mehr