
Cette stratégie consiste à calculer le taux de variation du taux de change du volume d’affaires pour juger de la conversion des cycles pluriels et appartient à la catégorie des stratégies de déviation des prix. Elle combine un indicateur de la dynamique du volume d’affaires et une bande de Brent des prix pour juger de l’effet de la variation du volume d’affaires sur les prix pour capturer les points de basculement de la tendance.
Calculer la variation du taux de variation de la quantité d’échange (la variation de l’indicateur de la différence de la quantité d’échange), obtenu sur la base de l’indicateur de la dynamique de la quantité d’échange nresult ≠
Pour nresult, on calcule la bande de Bryn et on obtient bbr qui représente le décalage de la dynamique de la quantité de transaction.
La courbe de Brin est calculée pour le prix de clôture et donne bbr1 qui représente la différence entre les prix standards.
La différence hist entre les deux, soit la différence entre le standard de la quantité de transaction et le standard de prix, est calculée en tant qu’indicateur final.
L’hist est un point d’entrée à tête nue avec 0 en haut et un point d’entrée à tête multiple avec 0 en bas.
Cette stratégie augmente le taux de variation du taux de variation du volume de transactions en calculant l’effet de la variation du volume de transactions sur le prix. Lorsque le volume de transactions est inversé et que le prix n’a pas encore été inversé, l’hist peut être sur ou en dessous de 0, générant un signal de transaction. Il peut déterminer à l’avance le point de basculement de la tendance des prix.
Cette stratégie est basée sur la variation du taux de transaction par rapport à la stratégie de déviation de la quantité de prix, permettant de refléter à l’avance la tendance des prix.
Le taux de variation du taux de variation de la transaction est calculé, ce qui amplifie l’effet de la variation de la transaction sur les prix, ce qui améliore l’efficacité des transactions.
La bande de Brin, qui combine l’indicateur de la dynamique de la circulation et l’indicateur des prix, rend les signaux de négociation plus fiables.
Le traitement des données hist est effectué à l’aide d’un triplé de l’indice pour rendre le signal plus précis et plus fluide.
La mise en place d’une ligne de surachat et de survente, associée à une liste de stop-loss à long terme, permet de contrôler efficacement le risque.
Il existe de nombreux paramètres personnalisables, tels que la longueur de la bande de Bryn, le multiple de l’écart standard, les paramètres de lissage des données Hist, etc., qui peuvent être optimisés stratégiquement.
Les chiffres des transactions ne reflètent pas nécessairement la réalité des transactions sur le marché et peuvent être manipulés.
L’écart de prix n’est pas forcément durable, il peut y avoir une rupture de prix qui ne sera pas inversée.
Une mauvaise configuration des paramètres peut entraîner des transactions fréquentes ou des signaux incorrects.
Attention aux faux signaux de circulation
Les signaux de retournement génèrent des transactions erronées lorsque la tendance est forte.
Les paramètres d’optimisation peuvent être filtrés en combinaison avec d’autres indicateurs, et le stop loss peut être défini pour assurer la maîtrise du risque.
Optimisation des paramètres de la bande de Bryn pour une plus grande stabilité du signal.
Les signaux de filtrage des indicateurs de tendance sont combinés afin d’éviter le trading à contre-courant.
Ajout d’autres indicateurs de confirmation, tels que MACD, pour éviter les faux signaux.
L’IA est utilisée pour optimiser les paramètres de manière adaptative.
Ajout d’un module d’ajustement dynamique du stop-loss et de l’arrêt-stop, optimisation de la gestion des fonds.
La combinaison de l’apprentissage automatique et de l’analyse de la différence entre le prix et le taux de réussite a permis d’améliorer la qualité du signal.
Cette stratégie permet de déterminer à l’avance le tournant de la tendance des prix en calculant le taux de variation du volume d’échange et en amplifiant l’effet de la variation du volume d’échange sur le prix. Elle présente une plus grande fiabilité et une plus grande précision que les indicateurs de volume d’échange uniques.
/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 00:00:00
period: 1d
basePeriod: 1h
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/
// © tathal and special thanks to oakwhiz for his porting of my custom volume indicator
//@version=5
strategy('Volume Difference Delta Cycle Oscillator', 'VDDC Osc', default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=5000)
startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31)
startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12)
startYear = input.int(title='Start Year', defval=2010, minval=1800, maxval=2100)
endDate = input.int(title='End Date', defval=31, minval=1, maxval=31)
endMonth = input.int(title='End Month', defval=12, minval=1, maxval=12)
endYear = input.int(title='End Year', defval=2021, minval=1800, maxval=2100)
// Normalize Function
normalize(_src, _min, _max) =>
// Normalizes series with unknown min/max using historical min/max.
// _src : series to rescale.
// _min, _min: min/max values of rescaled series.
var _historicMin = 10e10
var _historicMax = -10e10
_historicMin := math.min(nz(_src, _historicMin), _historicMin)
_historicMax := math.max(nz(_src, _historicMax), _historicMax)
_min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax - _historicMin, 10e-10)
// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange = true
// Stop loss & Take Profit Section
l_sl_inp = input(2.0, title='Long Stop Loss %') / 100
l_tp_inp = input(4.0, title='Long Take Profit %') / 100
l_stop_level = strategy.position_avg_price * (1 - l_sl_inp)
l_take_level = strategy.position_avg_price * (1 + l_tp_inp)
s_sl_inp = input(2.0, title='Short Stop Loss %') / 100
s_tp_inp = input(4.0, title='Short Take Profit %') / 100
s_stop_level = strategy.position_avg_price * (1 + s_sl_inp)
s_take_level = strategy.position_avg_price * (1 - s_tp_inp)
src = close
// Volume Differnce Indicator Delta
float change_src = ta.change(src)
float i_obv = ta.cum(change_src > 0 ? volume : change_src < 0 ? -volume : 0 * volume)
float i_pvt = ta.pvt
float result = ta.change(i_obv - i_pvt)
float nresult = ta.ema(normalize(result, -1, 1), 20)
// Volume Differnce Indicator Delta %B
length = input.int(20, minval=1, title='Volume Bands Length')
mult = input.float(2.0, minval=0.001, maxval=50, title='Volume Bands StdDev')
basis = ta.ema(nresult, length)
dev = mult * ta.stdev(nresult, length)
upper = basis + dev
lower = basis - dev
bbr = (nresult - lower) / (upper - lower)
// Normal %B, Based on close
l1 = input.int(20, minval=1, title='Bollinger Bands Length')
src2 = close
mult1 = input.float(2.0, minval=0.001, maxval=50, title='Bollinger Bands StdDev')
basis1 = ta.sma(src2, l1)
dev1 = mult1 * ta.stdev(src2, l1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
bbr1 = (src - lower1) / (upper1 - lower1)
/// Final Output Line
hist = ta.ema(ta.ema(ta.ema(bbr1 - bbr, input(2, title='Hist Smoothing Factor #1')), input(2, title='Hist Smoothing Factor #2')), input(2, title='Hist Smoothing Factor #3'))
/// Overbought / Oversold Line Creation
oversold = input(-.1)
overbought = input(.4)
hline(oversold, linewidth=2, color=color.new(#81c784, 62))
hline(overbought, linewidth=2, color=color.new(#c2185b, 38))
/// Long & Short Conditions
short = hist > overbought
long = hist < oversold
/// Colors & Plotting
histColor = hist >= 0 ? hist[1] < hist ? #26A69A : #B2DFDB : hist[1] < hist ? #FFCDD2 : #EF5350
plot(hist, title='Histogram', style=plot.style_columns, color=color.new(histColor, 0))
CrossBgColor = long ? color.new(#81c784, 62) : short ? color.new(#c2185b, 38) : na
bgcolor(color.new(CrossBgColor, 90))
/// Strategy Methodology
if inDateRange
strategy.entry('long', strategy.long, when=long, stop=l_stop_level, limit=l_take_level)
if inDateRange and strategy.position_size > 0
strategy.close_all(when=short)
if inDateRange
strategy.entry('short', strategy.short, when=short, stop=s_stop_level, limit=s_take_level)
if inDateRange and strategy.position_size < 0
strategy.close_all(when=long)