
La stratégie utilise les indicateurs VWMA pour déterminer la direction de la tendance et utilise les indicateurs ATR pour définir les lignes de stop-loss pour réaliser le suivi de la tendance. La stratégie s’applique à un environnement de marché avec une tendance évidente.
Utilisez l’indicateur VWMA pour déterminer la direction de la tendance. Lorsque le prix est supérieur à la VWMA, déterminez une tendance à la hausse et faites plus; lorsque le prix est inférieur à la VWMA, déterminez une tendance à la baisse et faites moins.
Pour filtrer les fausses ruptures, ajoutez le jugement de l’oscillateur RSI. Un signal de multiplication n’est émis que lorsque le RSI est supérieur à 30.
La longueur de l’ATR est réglée sur la même longueur que celle du VWMA et le multiplicateur est réglé sur 3.5. La ligne de stop est mise à jour en temps réel en fonction du prix.
Le réglage du multiplicateur ATR affecte la contraction de la ligne d’arrêt. Plus le multiplicateur est grand, moins la ligne d’arrêt est mise à jour, et mieux la tendance est suivie.
La taille de la position est calculée en fonction du pourcentage de stop loss et des intérêts du compte dans la stratégie.
Lorsque le prix est inférieur à la ligne de stop-loss, le stop-loss se retire et prend une position plus élevée.
Les indicateurs VWMA permettent de déterminer la direction de la tendance et de saisir les opportunités de tendance.
Le filtre RSI a été ajouté pour filtrer certains faux signaux de rupture.
ATR Stop Lines permettent le suivi de la tendance et évitent le renversement
Le calcul des positions en fonction des pourcentages d’intérêt et de stop-loss du compte est utile pour la maîtrise des risques.
Il existe un risque de perte à un tournant de tendance. Les positions doivent être réduites de manière appropriée pour réduire les pertes individuelles.
Le paramètre ATR est mal réglé, ce qui peut entraîner une ligne d’arrêt trop sensible ou lente. Les paramètres appropriés doivent être testés.
Si la tendance est inversée trop rapidement, la mise à jour de la ligne de stop-loss pourrait ne pas arriver à temps et augmenter les pertes.
Dans les marchés à faible volatilité, il est recommandé de réduire les positions et d’augmenter la fréquence de contraction de la ligne de stop-loss.
Il est possible de tester différentes combinaisons de paramètres VWMA pour choisir le paramètre qui produit le signal le plus optimal.
D’autres paramètres de l’oscillateur RSI peuvent être testés, tels que la ligne d’excédent.
Les paramètres de multiplication de l’ATR peuvent être testés pour trouver le meilleur point de tradeoff entre le retrait et le suivi.
Il peut être combiné avec d’autres indicateurs de filtrage, tels que MACD, KD, etc., pour améliorer la qualité du signal.
La gestion des positions et le pourcentage de stop-loss peuvent être optimisés en fonction des fluctuations du marché.
La stratégie est généralement tendancieuse et convient à la capture de tendances de prix évidentes. La stratégie présente des avantages en termes de jugement de tendance, de filtrage de signal, de suivi des pertes, etc., mais il existe également un risque de renversement de tendance.
/*backtest
start: 2023-10-07 00:00:00
end: 2023-10-13 00:00:00
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/
// © mohanee
//@version=4
//strategy("", overlay=true)
strategy(title="VWMA_withATRstops_strategy V2", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=20, initial_capital=10000, currency=currency.USD) //default_qty_value=10, default_qty_type=strategy.fixed,
float xATRTrailingStop=na
int pos=na
vwmalength = input(33, title="VWMA Length", minval=1, maxval=365)
//vwmalength2 = input(9, title="VWAM Short Term Length", minval=1, maxval=365)
nATRPeriod = input(33, title="ATR length", minval=1, maxval=365)
nATRMultip = input(3.5, title="ATR Multiplier")
rsiofVwmaLength=input(14, title="RSI of VWMA Length")
riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)
vwmaVal=vwma(close, vwmalength)
//vwmaVal2=vwma(close, vwmalength2)
//maVal=sma(close, vwmalength)
plot(vwmaVal, color=color.orange, linewidth=2, title="VWMA")
//plot(vwmaVal2, color=color.blue, title="VWMA Short Term")
//plot(maVal, color=color.blue, title="MA")
//rsi of vwma Longterm
rsiofVwmaVal=rsi(vwmaVal,rsiofVwmaLength)
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop:= iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos:= iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
color1 = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
//plot(xATRTrailingStop, color=color1, title="ATR Trailing Stop")
//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity * riskCapital / 100 ) / (close*stopLoss/100)
//check if cash is sufficient to buy qty1 , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1
//Long Entry
//strategy.entry(id="VWMA LE", long=true, qty=qty1, when= close >vwmaVal and open>vwmaVal and close>open and close > xATRTrailingStop and xATRTrailingStop> vwmaVal)
strategy.entry(id="VWMA LE", long=true, qty=qty1, when= rsiofVwmaVal>=30 and close>open and close>vwmaVal and pos == 1 ) ///pos == 1 means ATRStop line is green
//vwmaVal2>vwmaVal and
plot(strategy.position_size>=1 ? xATRTrailingStop : na, color=color1, style=plot.style_linebr, title="ATR Trailing Stop")
bgcolor(strategy.position_size>=1 ? color.blue : na )
//Exit
strategy.close(id="VWMA LE", when= strategy.position_size>=1 and crossunder(close, xATRTrailingStop) )
//strategy.close(id="VWMA LE", when= strategy.position_size>=1 and close<vwmaVal and open<vwmaVal and close<open )