Giao dịch định lượng: chiến lược theo khối lượng


Ngày tạo: 2024-01-04 15:38:54 sửa đổi lần cuối: 2024-01-04 15:38:54
sao chép: 1 Số nhấp chuột: 612
1
tập trung vào
1621
Người theo dõi

Giao dịch định lượng: chiến lược theo khối lượng

Tổng quan

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

Nguyên tắc chiến lược

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

Sau đó tính toán các trung bình di chuyển có trọng số của khối lượng giao dịch đa đầu và khối lượng giao dịch đầu trống của n gốc K cuối cùng. Nếu trung bình di chuyển của khối lượng giao dịch đa đầu lớn hơn trung bình di chuyển của khối lượng giao dịch đầu trống, và sự khác biệt giữa hai là tỷ lệ giao dịch đa đầu lớn hơn ngưỡng đặt trước, thì sẽ tạo ra tín hiệu đa đầu. Quy tắc tạo ra tín hiệu đầu trống tương tự.

Ngoài ra còn có giá trị trung bình của khối lượng giao dịch để xác định khu vực cân bằng. Nếu khối lượng giao dịch không có sự khác biệt rõ ràng, nó sẽ cho biết hiện tại đang trong trạng thái cân bằng.

Phân tích lợi thế

  • Sử dụng thông tin khối lượng giao dịch để đánh giá cảm xúc của người tham gia thị trường, tạo ra tín hiệu có cơ sở lý thuyết
  • Tự động nhận diện khu vực cân bằng để tránh bỏ lỡ tín hiệu quan trọng
  • Các tham số có thể tùy chỉnh để phù hợp với các loại giao dịch và chu kỳ thời gian khác nhau
  • Có thể phân biệt giữa tín hiệu đa đầu và tín hiệu vô đầu, hoặc chỉ theo tín hiệu đơn đầu

Phân tích rủi ro

  • Dữ liệu giao dịch có thể bị thao túng
  • Các tham số mặc định có thể không phù hợp với tất cả các giống và cần được tối ưu hóa
  • Thiết lập tham số nhận dạng không chính xác có thể bỏ lỡ tín hiệu
  • Có thể tạo ra tín hiệu sai trong một chu kỳ ngắn

Có thể giảm nguy cơ bằng cách tối ưu hóa tham số, kết hợp các chỉ số khác.

Hướng 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
  • Thử các loại moving average khác nhau như EMA, SMMA, v.v.
  • Tối ưu hóa tính toán trung bình các tham số chu kỳ
  • Tối ưu hóa nhận diện các tham số chênh lệch khối lượng giao dịch được thu thập
  • Kết hợp với các chỉ số kỹ thuật khác để lọc tín hiệu

Tóm tắt

Chiến lược định lượng năng lượng có thể được sử dụng một cách độc lập hoặc kết hợp với các chiến lược khác bằng cách đánh giá thông minh về sự phân bố đa không gian của khối lượng giao dịch, tự động đánh giá cảm xúc và xu hướng thay đổi trên thị trường. Tối ưu hóa tham số và kết hợp các chỉ số có thể làm tăng thêm sự ổn định và lợi nhuận của chiến lược.

Mã nguồn chiến lượ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)