Розробка бота на базі Volume Profile

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

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

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

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

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

Розробка бота на базі VWAP

VWAP (Volume Weighted Average Price) — середньозважена по об'єму ціна. Показує справедливу ціну інструменту з урахуванням обсягу торгів. Трейдери використовують VWAP як динамічний рівень підтримки/опору та для оцінки якості виконання.

Що таке VWAP

VWAP розраховується накопичувально з початку торговельної сесії (або за період):

VWAP = Σ(Price × Volume) / Σ(Volume)

Ціна вище VWAP → інструмент торгується вище справедливої вартості (потенціал продажу).
Ціна нижче VWAP → нижче справедливої (потенціал покупки).

Реалізація бота

import pandas_ta as ta
from decimal import Decimal

class VWAPBot:
    def __init__(self, symbol: str, session_start_hour: int = 0):
        self.exchange = ccxt.binance({'apiKey': API_KEY, 'secret': SECRET})
        self.symbol = symbol
        self.session_start_hour = session_start_hour
        
        # VWAP bounds — стандартні відхилення від VWAP
        self.upper_band_std = 2.0   # продаємо при ціні вище VWAP + 2σ
        self.lower_band_std = 2.0   # купуємо при ціні нижче VWAP - 2σ
    
    async def calculate_vwap(self) -> tuple[Decimal, Decimal, Decimal]:
        """Повертає (vwap, upper_band, lower_band)"""
        # Отримуємо дані з початку сесії
        ohlcv = await self.exchange.fetch_ohlcv(self.symbol, '1m', limit=480)  # 8 годин
        df = pd.DataFrame(ohlcv, columns=['ts','open','high','low','close','volume'])
        
        # Типична ціна
        df['typical_price'] = (df['high'] + df['low'] + df['close']) / 3
        
        # VWAP: накопичувальне зважене середнє
        df['tp_vol'] = df['typical_price'] * df['volume']
        df['cum_tp_vol'] = df['tp_vol'].cumsum()
        df['cum_vol'] = df['volume'].cumsum()
        df['vwap'] = df['cum_tp_vol'] / df['cum_vol']
        
        current_vwap = Decimal(str(df['vwap'].iloc[-1]))
        current_price = Decimal(str(df['close'].iloc[-1]))
        
        # Стандартне відхилення від VWAP
        deviation = df['close'] - df['vwap']
        std = Decimal(str(deviation.std()))
        
        upper_band = current_vwap + std * Decimal(str(self.upper_band_std))
        lower_band = current_vwap - std * Decimal(str(self.lower_band_std))
        
        return current_vwap, upper_band, lower_band
    
    async def get_signal(self) -> str:
        vwap, upper, lower = await self.calculate_vwap()
        current_price = await self.get_current_price()
        
        if current_price < lower:
            return 'BUY'   # ціна сильно нижче VWAP
        elif current_price > upper:
            return 'SELL'  # ціна сильно вище VWAP
        elif abs(current_price - vwap) / vwap < Decimal('0.001'):
            return 'CLOSE_POSITION'  # ціна у VWAP — виходимо
        
        return 'HOLD'

VWAP як інструмент виконання (VWAP execution)

У інституціональній торгівлі VWAP — це не тільки індикатор, але й алгоритм виконання крупного ордера. Задача: виконати 1000 BTC так, щоб середня ціна виконання була близька до ринкового VWAP.

class VWAPExecution:
    """Розбиваємо крупний ордер на частини пропорційно прогнозованому об'єму"""
    
    def __init__(self, total_qty: Decimal, start_time: datetime, end_time: datetime):
        self.total_qty = total_qty
        self.start_time = start_time
        self.end_time = end_time
        self.executed_qty = Decimal('0')
    
    def get_slice_quantity(self, current_time: datetime, 
                            predicted_volume_pct: Decimal) -> Decimal:
        """Скільки виконати прямо сейчас"""
        remaining_qty = self.total_qty - self.executed_qty
        
        # Виконуємо пропорційно очікуваному об'єму за наступний період
        slice_qty = self.total_qty * predicted_volume_pct
        
        # Не перевищуємо залишок
        return min(slice_qty, remaining_qty)

Розробка VWAP бота з bands strategy та моніторингом відхилення від VWAP: 2–3 тижні.