Estratégia orientada para o consumo de energia por volume

Autora:ChaoZhang, Data: 2024-01-04 15:38:54
Tags:

img

Resumo

A estratégia impulsionada pela energia de volume julga as mudanças de sentimento dos participantes do mercado analisando as mudanças no volume de negociação. Divide o volume de negociação em volume de alta e volume de baixa, calcula sua média móvel ponderada, gera sinais de alta quando o volume de alta domina e gera sinais de baixa quando o volume de baixa domina.

Estratégia lógica

A estratégia primeiro divide o volume de negociação de cada candelabro em volume de alta e volume de baixa com base na relação entre o preço de fechamento e o preço de abertura. Se o preço de fechamento for maior que o preço de abertura, todo o volume de negociação do candelabro é volume de alta. Se o preço de fechamento for menor que o preço de abertura, o volume de alta é calculado de acordo com a relação de (preço mais alto - preço de abertura) / (preço mais alto - preço mais baixo), e o restante é volume de baixa.

Em seguida, ele calcula a média móvel ponderada de volume de alta e baixa dos últimos n candelabros, respectivamente. Se a média móvel de volume de alta for maior que o volume de baixa, e sua diferença dividida por volume de alta for maior que um limiar pré-definido, um sinal de alta é gerado. A regra para gerar sinais de baixa é semelhante.

O volume médio de negociação é o valor médio do volume médio de negociação, o que significa que o mercado está em fase de consolidação.

Análise das vantagens

  • Usar informações sobre o volume para avaliar o sentimento dos participantes no mercado com base teórica
  • Identificar automaticamente as zonas de consolidação para evitar que se percam sinais importantes
  • Os parâmetros personalizáveis adaptam-se aos diferentes produtos e prazos de negociação
  • Pode identificar sinais de alta e baixa separadamente ou seguir apenas um lado

Análise de riscos

  • Os dados relativos ao volume de negociação podem ser manipulados
  • Os parâmetros padrão podem não se adequar a todos os produtos, sendo necessária otimização
  • Os parâmetros de identificação de consolidação incorretos podem não apresentar sinais
  • Os sinais falsos podem ocorrer em períodos curtos

Métodos como a otimização de parâmetros e a combinação com outros indicadores podem ajudar a reduzir os riscos.

Orientações de otimização

  • Teste diferentes métodos de cálculo do volume de negociação
  • Tente diferentes tipos de médias móveis, como EMA, SMMA etc
  • Otimizar o período de cálculo do volume médio
  • Otimizar os parâmetros de identificação da consolidação
  • Combinar com outros indicadores técnicos para filtrar sinais

Resumo

A estratégia impulsionada pelo volume de energia julga inteligentemente a distribuição do volume de negociação de alta e baixa para determinar o sentimento do mercado e as mudanças de tendência. Pode ser usada sozinha ou combinada com outras estratégias.


/*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)
    

Mais.