Tài nguyên đang được tải lên... tải...

Mua và bán khối lượng Heatmap với chiến lược giá thời gian thực

Tác giả:ChaoZhang, Ngày: 2024-05-24 17:16:58
Tags:EMAVWAPSMA

img

Tổng quan

Chiến lược này kết hợp bản đồ nhiệt khối lượng và giá thời gian thực để tạo ra tín hiệu mua và bán bằng cách phân tích sự phân bố giá và khối lượng trong một khoảng thời gian nhất định. Chiến lược đầu tiên tính toán một số mức giá dựa trên giá hiện tại và tỷ lệ phần trăm phạm vi giá đã thiết lập. Sau đó nó đếm khối lượng mua và bán tại mỗi mức giá trong một khoảng thời gian trước và tính toán khối lượng mua và bán tích lũy. Màu sắc của các nhãn được xác định dựa trên khối lượng mua và bán tích lũy. Ngoài ra, chiến lược vẽ đường cong giá thời gian thực. Hơn nữa, chiến lược kết hợp các chỉ số như EMA và VWAP để tạo ra tín hiệu mua và bán dựa trên mối quan hệ của chúng với giá và khối lượng. Một tín hiệu mua được tạo ra khi các điều kiện mua được đáp ứng, và không có tín hiệu trước đó xảy ra. Một tín hiệu bán được tạo ra khi các điều kiện bán được đáp ứng, hoặc có hai nến đỏ liên tiếp, và không có tín hiệu trước đó xảy ra.

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

  1. Tính toán một số mức giá dựa trên giá hiện tại và tỷ lệ phần trăm phạm vi giá cố định.
  2. Đếm khối lượng mua và bán ở từng mức giá trong một giai đoạn trước và tính toán khối lượng mua và bán tích lũy.
  3. Xác định màu sắc của các nhãn dựa trên khối lượng mua và bán tích lũy và hiển thị các nhãn hoặc hình dạng biểu đồ.
  4. Xác định đường cong giá thời gian thực.
  5. Tính toán các chỉ số như EMA và VWAP.
  6. Xác định xem các điều kiện mua đã được đáp ứng dựa trên mối quan hệ giữa giá và các chỉ số như EMA và VWAP, cũng như các điều kiện khối lượng.
  7. Xác định xem các điều kiện bán được đáp ứng dựa trên mối quan hệ giữa giá và các chỉ số như EMA, cũng như các điều kiện khối lượng. Nếu được đáp ứng và không có tín hiệu trước đó xảy ra, tạo tín hiệu bán. Nếu có hai ngọn nến đỏ liên tiếp và không có tín hiệu trước đó xảy ra, cũng tạo tín hiệu bán.
  8. Ghi lại trạng thái mua và bán hiện tại và cập nhật trạng thái xảy ra tín hiệu.

Phân tích lợi thế

  1. Sự kết hợp giữa bản đồ nhiệt khối lượng và giá thời gian thực cung cấp một hiển thị trực quan về phân bố giá và khối lượng, phục vụ như một tham chiếu cho các quyết định giao dịch.
  2. Việc kết hợp các chỉ số như EMA và VWAP làm phong phú hơn đánh giá tình trạng của chiến lược và cải thiện độ tin cậy của nó.
  3. Chiến lược xem xét nhiều yếu tố, bao gồm giá, chỉ số và khối lượng, làm cho tín hiệu mua và bán toàn diện và mạnh mẽ hơn.
  4. Chiến lược đặt ra những giới hạn đối với việc tạo tín hiệu để tránh tạo tín hiệu lặp đi lặp lại liên tục, giảm các tín hiệu gây hiểu nhầm.

