Войти
Главная / Data science в трейдинге / Строим свой индикатор точечных объемов на Python (VPOC) 
Хотите зарабатывать на трейдинге?

Подписывайтесь на наш телеграм-канал для трейдеров — с глубокой аналитикой и рабочими стратегиями

Подписаться

Строим свой индикатор точечных объемов на Python (VPOC) 

В этой статье мы рассмотрим, как с помощью Python и библиотек Pandas и Plotly можно построить индикатор поиска точечного объема (Volume Point of Control, VPOC) на графике.

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

В трейдинге анализ объемов играет ключевую роль, позволяя трейдерам понимать, на каких ценовых уровнях происходят наибольшие сделки. Один из важных инструментов для такого анализа — Volume Point of Control (VPOC), который указывает цену с наибольшим объемом торгов в определенный период. В этой статье мы рассмотрим, как с помощью Python и библиотеки Plotly построить индикатор VPOC на графике цен.

Импорт библиотек

import pandas as pd  # Для работы с табличными данными
import plotly.graph_objects as go  # Для построения интерактивных графиков
  • Pandas используется для обработки и анализа данных.
  • Plotly позволяет создавать интерактивные графики, такие как свечные графики и точечные диаграммы.

Настройка временного интервала

INTERVAL = '5min'  # Временной интервал для группировки данных

Здесь задается интервал времени, который будет использоваться для группировки данных. В данном случае это 5 минут.

Загрузка данных

<code>def load_data(file_path):
    df = pd.read_csv(file_path)  # Загрузка данных из CSV-файла
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')  # Преобразование временной метки в формат datetime
    return df  # Возвращаем DataFrame с обработанными данными</code>

Функция load_data загружает данные из CSV-файла и преобразует столбец timestamp в формат datetime для удобства работы с временными данными.

Расчет VPOC

def calculate_vpoc(df, min_volume=None):
    """
    Вычисляет Volume Point of Control (VPOC) для каждого временного интервала с возможностью фильтрации по минимальному объему.

    Параметры:
        df (pd.DataFrame): Данные с колонками 'timestamp', 'price' и 'size'.
        min_volume (int, optional): Минимальный объем для фильтрации ценовых уровней.

    Возвращает:
        pd.DataFrame: Данные с колонками 'time_bin', 'vpoc_price', 'vpoc_volume'.
    """
    df['time_bin'] = df['timestamp'].dt.floor(INTERVAL)  # Группировка данных по временным интервалам
    vpoc_data = []  # Список для хранения результатов

    for time_bin, group in df.groupby('time_bin'):  # Группировка данных по временным интервалам
        volume_profile = group.groupby('price')['size'].sum()  # Суммирование объема по каждому ценовому уровню

        if min_volume is not None:  # Фильтрация по минимальному объему, если указано
            volume_profile = volume_profile[volume_profile >= min_volume]

        if not volume_profile.empty:  # Если данные не пустые
            vpoc_price = volume_profile.idxmax()  # Цена с максимальным объемом
            vpoc_volume = volume_profile.max()  # Максимальный объем
            vpoc_data.append([time_bin, vpoc_price, vpoc_volume])  # Добавление результата в список

    return pd.DataFrame(vpoc_data, columns=['time_bin', 'vpoc_price', 'vpoc_volume'])  # Возврат DataFrame с результатами
  • Функция calculate_vpoc вычисляет VPOC для каждого временного интервала. Она группирует данные по времени и находит цену с максимальным объемом торгов.
  • Если задан параметр min_volume, то учитываются только те ценовые уровни, объем которых превышает это значение.

Построение графика

