Stratégie de suivi de tendance basée sur des indicateurs de volume


Date de création: 2023-10-10 14:51:13 Dernière modification: 2023-10-10 14:51:13
Copier: 0 Nombre de clics: 1032
1
Suivre
1617
Abonnés

Aperçu

La stratégie est basée sur l’indicateur de volume de transactions (VFI) pour réaliser des transactions de suivi de tendance. La stratégie permet de déterminer la direction de la tendance du marché en calculant les fluctuations des cours des actions et les variations du volume de transactions, pour réaliser des transactions de bas prix et de haut prix.

Principe de stratégie

  1. Calculer l’indicateur VFI: calculer la valeur VFI en fonction de la variation logarithmique du cours de l’action et du volume des transactions, en éliminant les secousses par un traitement en douceur.

  2. Déterminer la direction de la tendance: l’indicateur VFI sur l’axe 0 est un signal positif, l’axe 0 est un signal négatif.

  3. Signaux de négociation: EMA rapide sur une EMA lente, et VFI sur une ligne d’achat plus; VFI sur une ligne de vente plus.

  4. Mode d’arrêt: définir un taux d’arrêt fixe.

La stratégie repose principalement sur l’indicateur VFI pour déterminer la direction de la tendance et émettre des signaux de négociation avec le système de courbe. L’indicateur VFI reflète l’humeur du marché à travers les fluctuations des cours des actions et les variations du volume des transactions.

Avantages stratégiques

  1. L’indicateur VFI détermine les tendances mieux que l’indicateur de prix unique, ce qui permet de filtrer efficacement les chocs et les fausses ruptures.

  2. Le système de ligne uniforme aide à juger, évitant que l’indicateur VFI émette un faux signal dans une ville en tremblement.

  3. La définition d’un point d’arrêt fixe permet de contrôler le risque et de le gérer.

  4. Le modèle de suivi des tendances permet d’obtenir des gains supplémentaires en suivant les tendances sans avoir à deviner les points de basculement du marché.

  5. Les paramètres sont flexibles et peuvent être ajustés en fonction du marché pour s’adapter à différents cycles et variétés.

Risque stratégique

  1. L’indicateur VFI peut envoyer des signaux erronés dans un marché en forte volatilité.

  2. Les points d’arrêt fixes peuvent être trop grands ou trop petits, entraînant un arrêt prématuré ou tardif.

  3. Si les paramètres d’achat et de vente ne sont pas correctement définis, cela peut entraîner des transactions fréquentes ou des défaillances.

  4. Les stratégies de suivi des tendances ne peuvent pas capturer le renversement et doivent être stoppées à temps.

  5. Les paramètres incorrects peuvent entraîner une entrée trop tôt ou trop tard.

Optimisation de la stratégie

  1. Modifier les paramètres VFI pour optimiser le calcul des indicateurs.

  2. Ajustez la moyenne des cycles pour optimiser le temps de transmission.

  3. Modifier dynamiquement les points de rupture, optimiser la rupture.

  4. La qualité du signal est améliorée par le filtrage combiné d’autres indicateurs.

  5. Optimisation des combinaisons de paramètres pour les cycles majeurs et mineurs.

  6. Test de la robustesse des paramètres de différentes variétés et amélioration de l’adaptabilité des paramètres.

Résumer

La stratégie est basée sur l’indicateur VFI pour déterminer la direction de la tendance, avec un système de parité. Le suivi de la tendance permet d’obtenir des transactions à bas prix et à haut prix sans avoir besoin de prévoir un revirement spécifique. L’avantage de la stratégie est de juger que la tendance est supérieure à un seul indicateur de prix, ce qui permet de filtrer efficacement les chocs. Le principal risque réside dans le fait que des signaux erronés peuvent être émis dans les marchés en choc.

Code source de la stratégie
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-06 21:00:00
period: 3m
basePeriod: 1m
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/
// © mohanee
//This strategy is based on VFI indicator published by  UTS.  
//more details of VFI indicator can be found at  [url=http://mkatsanos.com/VFI.html]http://mkatsanos.com/VFI.html[/url] 
// I have added buy line and sell line to the indicator  and tested  SPY stock/index on one hour chart

//@version=4
strategy(title="VFI  strategy [based on VFI indicator published by  UTS]", overlay=false,pyramiding=2, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)


// Const
kMaColor = color.aqua
kNeutralColor = color.gray
kBearColor = color.red
kBullColor = color.green

kAlma = "ALMA"
kEma = "EMA"
kSma = "SMA"
kWma = "WMA"


// Input

vfi_length = input(8, title="Length", minval=1)  //default 130
vfi_coef = input(0.2, title="Coef", minval=0.1)
vfi_volCutoff = input(2.5, title="Volume Cutoff", minval=0.1)
vfi_smoothLen = input(3, title="Smoothing Period", minval=1)
vfi_smoothType = input(kEma, title="Smoothing Type", options=[kAlma, kEma, kSma, kWma])

