Chiến lược mua và bán dựa trên bản đồ nhiệt khối lượng và giá theo thời gian thực

EMA VWAP SMA
Ngày tạo: 2024-05-24 17:16:58 sửa đổi lần cuối: 2024-05-24 17:16:58
sao chép: 2 Số nhấp chuột: 570
1
tập trung vào
1617
Người theo dõi

Chiến lược mua và bán dựa trên bản đồ nhiệt khối lượng và giá theo thời gian thực

Tổng quan

Chiến lược này kết hợp biểu đồ nóng giao dịch và giá trong thời gian thực để tạo ra tín hiệu mua và bán bằng cách phân tích phân bố giá và khối lượng giao dịch trong một khoảng thời gian nhất định. Chiến lược này đầ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 của phạm vi giá được thiết lập. Sau đó, tính toán số lượng giao dịch mua và bán trong một khoảng thời gian qua cho mỗi mức giá và tính toán khối lượng giao dịch mua và bán tích lũy. Dựa trên khối lượng giao dịch mua và bán tích lũy, xác định màu sắc của nhãn.

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

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

Phân tích lợi thế

  1. Kết hợp với biểu đồ nóng khối lượng giao dịch và giá thời gian thực, nó có thể hiển thị trực quan sự phân bố của giá cả và khối lượng giao dịch, cung cấp tài liệu tham khảo cho các quyết định giao dịch.
  2. Các chỉ số như EMA, VWAP được đưa ra, làm phong phú các quyết định của chiến lược và tăng độ tin cậy của chiến lược.
  3. Trong khi đó, các yếu tố khác nhau như giá cả, chỉ số và khối lượng giao dịch cũng được xem xét, làm cho tín hiệu mua và bán trở nên toàn diện và mạnh mẽ hơn.
  4. Thiết lập các điều kiện hạn chế phát sinh tín hiệu, tránh việc tạo ra các tín hiệu lặp đi lặp lại liên tục, giảm tín hiệu gây hiểu lầ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á, thời gian lùi, và cần điều chỉnh và tối ưu hóa tùy theo tình huống cụ thể.
  2. Các chỉ số EMA, VWAP và các chỉ số khác cũng có sự chậm trễ và hạn chế, và có thể không có hiệu lực trong một số môi trường thị trường.
  3. Chiến lược này được sử dụng chủ yếu cho các thị trường có xu hướng mạnh, có thể tạo ra nhiều tín hiệu giả trong thị trường biến động.
  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 phương tiện quản lý rủi ro như dừng lỗ và quản lý vị trí.

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

  1. Thêm nhiều chỉ số kỹ thuật và cảm xúc thị trường như RSI, MACD, và Binance để làm giàu quyết định 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, tăng độ chính xác và độ tin cậy của tín hiệu. Có thể xem xét việc đưa ra phân tích trên nhiều khung thời gian, xác nhận hướng xu hướng.
  3. Thêm các biện pháp kiểm soát rủi ro như quản lý lỗ hổng và vị trí, thiết lập mức dừng lỗ và kích thước vị trí hợp lý, kiểm soát lỗ hổng rủi ro cho giao dịch đơn lẻ.
  4. Tối ưu hóa tham số và kiểm tra lại các chiến lược để tìm ra sự kết hợp tham số tối ưu và phạm vi áp dụng thị trường.
  5. Xem xét việc kết hợp chiến lược này với các chiến lược khác để tận dụng lợi thế của các chiến lược khác nhau và nâng cao tính ổn định và lợi nhuận tổng thể.

Tóm tắt

Chiến lược này được tạo ra bằng cách kết hợp các biểu đồ nóng giao dịch, giá cả trong thời gian thực và nhiều chỉ số kỹ thuật để tạo ra tín hiệu mua và bán, có giá trị tham chiếu nhất định. Ưu điểm của chiến lược là có thể hiển thị trực quan phân bố giá cả và khối lượng giao dịch và xem xét tổng hợp các yếu tố khác nhau để 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ư ảnh hưởng của cài đặt tham số, sự chậm trễ của chỉ số, phụ thuộc vào thị trường xu hướng. Do đó, trong ứng dụng thực tế, cần tối ưu hóa và hoàn thiện chiến lược hơn nữa, chẳng hạn như giới thiệu nhiều chỉ số, tối ưu hóa các điều kiện tín hiệu, tăng cường kiểm soát rủi ro, v.v. để nâng cao sự ổn định và khả năng lợi nhuận của chiến lược.

Mã nguồn 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)