В процессе загрузки ресурсов... загрузка...

Тепловая карта объема покупки и продажи с ценовой стратегией в режиме реального времени

Автор:Чао Чжан, Дата: 2024-05-24 17:16:58
Тэги:ЕМАVWAPSMA

img

Обзор

Эта стратегия сочетает в себе тепловую карту объема и цену в режиме реального времени для генерации сигналов покупки и продажи путем анализа распределения цены и объема за определенный период. Стратегия сначала рассчитывает несколько уровней цены на основе текущей цены и установленного процентного диапазона цен. Затем она подсчитывает объемы покупки и продажи на каждом уровне цены за прошедший период и рассчитывает совокупные объемы покупки и продажи. Цвет ярлыков определяется на основе совокупных объемов покупки и продажи. Кроме того, стратегия составляет графику кривой цен в режиме реального времени. Кроме того, стратегия включает такие индикаторы, как EMA и VWAP, для генерации сигналов покупки и продажи на основе их отношений с ценой и объемом.

Принцип стратегии

  1. Вычислить несколько уровней цен на основе текущей цены и установленного процентного диапазона цен.
  2. Подсчитать объемы покупок и продаж на каждом ценовом уровне за прошедший период и вычислить совокупные объемы покупок и продаж.
  3. Определить цвет этикетки на основе совокупного объема покупок и продаж и отобразить этикетки или формы графиков.
  4. Нарисуйте кривую цен в реальном времени.
  5. Вычислить такие показатели, как EMA и VWAP.
  6. Определить, выполняются ли условия покупки на основе взаимосвязи между ценой и показателями, такими как EMA и VWAP, а также условиями объема.
  7. Определить, соблюдаются ли условия продажи на основе взаимосвязи между ценой и показателями, такими как EMA, а также условий объема. Если соблюдены и не произошло никакого предыдущего сигнала, сгенерируйте сигнал продажи. Если есть две последовательные красные свечи и не произошло никакого предыдущего сигнала, также сгенерируйте сигнал продажи.
  8. Запись текущих состояний условий покупки и продажи и обновление состояния возникновения сигнала.

Анализ преимуществ

  1. Сочетание тепловой карты объема и цены в режиме реального времени обеспечивает интуитивное отображение распределения цены и объема, что служит ориентиром для принятия торговых решений.
  2. Включение таких показателей, как EMA и VWAP, обогащает оценку состояния стратегии и повышает ее надежность.
  3. Стратегия учитывает множество факторов, включая цену, показатели и объем, что делает сигналы покупки и продажи более всеобъемлющими и надежными.
  4. Стратегия устанавливает ограничения на генерацию сигнала, чтобы избежать непрерывного повторения сигналов, уменьшая вводящие в заблуждение сигналы.

Анализ рисков

  1. На эффективность стратегии могут влиять такие параметры, как процент ценового диапазона и период просмотра, что требует корректировки и оптимизации в зависимости от конкретных ситуаций.
  2. Показатели, такие как EMA и VWAP, имеют неотъемлемые отставания и ограничения, которые могут стать неэффективными в определенных рыночных условиях.
  3. Стратегия в основном подходит для рынков с тенденциями и может генерировать больше ложных сигналов на нестабильных рынках.
  4. Меры контроля рисков стратегии относительно просты, отсутствуют инструменты управления рисками, такие как стоп-лосс и размещение позиций.

Направление оптимизации

  1. Ввести больше технических показателей и показателей настроения на рынке, таких как RSI, MACD, полосы Боллинджера и т. д., чтобы обогатить основу оценки стратегии.
  2. Оптимизировать условия для генерации сигналов купли и продажи для повышения точности и надежности сигналов.
  3. Включать меры по контролю риска, такие как размещение стоп-лосса и размещение позиций, устанавливая разумные уровни стоп-лосса и размеры позиций для контроля рискового воздействия на отдельные сделки.
  4. Оптимизация параметров и обратное тестирование стратегии для поиска оптимальных комбинаций параметров и применения на рынке.
  5. Рассмотреть возможность объединения этой стратегии с другими стратегиями, чтобы использовать сильные стороны различных стратегий и улучшить общую стабильность и рентабельность.

Резюме

Эта стратегия генерирует сигналы покупки и продажи путем объединения тепловой карты объема, цены в режиме реального времени и нескольких технических индикаторов, обеспечивая определенное эталонное значение. Преимущество стратегии заключается в ее способности интуитивно отображать распределение цены и объема и всесторонне учитывать несколько факторов для генерации сигналов. Однако стратегия также имеет некоторые ограничения и риски, такие как влияние настроек параметров, отстающий характер индикаторов и зависимость от трендовых рынков. Поэтому в практических приложениях необходима дальнейшая оптимизация и улучшение стратегии, например, внедрение большего количества индикаторов, оптимизация условий сигнала, повышение контроля рисков и т. д., чтобы повысить надежность и рентабельность стратегии.


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


Связанные

Больше