Cette stratégie intègre plusieurs indicateurs, y compris le prix moyen pondéré par volume, les bandes de Bollinger et le volume segmenté dans le temps pour identifier le début et la fin des tendances des prix et suivre les tendances.
La stratégie comporte les étapes clés suivantes:
Calculer les lignes de prix moyennes pondérées par volume rapides et lentes.
Prenez la moyenne des lignes VWAP pour tracer les bandes de Bollinger.
Introduire le volume segmenté dans le temps (TSV) pour confirmer l'augmentation du volume des transactions et valider la tendance.
Générer un signal d'achat lorsque le VWAP rapide traverse le VWAP lent, le prix dépasse la bande supérieure de Bollinger et que le TSV est positif.
Utilisez le pullback VWAP et la bande inférieure de Bollinger comme signaux de stop loss.
Plusieurs confirmations filtrent efficacement les fausses ruptures et identifient le début de la tendance
Le calcul du VWAP reflète mieux le prix de négociation réel
L'indicateur de volatilité évalue si une tendance est présente
Le volume des transactions confirme la poursuite de la tendance
Risque raisonnable d'arrêt des pertes et de contrôle des bénéfices
Les paramètres configurables permettent une optimisation flexible
Difficulté à optimiser plusieurs indicateurs
Les délais d'arrêt des pertes de VWAP et des bandes de Bollinger
TSV sensible au réglage des paramètres pour différents marchés
Plus de faux signaux sur les marchés à plage
Ne tient pas compte des coûts de négociation, les bénéfices et pertes réels sont plus faibles que les résultats des tests antérieurs
Appliquer l'apprentissage automatique pour optimiser automatiquement les combinaisons de paramètres
Définir un stop-loss dynamique ou de suivi pour mieux verrouiller les bénéfices
Ajouter des indicateurs de dynamique de volume pour éviter les divergences
Incorporer les ondes d'Elliott pour déterminer les étapes de la tendance, ajuster les paramètres en conséquence
Considérer les coûts de négociation, fixer un objectif de profit minimum pour contrôler l'efficacité des coûts
Cette stratégie fournit une bonne identification des tendances en intégrant plusieurs indicateurs. Elle peut déterminer efficacement le début et la fin des tendances réelles. Des améliorations supplémentaires de la stabilité peuvent être obtenues grâce à l'optimisation des paramètres, l'optimisation des stops de perte et l'optimisation des filtres.
/*backtest start: 2022-09-14 00:00:00 end: 2023-09-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // Credits // "Vwap with period" code which used in this strategy to calculate the leadLine was written by "neolao" active on https://tr.tradingview.com/u/neolao/ // "TSV" code which used in this strategy was written by "liw0" active on https://www.tradingview.com/u/liw0. The code is corrected by "vitelot" December 2018. strategy("HYE Trend Hunter [Strategy]", overlay = true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025, pyramiding = 0) // Strategy inputs slowtenkansenPeriod = input(9, minval=1, title="Slow Tenkan Sen VWAP Line Length", group = "Tenkansen / Kijunsen") slowkijunsenPeriod = input(26, minval=1, title="Slow Kijun Sen VWAP Line Length", group = "Tenkansen / Kijunsen") fasttenkansenPeriod = input(5, minval=1, title="Fast Tenkan Sen VWAP Line Length", group = "Tenkansen / Kijunsen") fastkijunsenPeriod = input(13, minval=1, title="Fast Kijun Sen VWAP Line Length", group = "Tenkansen / Kijunsen") BBlength = input(20, minval=1, title= "Bollinger Band Length", group = "Bollinger Bands") BBmult = input(2.0, minval=0.001, maxval=50, title="Bollinger Band StdDev", group = "Bollinger Bands") tsvlength = input(13, minval=1, title="TSV Length", group = "Tıme Segmented Volume") tsvemaperiod = input(7, minval=1, title="TSV Ema Length", group = "Tıme Segmented Volume") // Make input options that configure backtest date range startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group = "Backtest Range") startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group = "Backtest Range") startYear = input(title="Start Year", type=input.integer, defval=2000, minval=1800, maxval=2100, group = "Backtest Range") endDate = input(title="End Date", type=input.integer, defval=31, minval=1, maxval=31, group = "Backtest Range") endMonth = input(title="End Month", type=input.integer, defval=12, minval=1, maxval=12, group = "Backtest Range") endYear = input(title="End Year", type=input.integer, defval=2021, minval=1800, maxval=2100, group = "Backtest Range") inDateRange = true //Slow Tenkan Sen Calculation typicalPriceTS = (high + low + close) / 3 typicalPriceVolumeTS = typicalPriceTS * volume cumulativeTypicalPriceVolumeTS = sum(typicalPriceVolumeTS, slowtenkansenPeriod) cumulativeVolumeTS = sum(volume, slowtenkansenPeriod) slowtenkansenvwapValue = cumulativeTypicalPriceVolumeTS / cumulativeVolumeTS //Slow Kijun Sen Calculation typicalPriceKS = (high + low + close) / 3 typicalPriceVolumeKS = typicalPriceKS * volume cumulativeTypicalPriceVolumeKS = sum(typicalPriceVolumeKS, slowkijunsenPeriod) cumulativeVolumeKS = sum(volume, slowkijunsenPeriod) slowkijunsenvwapValue = cumulativeTypicalPriceVolumeKS / cumulativeVolumeKS //Fast Tenkan Sen Calculation typicalPriceTF = (high + low + close) / 3 typicalPriceVolumeTF = typicalPriceTF * volume cumulativeTypicalPriceVolumeTF = sum(typicalPriceVolumeTF, fasttenkansenPeriod) cumulativeVolumeTF = sum(volume, fasttenkansenPeriod) fasttenkansenvwapValue = cumulativeTypicalPriceVolumeTF / cumulativeVolumeTF //Fast Kijun Sen Calculation typicalPriceKF = (high + low + close) / 3 typicalPriceVolumeKF = typicalPriceKS * volume cumulativeTypicalPriceVolumeKF = sum(typicalPriceVolumeKF, fastkijunsenPeriod) cumulativeVolumeKF = sum(volume, fastkijunsenPeriod) fastkijunsenvwapValue = cumulativeTypicalPriceVolumeKF / cumulativeVolumeKF //Slow LeadLine Calculation lowesttenkansen_s = lowest(slowtenkansenvwapValue, slowtenkansenPeriod) highesttenkansen_s = highest(slowtenkansenvwapValue, slowtenkansenPeriod) lowestkijunsen_s = lowest(slowkijunsenvwapValue, slowkijunsenPeriod) highestkijunsen_s = highest(slowkijunsenvwapValue, slowkijunsenPeriod) slowtenkansen = avg(lowesttenkansen_s, highesttenkansen_s) slowkijunsen = avg(lowestkijunsen_s, highestkijunsen_s) slowleadLine = avg(slowtenkansen, slowkijunsen) //Fast LeadLine Calculation lowesttenkansen_f = lowest(fasttenkansenvwapValue, fasttenkansenPeriod) highesttenkansen_f = highest(fasttenkansenvwapValue, fasttenkansenPeriod) lowestkijunsen_f = lowest(fastkijunsenvwapValue, fastkijunsenPeriod) highestkijunsen_f = highest(fastkijunsenvwapValue, fastkijunsenPeriod) fasttenkansen = avg(lowesttenkansen_f, highesttenkansen_f) fastkijunsen = avg(lowestkijunsen_f, highestkijunsen_f) fastleadLine = avg(fasttenkansen, fastkijunsen) // BBleadLine Calculation BBleadLine = avg(fastleadLine, slowleadLine) // Bollinger Band Calculation basis = sma(BBleadLine, BBlength) dev = BBmult * stdev(BBleadLine, BBlength) upper = basis + dev lower = basis - dev // TSV Calculation tsv = sum(close>close[1]?volume*(close-close[1]):close<close[1]?volume*(close-close[1]):0,tsvlength) tsvema = ema(tsv, tsvemaperiod) // Rules for Entry & Exit if(fastleadLine > fastleadLine[1] and slowleadLine > slowleadLine[1] and tsv > 0 and tsv > tsvema and close > upper and inDateRange) strategy.entry("BUY", strategy.long) if(fastleadLine < fastleadLine[1] and slowleadLine < slowleadLine[1]) strategy.close("BUY") // Plots colorsettingS = input(title="Solid Color Slow Leadline", defval=false, type=input.bool) plot(slowleadLine, title = "Slow LeadLine", color = colorsettingS ? color.aqua : slowleadLine > slowleadLine[1] ? color.green : color.red, linewidth=3) colorsettingF = input(title="Solid Color Fast Leadline", defval=false, type=input.bool) plot(fastleadLine, title = "Fast LeadLine", color = colorsettingF ? color.orange : fastleadLine > fastleadLine[1] ? color.green : color.red, linewidth=3) p1 = plot(upper, "Upper BB", color=#2962FF) p2 = plot(lower, "Lower BB", color=#2962FF) fill(p1, p2, title = "Background", color=color.blue)