Розробка індикатора дельти обсягів

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка індикатора дельти обсягів
Середній
~3-5 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Розроблення індикатора дельти обсягів

Delta обсягів (Volume Delta) — різниця між обсягом агресивних покупок та агресивних продаж за період. Позитивна дельта — покупці домінували. Негативна дельта — продавці агресивніше. Це один з найбільш інформативних індикаторів для розуміння реального тиску на ринку на відміну від просто обсягу (який не розрізняє сторону ініціатора).

Принцип розрахунку

Визначення сторони сделки

Кожна сделка на біржі має aggressor side — хто був ініціатором (прийшов з ринковим ордером):

def determine_trade_side(trade: dict) -> str:
    """
    Binance aggTrade: m=True означає, що buyer був maker (limit ордер).
    Значит seller був aggressor (прийшов з market sell).
    """
    if trade['m'] is True:
        return 'sell'   # агресивна продажа
    else:
        return 'buy'    # агресивна покупка

Розрахунок delta за період (свічу)

from decimal import Decimal
from collections import defaultdict

class VolumeDeltaCalculator:
    def calculate_candle_delta(self, trades: list[dict]) -> CandleDelta:
        buy_volume = Decimal(0)
        sell_volume = Decimal(0)

        for trade in trades:
            qty = Decimal(str(trade['q']))
            if determine_trade_side(trade) == 'buy':
                buy_volume += qty
            else:
                sell_volume += qty

        delta = buy_volume - sell_volume
        total = buy_volume + sell_volume

        return CandleDelta(
            buy_volume=buy_volume,
            sell_volume=sell_volume,
            delta=delta,
            total_volume=total,
            delta_percent=float(delta / total * 100) if total > 0 else 0
        )

Типи delta індикаторів

Bar Delta

Delta за окремену свічу. Відображається як гістограма під price chart:

def calculate_bar_deltas(candles: list) -> list[BarDelta]:
    result = []
    for candle in candles:
        trades = fetch_trades_for_candle(candle)
        delta_data = calculator.calculate_candle_delta(trades)

        result.append(BarDelta(
            time=candle.open_time,
            delta=float(delta_data.delta),
            delta_percent=delta_data.delta_percent,
            color='green' if delta_data.delta > 0 else 'red'
        ))
    return result

Cumulative Delta (CVD)

Накопичена сума delta з початку дня або обраного періоду:

def calculate_cvd(bar_deltas: list[BarDelta]) -> list[float]:
    cvd = []
    running = 0
    for bar in bar_deltas:
        running += bar.delta
        cvd.append(running)
    return cvd

CVD дивергенція — ключовий сигнал: ціна росте (нові highs), а CVD падає (продавці накопичають) → потенціальна зміна тренду.

Session Delta

Delta з початку торгівельної сесії (08:00 UTC для крипто або відкриття NYSE для пов'язаних активів). Показує накопичений баланс сил за сесію.

Реалізація як TradingView індикатор

Pine Script реалізація

//@version=5
indicator("Volume Delta", shorttitle="VD", overlay=false)

// Параметри
show_cvd = input.bool(true, "Show CVD")
show_bar_delta = input.bool(true, "Show Bar Delta")

// Розрахунок delta через close та volume
// Точний розрахунок потребує tick data; приближення через напрям свічки:
candle_up = close >= open
delta_approx = candle_up ? volume : -volume

// Bar Delta гістограма
if show_bar_delta
    hline(0, color=color.gray, linewidth=1)
    barcolor_delta = delta_approx >= 0 ? color.new(color.green, 40) : color.new(color.red, 40)
    plot(delta_approx, style=plot.style_columns, color=barcolor_delta, title="Bar Delta")

// CVD лінія
cvd = ta.cum(delta_approx)
if show_cvd
    plot(cvd, color=color.yellow, linewidth=2, title="CVD")

Важливе примітка: Pine Script не має доступу до tick data, тому приближення через напрям свічки неточне. Для точної delta потрібен кастомний datasource через TradingView Broker API або власний індикатор.

Точна delta через власний datasource

// Custom data series для Lightweight Charts
class DeltaDataProvider {
  private tradesCache: Map<string, CandleDelta> = new Map();

  async getDeltaForCandle(
    symbol: string,
    openTime: number,
    closeTime: number
  ): Promise<CandleDelta> {
    const cacheKey = `${symbol}_${openTime}`;
    if (this.tradesCache.has(cacheKey)) {
      return this.tradesCache.get(cacheKey)!;
    }

    const trades = await this.fetchTrades(symbol, openTime, closeTime);
    const delta = this.calculate(trades);
    this.tradesCache.set(cacheKey, delta);
    return delta;
  }

  private calculate(trades: Trade[]): CandleDelta {
    let buyVol = 0, sellVol = 0;
    for (const t of trades) {
      if (t.isBuyerMaker) {
        sellVol += t.quantity;  // seller був aggressor
      } else {
        buyVol += t.quantity;
      }
    }
    return { buyVol, sellVol, delta: buyVol - sellVol };
  }
}

Інтерпретація сигналів

Ситуація Ціна Delta Інтерпретація
Бичаче підтвердження Росте Позитивна Покупки підтримують ріст
Ведмежа підтвердження Падає Негативна Продажи давлять вниз
Бичача дивергенція Падає Позитивна Скриті покупки — можливий розворот
Ведмежа дивергенція Росте Негативна Скриті продажи — слабість тренду
Absorption Не рухається Екстремум Крупний учасник поглинає ордери

Delta — не standalone індикатор, а інструмент підтвердження. У зв'язці з рівнями підтримки/опору та volume profile дає значно точніші сигнали.