Cette stratégie est conçue sur la base de l'indicateur des soldes de volume pour déterminer le pouvoir d'achat et de vente sur le marché.
L'indicateur des soldes de volume (VB) reflète la force motrice des variations de volume sur les prix.
Calculer le taux de volatilité intraday du prix typique sous forme de dynamique des prix.
Jugez le pouvoir d'achat et de vente à proximité par le produit du volume et de l'élan des prix.
L'indicateur fluctue au-dessus et au-dessous de l'axe zéro.
Cette stratégie construit l'indicateur VB et définit une ligne de signal. Un signal d'achat est généré lorsque l'indicateur VB traverse au-dessus de la ligne de signal. Un signal de vente est généré lorsque l'indicateur VB traverse en dessous de la ligne de signal.
Les principales étapes du code sont les suivantes:
Calculer le taux de volatilité intraday du prix typique sous forme de dynamique des prix.
Définissez le coefficient d'intervalle de coupure pour le momentum.
Calculer le momentum quantifié vcp après la coupure.
La somme de vcp pour obtenir l'indicateur quantifié vfi.
Mettez la longueur de la ligne de signal signalLength et obtenez-le vfima.
Comparez l'indicateur VB vfi avec la ligne de signal vfima pour générer des signaux de trading.
Les avantages de cette stratégie sont les suivants:
Utilisez la relation volume-prix pour juger du pouvoir d'achat et de vente, non affecté par le prix lui-même.
La plage de calcul du moment quantifié peut être contrôlée par des paramètres pour éviter l'impact de fluctuations anormales.
En combinant la comparaison entre l'indicateur VB lui-même et la ligne de signal, on peut fixer un calendrier d'entrée raisonnable.
La méthode de calcul de l'indicateur est simple et claire, facile à utiliser dans le commerce en direct.
Paramètres d'indicateur et de ligne de signal personnalisables pour optimiser les performances de la stratégie.
Cette stratégie comporte également certains risques:
L'indicateur VB est sensible aux fluctuations anormales des prix.
La probabilité de divergence des prix par rapport aux signaux des indicateurs est élevée.
Les paramètres de l'indicateur et des lignes de signal doivent être correctement optimisés pour éviter les faux signaux.
Plus adapté aux produits présentant des caractéristiques évidentes de volume-prix, moins adapté aux produits à faible liquidité.
Faites attention à la divergence de l'indicateur, qui peut indiquer un renversement du marché.
Les risques peuvent être maîtrisés en ajustant la plage de paramètres, en utilisant d'autres filtres, en permettant un arrêt de perte libre approprié, etc.
La stratégie peut être optimisée dans les aspects suivants:
Optimiser les paramètres de calcul pour le moment quantifié afin d'équilibrer sensibilité et stabilité.
Optimiser les paramètres de la ligne de signal pour équilibrer le retard et le bruit.
Ajouter d'autres indicateurs tels que l'analyse des écarts de volume pour vérification.
Ajouter des indicateurs de tendance et de soutien/résistance pour éviter des transactions défavorables.
Définir un stop loss dynamique basé sur la volatilité du marché.
Utilisez l'apprentissage automatique pour trouver la combinaison optimale de paramètres.
Test de retour sur une variété de produits et de délais pour évaluer la robustesse.
Comparer les paramètres de l'indicateur et l'impact sur la courbe des bénéfices pour trouver le meilleur.
Cette stratégie évalue le pouvoir d'achat/vente en fonction de l'indicateur des soldes de volume. Elle présente des avantages tels qu'une conception d'indicateur simple et des paramètres réglables, mais aussi des risques tels que de faux signaux.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("VB Strategy", overlay=true) length = input(130, title="거래량 길이") coef = input(0.2, title="계수") vcoef = input(2.5, title="최대 계수") signalLength=input(5) smoothVFI=input(false, type=bool, title="부드럽게") //볼밴 length2 = input(20, minval=1, title="볼밴 길이") ma(x,y) => smoothVFI ? 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) 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 ) d=vfi-vfima upper = vfima + stdev(vfi, length2) lower = vfima - stdev(vfi, length2) buysignal = cross(vfi, lower) and crossunder(vfi, lower) == 1 ? vfima : na sellsignal = cross(vfi, upper) and crossover(vfi, upper) == 1 ? vfima : na //times = timestamp("GMT+6", 2017, 12, 6, 00, 00) //if (buysignal and times <= time) if (buysignal) if(strategy.position_size < 0) strategy.close("SHORT") if(strategy.position_size > 0) strategy.order("LONG", true, 1, when = (low+high)/2) if(strategy.position_size == 0) strategy.entry("LONG", strategy.long, when = (low+high)/2) //if (sellsignal and times <= time) if (sellsignal) if(strategy.position_size > 0) strategy.close("LONG") if(strategy.position_size < 0) strategy.order("SHORT", false, 1, when = (low+high)/2) if(strategy.position_size == 0) strategy.entry("SHORT", strategy.short, when = (low+high)/2)