Chiến lược dựa trên năng lượng khối lượng

Tác giả:ChaoZhang, Ngày: 2024-01-04 15:38:54
Tags:

img

Tổng quan

Chiến lược dựa trên năng lượng khối lượng đánh giá sự thay đổi tâm lý của những người tham gia thị trường bằng cách phân tích sự thay đổi khối lượng giao dịch. Nó chia khối lượng giao dịch thành khối lượng tăng và khối lượng giảm, tính toán đường trung bình động cân của chúng, tạo ra tín hiệu tăng khi khối lượng tăng chiếm ưu thế và tạo ra tín hiệu giảm khi khối lượng giảm chiếm ưu thế.

Chiến lược logic

Chiến lược đầu tiên chia khối lượng giao dịch của mỗi nến thành khối lượng tăng và khối lượng giảm dựa trên mối quan hệ giữa giá đóng và giá mở. Nếu giá đóng lớn hơn giá mở, toàn bộ khối lượng giao dịch của nến là khối lượng tăng. Nếu giá đóng thấp hơn giá mở, khối lượng tăng được tính theo tỷ lệ (giá cao nhất - giá mở) / (giá cao nhất - giá thấp nhất), và phần còn lại là khối lượng giảm.

Sau đó, nó tính toán trung bình động cân của khối lượng tăng và giảm của n ngọn nến cuối cùng tương ứng. Nếu trung bình động của khối lượng tăng lớn hơn khối lượng giảm, và sự khác biệt của chúng chia cho khối lượng tăng lớn hơn ngưỡng đã đặt trước, một tín hiệu tăng được tạo ra. Quy tắc tạo tín hiệu giảm tương tự.

Nó cũng thiết lập một đường cơ sở với khối lượng giao dịch trung bình để xác định các khu vực củng cố.

Phân tích lợi thế

  • Sử dụng thông tin về khối lượng để đánh giá tình cảm của các thành viên thị trường với cơ sở lý thuyết
  • Tự động xác định các vùng hợp nhất để tránh bỏ lỡ các tín hiệu quan trọng
  • Các tham số có thể tùy chỉnh thích nghi với các sản phẩm giao dịch và khung thời gian khác nhau
  • Có thể xác định tín hiệu tăng và giảm riêng biệt hoặc chỉ theo một bên

Phân tích rủi ro

  • Dữ liệu khối lượng giao dịch có thể bị thao túng
  • Các thông số mặc định có thể không phù hợp với tất cả các sản phẩm, tối ưu hóa cần thiết
  • Các thông số xác định hợp nhất không chính xác có thể bỏ lỡ tín hiệu
  • Các tín hiệu sai có thể xảy ra trong thời gian ngắn

Các phương pháp như tối ưu hóa tham số và kết hợp với các chỉ số khác có thể giúp giảm rủi ro.

Hướng dẫn tối ưu hóa

  • Kiểm tra các phương pháp khác nhau để tính khối lượng giao dịch
  • Hãy thử các loại trung bình động khác nhau, như EMA, SMMA vv
  • Tối ưu hóa thời gian tính toán khối lượng trung bình
  • Tối ưu hóa các tham số để xác định hợp nhất
  • Kết hợp với các chỉ số kỹ thuật khác để lọc tín hiệu

Tóm lại

Chiến lược dựa trên năng lượng khối lượng đánh giá thông minh sự phân phối khối lượng giao dịch tăng và giảm để xác định tâm lý thị trường và thay đổi xu hướng. Nó có thể được sử dụng một mình hoặc kết hợp với các chiến lược khác.


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

Thêm nữa