Esta estratégia julga a conversão de ciclos de touro e urso calculadora da taxa de mudança da mudança de volume, que pertence às estratégias de divergência volume-preço.
Calcular a taxa de variação da variação de volume (a taxa de variação do indicador de diferença de volume), para obter o resultado do indicador baseado no momento de volume.
Calcule as bandas de Bollinger de n para obter bbr representando o desvio padrão do momento do volume.
Calcule as bandas de Bollinger do preço de fechamento para obter bbr1 representando o desvio padrão do preço.
Calcule a diferença hist entre os dois, que é o desvio-padrão do momento do volume menos o desvio-padrão do preço, como indicador final.
Quando o hist cruza acima de 0, é o sinal de entrada curto, e quando cruza abaixo de 0, é o sinal de entrada longo.
Ao calcular a taxa de mudança da mudança de volume, o efeito principal da mudança de volume no preço é amplificado. Quando o volume reverte enquanto o preço ainda não reverteu, o hist cruzará acima ou abaixo de 0, gerando sinais de negociação. Ele pode prever os pontos de virada das tendências de preços com antecedência.
Esta estratégia é uma estratégia de divergência volume-preço baseada na taxa de variação de volume, que pode refletir previamente os pontos de virada das tendências de preços.
O cálculo da taxa de variação da variação de volume amplifica o efeito principal da variação de volume no preço, resultando em um melhor desempenho comercial.
A combinação de indicadores de impulso de volume com Bandas de Bollinger de preço torna os sinais de negociação mais confiáveis.
Usando suavização exponencial tripla em dados Hist torna os sinais mais precisos e suaves.
A definição de linhas sobrecompradas/supervendidas e ordens de stop loss/take profit longas/cortas ajuda a controlar os riscos de forma eficaz.
Muitos parâmetros personalizáveis, como o comprimento das bandas de Bollinger, o multiplicador de desvio padrão e os fatores de suavização Hist, permitem a otimização da estratégia.
Os dados relativos ao volume podem não reflectir verdadeiramente as trocas de mercado e poderem ser manipulados.
A divergência volume-preço pode não persistir e o preço pode romper sem reverter.
As configurações incorretas dos parâmetros podem causar excesso de negociação ou sinais imprecisos.
Cuidado com sinais falsos de dados anormais de volume.
Os sinais de reversão devem ser evitados quando a tendência for forte.
Os riscos podem ser mitigados através da otimização de parâmetros, adição de outros filtros e definição de stop loss/take profit.
Otimizar os parâmetros das bandas de Bollinger para sinais mais estáveis.
Adicionar filtro de tendência para evitar a negociação contra a tendência.
Incorporar outros indicadores como o MACD para confirmação do sinal.
Utilize a IA para otimizar automaticamente os parâmetros de forma adaptativa.
Adicionar stop loss/take profit dinâmico para otimizar a gestão do risco.
Aplicar aprendizado de máquina para determinar a taxa de sucesso da divergência volume-preço para uma qualidade de sinal mais elevada.
Esta estratégia amplifica o efeito principal da mudança de volume no preço, calculando a taxa de mudança de volume, permitindo a detecção precoce de pontos de virada da tendência. Em comparação com os indicadores de volume único, ela tem maior confiabilidade e precisão. Mas riscos como manipulação de volume e ruptura de divergência devem ser evitados por meio de otimização de parâmetros, filtros de indicadores, etc. No futuro, a IA pode ser alavancada para otimização adaptativa de parâmetros para melhorar ainda mais a estabilidade e lucratividade da estratégia.
/*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)