Cette stratégie combine les indicateurs de tendance VFI et les moyennes mobiles avec l'indicateur de renversement Bollinger Bands pour détecter de manière adaptative les tendances et les renversements sur le marché.
Les principales composantes de cette stratégie sont les suivantes:
Indicateur VFI pour déterminer la tendance. Il utilise le taux logarithmique de variation du prix typique et du volume de négociation pour faire correspondre raisonnablement le prix et le volume.
Indicateur de différence EMA pour déterminer la tendance. Il calcule la différence en pourcentage entre l'EMA à 20 jours et l'EMA à 50 jours pour juger de l'orientation de la tendance à moyen et long terme.
Les bandes de Bollinger pour détecter les renversements. La bande du milieu est la SMA de 20 jours, et la largeur des bandes est de 1,5 écart type de la bande du milieu. Les signaux de trading sont générés lorsque le prix dépasse la bande supérieure ou inférieure.
Amplitude de l'IFV pour détecter l'épuisement: lorsque l'IFV approche de sa limite (0, 20), la probabilité d'inversion de tendance est considérée comme plus élevée.
Lorsque le prix dépasse la bande supérieure de Bollinger et que la différence entre VFI et EMA indique une tendance à la hausse, passez long.
L'introduction de l'IFV rend le rapport prix/volume plus raisonnable et évite de suivre aveuglément les prix.
La combinaison de la différence EMA et de la VFI rend la détermination des tendances plus fiable.
La combinaison des bandes de Bollinger et des VFI rend la stratégie plus adaptable aux fluctuations bidirectionnelles du marché.
Les indicateurs de prix par volume ne peuvent pas éviter complètement le risque de fausses ruptures.
La différence EMA a un certain retard et ne peut pas réagir en temps opportun aux virages à court terme.
Les paramètres incorrects des bandes de Bollinger peuvent entraîner une survente ou une capture du marché.
Les solutions:
Ajustez les paramètres EMA aux valeurs appropriées.
Testez les effets des paramètres de Bollinger sur la stratégie dans différentes conditions de marché.
Continuez à optimiser les paramètres VFI pour le rendre plus sensible.
Ajouter le jugement de rupture basé sur les canaux de prix ou l'indicateur Enveloppes.
Testez l'introduction d'un plus grand nombre d'indicateurs de prix par volume tels que OBV, PVT, etc.
Introduire des techniques d'apprentissage automatique et d'IA pour réaliser une optimisation dynamique des paramètres.
Cette stratégie prend en considération de manière exhaustive le suivi des tendances et la détection de l'inversion avec VFI, différence EMA et bandes de Bollinger pour capturer les fluctuations bidirectionnelles du marché.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 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/ // © beststockalert //@version=4 strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true) source = close length = input(130, title="VFI length") coef = input(0.2) vcoef = input(2.5, title="Max. vol. cutoff") signalLength=input(5) // session pre = input( type=input.session, defval="0400-0935") trade_session = input( type=input.session, defval="0945-1700") use_trade_session = true isinsession = use_trade_session ? not na(time('1', trade_session)) : true is_newbar(sess) => t = time("D", sess) not na(t) and (na(t[1]) or t > t[1]) is_session(sess) => not na(time(timeframe.period, sess)) preNew = is_newbar(pre) preSession = is_session(pre) float preLow = na preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1] float preHigh = na preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1] // vfi 9lazybear ma(x,y) => 0 ? sma(x,y) : x typical=hlc3 inter = log( typical ) - log( typical[1] ) vinter = stdev(inter, 30 ) cutoff = coef * vinter * close vave = sma( volume, length )[1] vmax = vave * vcoef vc = iff(volume < vmax, volume, vmax) //min( volume, vmax ) mf = typical - typical[1] vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) ) vfi = ma(sum( vcp , length )/vave, 3) vfima=ema( vfi, signalLength ) //ema diff ema20 = ema(close,20) ema50 = ema(close,50) diff = (ema20-ema50)*100/ema20 ediff = ema(diff,20) // basis = sma(source, 20) dev = 1.5 * stdev(source, 20) upper = basis + dev lower = basis - dev ema9 = ema(source, 9) if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) )) strategy.entry("Long", strategy.long) if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) ) strategy.close("Long")