Phân tích rủi ro

  1. Hiệu suất của chiến lược có thể bị ảnh hưởng bởi các thiết lập tham số như tỷ lệ phần trăm phạm vi giá và thời gian xem lại, yêu cầu điều chỉnh và tối ưu hóa dựa trên các tình huống cụ thể.
  2. Các chỉ số như EMA và VWAP có sự chậm trễ và hạn chế vốn có, có thể trở nên không hiệu quả trong một số môi trường thị trường nhất định.
  3. Chiến lược này chủ yếu phù hợp với các thị trường xu hướng và có thể tạo ra nhiều tín hiệu sai trong các thị trường hỗn loạn.
  4. Các biện pháp kiểm soát rủi ro của chiến lược tương đối đơn giản, thiếu các công cụ quản lý rủi ro như dừng lỗ và kích thước vị trí.

Hướng tối ưu hóa

  1. Đưa ra nhiều chỉ số kỹ thuật và chỉ số tâm lý thị trường, chẳng hạn như RSI, MACD, Bollinger Bands, v.v., để làm phong phú cơ sở đánh giá chiến lược.
  2. Tối ưu hóa các điều kiện để tạo ra tín hiệu mua và bán để cải thiện độ chính xác và độ tin cậy của tín hiệu.
  3. Bao gồm các biện pháp kiểm soát rủi ro như dừng lỗ và kích thước vị trí, thiết lập mức dừng lỗ hợp lý và kích thước vị trí để kiểm soát rủi ro của các giao dịch riêng lẻ.
  4. Thực hiện tối ưu hóa tham số và kiểm tra lại chiến lược để tìm kết hợp tham số tối ưu và khả năng áp dụng trên thị trường.
  5. Xem xét kết hợp chiến lược này với các chiến lược khác để tận dụng điểm mạnh của các chiến lược khác nhau và cải thiện sự ổn định và lợi nhuận tổng thể.

Tóm lại

Chiến lược này tạo ra tín hiệu mua và bán bằng cách kết hợp bản đồ nhiệt khối lượng, giá thời gian thực và nhiều chỉ số kỹ thuật, cung cấp một giá trị tham chiếu nhất định. Ưu điểm của chiến lược nằm trong khả năng hiển thị trực quan sự phân bố giá và khối lượng và xem xét toàn diện nhiều yếu tố để tạo ra tín hiệu. Tuy nhiên, chiến lược cũng có một số hạn chế và rủi ro, chẳng hạn như tác động của cài đặt tham số, bản chất chậm trễ của các chỉ số và sự phụ thuộc vào thị trường xu hướng. Do đó, trong các ứng dụng thực tế, cần tối ưu hóa và cải thiện thêm chiến lược, chẳng hạn như giới thiệu nhiều chỉ số hơn, tối ưu hóa điều kiện tín hiệu, tăng cường kiểm soát rủi ro, v.v., để cải thiện độ bền và lợi nhuận của chiến lược.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Buy and Sell Volume Heatmap with Real-Time Price Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Settings for Volume Heatmap
lookbackPeriod = input.int(100, title="Lookback Period")
baseGreenColor = input.color(color.green, title="Buy Volume Color")
baseRedColor = input.color(color.red, title="Sell Volume Color")
priceLevels = input.int(10, title="Number of Price Levels")
priceRangePct = input.float(0.01, title="Price Range Percentage")
labelSize = input.string("small", title="Label Size", options=["tiny", "small", "normal", "large"])
showLabels = input.bool(true, title="Show Volume Labels")

// Initialize arrays to store price levels, buy volumes, and sell volumes
var float[] priceLevelsArr = array.new_float(priceLevels)
var float[] buyVolumes = array.new_float(priceLevels)
var float[] sellVolumes = array.new_float(priceLevels)

// Calculate price levels around the current price
for i = 0 to priceLevels - 1
    priceLevel = close * (1 + (i - priceLevels / 2) * priceRangePct)  // Adjust multiplier for desired spacing
    array.set(priceLevelsArr, i, priceLevel)