//These are adde by me for the strategy purpose  BEGIN
vfi_buyLine = input(-4, title="Buy Line", minval=-10)
vfi_sellLine = input(5, title="Sell Line", minval=-10)
stopLoss = input(title="Stop Loss%", defval=5, minval=1)
//These are adde by me for the strategy purpose  END

vfi_longEMA = input(200, title="Long EMA", minval=1)
vfi_shortEMA1 = input(50, title="short EMA1", minval=1)
vfi_shortEMA2 = input(9, title="short EM2A", minval=1)

vfi_showTrend = input(false, title="Visualize Trend")
vfi_showFill = input(true, title="Apply Filling")
vfi_showMa = input(true, title="Show Moving Average")
vfi_maType = input(kSma, title="Moving Average Type", options=[kAlma, kEma, kSma, kWma])
vfi_maLength = input(30, title="Moving Average Length", minval=1)
vfi_almaOffset = input(0.85, title="• ALMA - Offset (global setting)", minval=0.0, maxval=1.0, step=0.05) // more smoothness (closer to 1) vs. more responsiveness (closer to 0)
vfi_almaSigma = input(6.0, title="• ALMA - Sigma (global setting)", minval=0.0, step=0.05) // the larger sigma the smoother ALMA


// Functionality

isRising(sig) =>
    sig > sig[1]
    
isFlat(sig) =>
    sig == sig[1]

vfi_trendColor(sig) =>
    isFlat(sig) ? kNeutralColor : isRising(sig) ? kBullColor : kBearColor
    
vfi_color(sig) =>
    isFlat(sig) ? kNeutralColor : sig > 0 ? kBullColor : kBearColor
    
osc_color(sig) =>
    sig == 0 ? kNeutralColor : sig > 0 ? kBullColor : kBearColor

smooth(t, sig, len) =>
    ma = float(sig)         // None
    if t == kSma            // Simple
        ma := sma(sig, len)
    if t == kEma            // Exponential
        ma := ema(sig, len)
    if t == kWma            // Weighted
        ma := wma(sig, len)
    if t == kAlma           // Arnaud Legoux
        ma := alma(sig, len, vfi_almaOffset, vfi_almaSigma)
    ma

calc_vfi(fviPeriod, smoothType, smoothLen, coef, vCoef) =>
    avg = nz(hlc3)
    inter = log(avg) - log(avg[1])
    vInter = stdev(inter, 30)
    cutOff = coef * vInter * close
    vAve = smooth(kSma, volume[1], fviPeriod)
    vMax = vAve * vCoef
    vC = min(volume, vMax)
    mf = avg - avg[1]
    vCp = iff(mf > cutOff, vC, iff(mf < -cutOff, -vC, 0))
    sVfi = sum(vCp, fviPeriod) / vAve
    vfi = smooth(smoothType, sVfi, smoothLen)
    
value_vfi = calc_vfi(vfi_length, vfi_smoothType, vfi_smoothLen, vfi_coef, vfi_volCutoff)
value_ma = smooth(vfi_maType, value_vfi, vfi_maLength)

longEMAval= ema(close, vfi_longEMA)
shortEMAval1= ema(close, vfi_shortEMA1)
shortEMAval2= ema(close, vfi_shortEMA2)

color_vfi = vfi_showTrend ? vfi_trendColor(value_vfi) : vfi_color(value_vfi)
color_osc = vfi_showFill ? osc_color(value_vfi) : na
color_ma = vfi_showMa ? kMaColor : na


// Drawings

plot_vfi = plot(value_vfi, title="VFI", color=color_vfi, linewidth=1)
plot_fill = plot(0, color=color_vfi, editable=false)
fill(plot_vfi, plot_fill, title="Oscillator Fill", color=color_osc, transp=75) 
hline(vfi_buyLine, color=color.green, title="Buy Line", linewidth=2, linestyle=hline.style_dashed)
hline(vfi_sellLine, color=color.purple, title="Sell Line", linewidth=2, linestyle=hline.style_dashed)
plot(value_ma, title="MA", color=color_ma, linewidth=2)

strategy.entry(id="VFI LE", long=true,  when=crossover(value_vfi,vfi_buyLine)  and ( shortEMAval1 >= longEMAval  ))

//strategy.close(id="VFI LE", comment="Exit",   when=crossunder(value_vfi,vfi_sellLine))
strategy.close(id="VFI LE", comment="TP Exit",   when=crossunder(value_vfi,vfi_sellLine) and close>strategy.position_avg_price)
//strategy.close(id="VFI LE", comment="Exit",   when=  (shortEMAval1 > shortEMAval2 )  and crossunder(close, shortEMAval2))

//stoploss
stopLossVal =   strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01) 
strategy.close(id="VFI LE", comment="SL Exit",   when=crossunder(value_vfi,vfi_sellLine) and close < stopLossVal)