def plot_vpoc(df, vpoc_df):
    fig = go.Figure()  # Создание объекта Figure для построения графика

    # Добавление свечного графика
    df['time_bin'] = df['timestamp'].dt.floor(INTERVAL)  # Группировка данных по временным интервалам
    ohlc = df.groupby('time_bin').agg({
        'price': ['first', 'max', 'min', 'last']  # Расчет OHLC (Open, High, Low, Close) для каждого интервала
    })
    ohlc.columns = ['open', 'high', 'low', 'close']  # Переименование колонок
    ohlc.reset_index(inplace=True)  # Сброс индекса для удобства работы

    fig.add_trace(go.Candlestick(
        x=ohlc['time_bin'],  # Временные метки
        open=ohlc['open'],  # Цена открытия
        high=ohlc['high'],  # Максимальная цена
        low=ohlc['low'],  # Минимальная цена
        close=ohlc['close'],  # Цена закрытия
        name='OHLC'  # Название графика
    ))

    # Нормализация объемов для определения размеров маркеров
    max_volume = vpoc_df['vpoc_volume'].max()  # Максимальный объем
    min_marker_size = 5  # Минимальный размер маркера
    max_marker_size = 20  # Максимальный размер маркера

    def scale_volume_to_size(volume):
        return ((volume / max_volume) * (max_marker_size - min_marker_size)) + min_marker_size  # Масштабирование объема

    vpoc_df['marker_size'] = vpoc_df['vpoc_volume'].apply(scale_volume_to_size)  # Применение функции масштабирования

    # Добавление VPOC с динамическими размерами маркеров
    fig.add_trace(go.Scatter(
        x=vpoc_df['time_bin'],  # Временные метки
        y=vpoc_df['vpoc_price'],  # Цены VPOC
        mode='markers+lines',  # Режим отображения (маркеры и линии)
        name='VPOC',  # Название графика
        line=dict(color='white', width=0.5),  # Настройка линии
        marker=dict(
            color='white',  # Цвет маркера
            symbol="circle",  # Форма маркера
            size=vpoc_df['marker_size'],  # Размер маркера
            sizemode='diameter',  # Режим размера маркера
            sizeref=0.68,  # Коэффициент масштабирования
            sizemin=min_marker_size  # Минимальный размер маркера
        )
    ))

    # Настройка макета графика
    fig.update_layout(
        title=f"BTCUSDT Volume Point of Control ({INTERVAL})",  # Заголовок графика
        xaxis_title='Time',  # Название оси X
        yaxis_title='Price',  # Название оси Y
        template='plotly_dark',  # Темная тема
        xaxis_rangeslider_visible=False,  # Скрытие ползунка диапазона
        height=800  # Высота графика
    )

    # Фиксация масштаба осей
    fig.update_xaxes(
        fixedrange=True,  # Запретить изменение масштаба по оси X
        range=[ohlc['time_bin'].min(), ohlc['time_bin'].max()]  # Диапазон оси X
    )
    fig.update_yaxes(
        fixedrange=True,  # Запретить изменение масштаба по оси Y
        range=[ohlc['low'].min(), ohlc['high'].max()]  # Диапазон оси Y
    )
    fig.show()  # Отображение графика

Функция plot_vpoc строит свечной график и добавляет на него точки VPOC. Размер маркеров VPOC зависит от объема торгов на соответствующем ценовом уровне.

Основной процесс

if __name__ == '__main__':
    file_path = './BTCUSDT2020-05-23.csv'  # Путь к файлу с данными

    # Загрузка данных
    df = load_data(file_path)

    # Расчет VPOC с фильтрацией по минимальному объему
    min_volume = 10  # Установите минимальный объем для фильтрации
    vpoc_df = calculate_vpoc(df, min_volume=min_volume)

    # Построение графика
    plot_vpoc(df, vpoc_df)

В основном блоке кода загружаются данные, рассчитывается VPOC и строится график.

В зависимости от выбора фильтра по объему кол-во VPOC на графике может меняться

Заключение

В этой статье мы разобрали, как с помощью Python и библиотек Pandas и Plotly можно построить индикатор поиска точечного объема (VPOC) на графике. Мы подробно описали каждую строку кода, чтобы вы могли легко адаптировать его под свои нужды.

VPOC — это мощный инструмент для анализа рыночных данных, который помогает трейдерам определять ключевые уровни поддержки и сопротивления, а также следдить за крупным объемам

Ссылка на код в нашем репозитории GitHub — не забудьте поставить звездочку, подписаться на наш профиль в GitHub, а такеже на наш телеграм-канал и профиль на Trading view.

Хотите разбираться в рынках и зарабатывать на них при любых условиях?

Подписывайтесь на наш Telegram-канал о финансах и Data Science в трейдинге:
– Делаем глубокую аналитику
– Тестируем и разрабатываем торговые стратегии
– Кодим индикаторы и алгоритмы
– Собираем базу знаний для трейдеров

Подписаться
Хотите разбираться в рынках и зарабатывать на них при любых условиях?

Подписывайтесь на наш Telegram-канал о финансах и Data Science в трейдинге:
– Делаем глубокую аналитику
– Тестируем и разрабатываем торговые стратегии
– Кодим индикаторы и алгоритмы
– Собираем базу знаний для трейдеров

Подписаться
Аналитика XRPUSDT на новую неделю (#6)
Хоть на этой неделе продавцы и победили, но действовать мы будем наоборот. Шестая неделя внутренняя и тренд движется вверх, поэтому...
Читать далее
💪 Какие навыки можно прокачать в трейдинге за первые 2 месяца
Трейдинг — это не только покупка и продажа активов, но и умение понимать рынок, анализировать данные и принимать взвешенные решения....
Читать далее
Как читать графики в трейдинге: виды, преимущества и лучшие стратегии
Графики — главный инструмент анализа в трейдинге. Они помогают видеть движение цены и находить закономерности, которые помогают принимать решения. Существует...
Читать далее