Auteur:ChaoZhang est là., Date: 2024-01-25 12:43:43 Je suis désolé
Les étiquettes:

img

Résumé

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

La logique de la stratégie

Les principales composantes de cette stratégie sont les suivantes:

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

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

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

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

Les avantages

  1. L'introduction de l'IFV rend le rapport prix/volume plus raisonnable et évite de suivre aveuglément les prix.

  2. La combinaison de la différence EMA et de la VFI rend la détermination des tendances plus fiable.

  3. La combinaison des bandes de Bollinger et des VFI rend la stratégie plus adaptable aux fluctuations bidirectionnelles du marché.

Les risques

  1. Les indicateurs de prix par volume ne peuvent pas éviter complètement le risque de fausses ruptures.

  2. La différence EMA a un certain retard et ne peut pas réagir en temps opportun aux virages à court terme.

  3. Les paramètres incorrects des bandes de Bollinger peuvent entraîner une survente ou une capture du marché.

Les solutions:

  1. Ajustez les paramètres EMA aux valeurs appropriées.

  2. Testez les effets des paramètres de Bollinger sur la stratégie dans différentes conditions de marché.

Directions d'optimisation

  1. Continuez à optimiser les paramètres VFI pour le rendre plus sensible.

  2. Ajouter le jugement de rupture basé sur les canaux de prix ou l'indicateur Enveloppes.

  3. Testez l'introduction d'un plus grand nombre d'indicateurs de prix par volume tels que OBV, PVT, etc.

  4. Introduire des techniques d'apprentissage automatique et d'IA pour réaliser une optimisation dynamique des paramètres.

Conclusion

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")



Plus de