La stratégie TradingVMA est une stratégie de trading quantitative basée sur des lignes moyennes mobiles variables.
Le cœur de la stratégie TradingVMA est le calcul des moyennes mobiles de longueur variable (Variable Moving Average, VMA).
Plus précisément, la stratégie calcule d'abord une série de quantités intermédiaires, telles que l'indicateur de mouvement directionnel des prix (PDM, MDIM), les données lissées (PDM, MDM). Ces données sont finalement utilisées pour obtenir la force de l'indicateur (iS). Cet indicateur reflète l'intensité des fluctuations des prix.
La stratégie TradingVMA ajuste ensuite dynamiquement la période de moyenne mobile en fonction de la force de l'indicateur.
Enfin, la stratégie compare le prix actuel avec le VMA pour générer des signaux de trading.
La stratégie TradingVMA présente les principaux avantages suivants:
Les périodes variables filtrent le bruit plus régulièrement
Une réponse plus rapide aux changements de prix améliore la réactivité
Réduit la fréquence des transactions et réduit les surtrades - Comparé aux indicateurs à période fixe, TradingVMA peut réduire les transactions inutiles.
Flexibilité des paramètres personnalisables - La stratégie permet aux utilisateurs de sélectionner des paramètres en fonction de leurs préférences pour s'adapter à différents environnements de marché.
La stratégie TradingVMA comporte également les risques principaux suivants:
L'absence d'inversions rapides
Bias de retard
Signals erronés
Optimisation des paramètres difficile
Ces risques peuvent être contrôlés par des méthodes telles que les arrêts de pertes, l'ajustement des combinaisons de paramètres, etc.
La stratégie de TradingVMA peut également être améliorée dans les aspects suivants:
Combiner d'autres indicateurs
Optimisation des paramètres
Règles de négociation adaptatives
Systématisation
TradingVMA est une stratégie quantitative adaptative. Elle capture les tendances du marché à l'aide d'un indicateur VMA spécialement conçu, avec l'avantage d'être réactif et de filtrer le bruit. La stratégie peut être améliorée de plusieurs manières pour une meilleure performance.
/*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)