// Calculate buy and sell volumes for each price level
for i = 0 to priceLevels - 1
    level = array.get(priceLevelsArr, i)
    buyVol = 0.0
    sellVol = 0.0
    for j = 1 to lookbackPeriod
        if close[j] > open[j]
            if close[j] >= level and low[j] <= level
                buyVol := buyVol + volume[j]
        else
            if close[j] <= level and high[j] >= level
                sellVol := sellVol + volume[j]
    array.set(buyVolumes, i, buyVol)
    array.set(sellVolumes, i, sellVol)

// Determine the maximum volumes for normalization
maxBuyVolume = array.max(buyVolumes)
maxSellVolume = array.max(sellVolumes)

// Initialize cumulative buy and sell volumes for the current bar
cumulativeBuyVol = 0.0
cumulativeSellVol = 0.0

// Calculate colors based on the volumes and accumulate volumes for the current bar
for i = 0 to priceLevels - 1
    buyVol = array.get(buyVolumes, i)
    sellVol = array.get(sellVolumes, i)
    cumulativeBuyVol := cumulativeBuyVol + buyVol
    cumulativeSellVol := cumulativeSellVol + sellVol

// Determine the label color based on which volume is higher
labelColor = cumulativeBuyVol > cumulativeSellVol ? baseGreenColor : baseRedColor

// Initialize variables for plotshape
var float shapePosition = na
var color shapeColor = na

if cumulativeBuyVol > 0 or cumulativeSellVol > 0
    if showLabels
        labelText = "Buy: " + str.tostring(cumulativeBuyVol) + "\nSell: " + str.tostring(cumulativeSellVol)
        label.new(x=bar_index, y=high + (high - low) * 0.02, text=labelText, color=color.new(labelColor, 0), textcolor=color.white, style=label.style_label_down, size=labelSize)
    else
        shapePosition := high + (high - low) * 0.02
        shapeColor := labelColor

// Plot the shape outside the local scope
plotshape(series=showLabels ? na : shapePosition, location=location.absolute, style=shape.circle, size=size.tiny, color=shapeColor)

// Plot the real-time price on the chart
plot(close, title="Real-Time Price", color=color.blue, linewidth=2, style=plot.style_line)

// Mpullback Indicator Settings
a = ta.ema(close, 9)
b = ta.ema(close, 20)
e = ta.vwap(close)
volume_ma = ta.sma(volume, 20)

// Calculate conditions for buy and sell signals
buy_condition = close > a and close > e and volume > volume_ma and close > open and low > a and low > e // Ensure close, low are higher than open, EMA, and VWAP
sell_condition = close < a and close < b and close < e and volume > volume_ma

// Store the previous buy and sell conditions
var bool prev_buy_condition = na
var bool prev_sell_condition = na

// Track if a buy or sell signal has occurred
var bool signal_occurred = false

// Generate buy and sell signals based on conditions
buy_signal = buy_condition and not prev_buy_condition and not signal_occurred
sell_signal = sell_condition and not prev_sell_condition and not signal_occurred

// Determine bearish condition (close lower than the bottom 30% of the candle's range)
bearish = close < low + (high - low) * 0.3

// Add sell signal when there are two consecutive red candles and no signal has occurred
two_consecutive_red_candles = close[1] < open[1] and close < open
sell_signal := sell_signal or (two_consecutive_red_candles and not signal_occurred)

// Remember the current conditions for the next bar
prev_buy_condition := buy_condition
prev_sell_condition := sell_condition

// Update signal occurred status
signal_occurred := buy_signal or sell_signal

// Plot buy and sell signals
plotshape(buy_signal, title="Buy", style=shape.labelup, location=location.belowbar, color=color.green, text="Buy", textcolor=color.white)
plotshape(sell_signal, title="Sell", style=shape.labeldown, location=location.abovebar, color=color.red, text="Sell", textcolor=color.white)

// Strategy entry and exit
if buy_signal
    strategy.entry("Buy", strategy.long)

if sell_signal
    strategy.entry("Sell", strategy.short)


Có liên quan

Thêm nữa