
La estrategia de impulso de la capacidad de la cantidad analiza los cambios en el volumen de transacciones para determinar los cambios en el estado de ánimo de los participantes en el mercado. Divide el volumen de transacciones en volúmenes de transacciones múltiples y volúmenes de transacciones sin cabeza, calcula sus medias móviles ponderadas, genera señales de múltiples cabezas cuando el volumen de transacciones múltiples es favorable y genera señales de cabezas sin cabeza cuando el volumen de transacciones sin cabeza es favorable.
La estrategia primero divide el volumen de cada línea K en volumen de transacciones múltiples y volumen de transacciones en blanco según la relación entre el precio de cierre y el precio de apertura. Si el precio de cierre es mayor que el precio de apertura, el volumen de transacciones de toda la línea K es volumen de transacciones en blanco; si el precio de cierre es menor que el precio de apertura, el volumen de transacciones de la línea K se calcula en función de la proporción de ((precio máximo-precio de apertura) / ((precio máximo-precio mínimo), el resto es volumen de transacciones en blanco).
Luego se calcula el promedio móvil ponderado del volumen de transacciones de múltiples cabezas y el volumen de transacciones de cabezas vacías de la última n raíz K, respectivamente. Si el promedio móvil del volumen de transacciones de múltiples cabezas es mayor que el promedio móvil del volumen de transacciones de cabezas vacías, y la diferencia entre ambos representa una proporción mayor del volumen de transacciones de múltiples cabezas que el umbral predeterminado, se genera una señal de múltiples cabezas. Las reglas de generación de la señal de cabezas vacías son similares.
También se ha establecido un promedio de volumen de transacciones para identificar las zonas de recolección. Si el volumen de transacciones en blanco no tiene una diferencia obvia, se indicará que se encuentra actualmente en estado de recolección.
Se puede reducir el riesgo mediante la optimización de los parámetros y la combinación de otros indicadores.
Las estrategias impulsadas por la energía cuantitativa pueden usarse por separado o en combinación con otras estrategias mediante la determinación inteligente de la distribución multiespacial de la cantidad de transacciones, la determinación automática de la emoción del mercado y los cambios de tendencia. La optimización de parámetros y la combinación de indicadores pueden mejorar aún más la estabilidad y la rentabilidad de las estrategias.
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © Shuttle_Club
//@version=5
strategy('Volume fight strategy', default_qty_type=strategy.cash, default_qty_value=10000, currency='USD', commission_value=0.04, calc_on_order_fills=false, calc_on_every_tick=false, initial_capital=10000)
direction = input.string('ANY', 'Direction', options=['LONG', 'SHORT', 'ANY'], tooltip='Select the direction of trade.\n\nВыберите направление торговли.')
ma = input.int(11, 'Search_range', minval=1, tooltip='The range of estimation of the predominance of bullish or bearish volume (quantity bars). The smaller the TF, the higher the range value should be used to filter out false signals.\n\nДиапазон оценки преобладания бычьего или медвежьего объема (количество баров). Чем меньше ТФ, тем выше следует использовать значение диапазона, чтобы отфильтровать ложные сигналы.')
delta = input.float(15, 'Smoothing_for_flat,%', step=0.5, minval=0, tooltip='Smoothing to reduce false signals and highlight the flat zone. If you set the percentage to zero, the flat zones will not be highlighted, but there will be much more false signals, since the indicator becomes very sensitive when the smoothing percentage decreases.\n\nСглаживание для уменьшения ложных сигналов и выделения зоны флета. Если выставить процент равным нулю, то зоны флета выделяться не будут, но будет гораздо больше ложных сигналов, так как индикатор становится очень чувствительным при снижении процента сглаживания')
bgshow = input.bool(true, 'Show background zones', tooltip='Show the color background of the current trading zone.\n\nПоказывать цветовой фон текущей торговой зоны.')
all_signal_show = input.bool(false, 'Show each setup in zone', tooltip='Show every signals into trading zone.\n\nПоказывать каждый сигнал внутри торговой зоны.')
///// CALCULATION
bull_vol = open < close ? volume : volume * (high - open) / (high - low) //determine the share of bullish volume
bear_vol = open > close ? volume : volume * (open - low) / (high - low) //determine the share of bearish volume
avg_bull_vol = ta.vwma(bull_vol, ma) //determine vwma
avg_bear_vol = ta.vwma(bear_vol, ma)
diff_vol = ta.sma(avg_bull_vol / volume - 1 - (avg_bear_vol / volume - 1), ma) //normalize and smooth the values
vol_flat = math.abs(avg_bull_vol + avg_bear_vol) / 2 //determine average value for calculation flat-filter
///// SIGNALS
up = int(na), up := nz(up[1])
dn = int(na), dn := nz(dn[1])
bull = avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 //determine up zones
bear = avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 //determine dn zones
if bull
up += 1, dn := 0
dn
if bear
dn += 1, up := 0
up
if not bull and not bear and all_signal_show
up := 0, dn := 0
dn
///// PLOTTING
plotshape(bull and up == 1, 'UP', location=location.bottom, style=shape.triangleup, color=color.new(color.green, 0), size=size.tiny)
plotshape(bear and dn == 1, 'DN', location=location.top, style=shape.triangledown, color=color.new(color.red, 0), size=size.tiny)
bgcolor(title='Trading zones', color=bgshow and avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 85) : bgshow and avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 85) : na)
plot(diff_vol, 'Volume difference', style=plot.style_area, color=avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 0) : avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 0) : color.new(color.gray, 50))
strategy.close('Short', comment='close', when=bull and up == 1)
strategy.close('Long', comment='close', when=bear and dn == 1)
strategy.entry('Long', strategy.long, when=direction != 'SHORT' and bull and up == 1)
strategy.entry('Short', strategy.short, when=direction != 'LONG' and bear and dn == 1)
if bull and up==1
alert('Bullish movement! LONG trading zone', alert.freq_once_per_bar_close)
if bear and dn==1
alert('Bearish movement! SHORT trading zone', alert.freq_once_per_bar_close)