TradingVMA Stratégie de négociation des moyennes mobiles variables

Auteur:ChaoZhang est là., Date: le 21 février 2024 à 11 h 47 min 43 s
Les étiquettes:

img

Résumé

La stratégie TradingVMA est une stratégie de trading quantitative basée sur des lignes moyennes mobiles variables.

La logique de la stratégie

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.

Analyse des avantages

La stratégie TradingVMA présente les principaux avantages suivants:

  1. Les périodes variables filtrent le bruit plus régulièrement La période moyenne mobile variable s'adapte aux changements du marché pour filtrer le bruit et des signaux de tendance plus stables.

  2. Une réponse plus rapide aux changements de prix améliore la réactivité La moyenne mobile variable peut réagir rapidement aux changements de prix et capturer les points d'inversion de tendance.

  3. 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.

  4. 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é.

Analyse des risques

La stratégie TradingVMA comporte également les risques principaux suivants:

  1. L'absence d'inversions rapides Lorsque les tendances s'inversent rapidement, la moyenne mobile en constante évolution peut retarder sa réponse.

  2. Bias de retard Toutes les stratégies de moyennes mobiles ont un certain degré de biais de retard, soit long ou court.

  3. Signals erronés TradingVMA peut générer des signaux longs/courts incorrects sur les marchés latéraux à plage.

  4. Optimisation des paramètres difficile Trouver la combinaison optimale de paramètres peut être 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.

Directions d'optimisation

La stratégie de TradingVMA peut également être améliorée dans les aspects suivants:

  1. Combiner d'autres indicateurs Utiliser avec d'autres indicateurs de tendance, des indicateurs de contre-tendance peuvent améliorer la qualité du signal.

  2. Optimisation des paramètres Découvrez les paramètres optimaux via le backtesting et l'optimisation.

  3. Règles de négociation adaptatives Utiliser des règles d'entrée différentes, arrêter les pertes par régime de marché.

  4. Systématisation Algorithmiser et systématiser la stratégie pour une optimisation plus facile.

Conclusion

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)

Plus de