Войти
Главная / Data science в трейдинге / Как использовать Numpy и Pandas для анализа ценовых данных 
Хотите зарабатывать на трейдинге?

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

Подписаться

Как собрать свой журнал для тестирования стратегии? Заберите бесплатный гайд

Гайд от нашей команды поможет вам систематизировать торговлю и принимать взвешенные решения

Подтвердите согласие

Как использовать Numpy и Pandas для анализа ценовых данных 

Вся нужная база с примерами по двум популярным библиотекам.

NumPy: ускоряем числовой анализ

NumPy — библиотека для быстрых математических операций над массивами. Она работает на C, что делает её молниеносной по сравнению с обычными Python-списками. Именно NumPy лежит в основе большинства библиотек: Pandas, Scikit-Learn, TensorFlow, PyTorch — все они используют NumPy под капотом.

Почему NumPy крут:

  1. Скорость: массивы NumPy работают на C, что делает операции в десятки раз быстрее, чем с обычными Python-списками.
  2. Память: NumPy массивы более компактны и оптимизированы.
  3. Функциональность: широкий набор функций для статистики, агрегации, обработки временных рядов и линейной алгебры.
  4. Совместимость: большинство библиотек (Pandas, Scikit-Learn, TensorFlow) используют NumPy под капотом.

Импорт и базовая структура

import numpy as np

Создадим массив из цен закрытия BTC:

prices = np.array([13410.03, 13570.35, 13220.56, 13247.0, 13240.37])

1. Основные свойства массива

print(prices.shape)      # размерность (5,)
print(prices.dtype)      # тип данных (float64)
print(prices.ndim)       # количество осей (1)

2. Арифметика с массивами

NumPy поддерживает векторные операции (без циклов!):

# Рост на 5%
increased = prices * 1.05

# Разница между соседними значениями (доходность)
returns = np.diff(prices)

3. Статистический анализ

print(np.mean(prices)) # средняя цена
print(np.std(prices)) # стандартное отклонение
print(np.min(prices)) # минимум
print(np.max(prices)) # максимум
print(np.median(prices)) # медиана

Эти методы полезны для оценки волатильности и определения границ канала.

4. Скользящие окна (MA)

Скользящая средняя — один из ключевых элементов технического анализа. С помощью np.convolve можно легко ее реализовать:

def moving_average(data, window):
    return np.convolve(data, np.ones(window)/window, mode='valid')

ma = moving_average(prices, 3)
print(ma)

5. Условные выборки и фильтрация

# Фильтруем цены выше 13300
high_prices = prices[prices > 13300]

Или создаем логические маски:

mask = prices > np.mean(prices)
above_avg = prices[mask]

6. Прогнозирование наивной моделью

# Наивный прогноз: следующий шаг = предыдущий
predicted = np.roll(prices, 1)
predicted[0] = predicted[1]  # корректируем первую точку

# Ошибка прогноза
mae = np.mean(np.abs(prices - predicted))
print(f'MAE: {mae:.2f}')

7. Работа с 2D-массивами (OHLC)

Рассмотрим пример массива OHLC:

ohlc = np.array([
    [13715.65, 13715.65, 13155.38, 13410.03],
    [13434.98, 13818.55, 13322.15, 13570.35],
    [13569.98, 13735.24, 13001.13, 13220.56],
])

highs = ohlc[:, 1]
lows = ohlc[:, 2]
ranges = highs - lows

Практика: волатильность как индикатор

# Волатильность как относительный диапазон свечи
volatility = (highs - lows) / ohlc[:, 3]
print(volatility)

Визуализация

import plotly.graph_objects as go
import numpy as np

# Данные
prices = np.array([13410.03, 13570.35, 13220.56, 13247.00, 13240.37, 13380.00, 13353.78])
dates = pd.date_range(start='2023-01-01', periods=len(prices), freq='4H')

def moving_average(data, window):
    return np.convolve(data, np.ones(window)/window, mode='valid')

ma = moving_average(prices, 3)

# Обрезаем даты под длину скользящей средней
ma_dates = dates[len(dates) - len(ma):]

# График
fig = go.Figure()

fig.add_trace(go.Scatter(x=dates, y=prices, mode='lines+markers', name='Цена', line=dict(color='black')))
fig.add_trace(go.Scatter(x=ma_dates, y=ma, mode='lines', name='MA(3)', line=dict(dash='dot')))

fig.update_layout(
    title='Цены и скользящая средняя (NumPy + Plotly)',
    xaxis_title='Время',
    yaxis_title='Цена',
    template='plotly_white',
    hovermode='x unified'
)

fig.show()

NumPy — это не просто библиотека, а основа числового анализа в Python. Без неё не было бы ни Pandas, ни SciPy, ни TensorFlow, ни Scikit-learn.

Если вы трейдер, аналитик или дата-сайентист, то NumPy — ваш первый шаг в мир высокопроизводительных вычислений.

Вот почему NumPy так важен:

  • Ускоряет вычисления: операции происходят векторно, без циклов, с C-подкапотом.
  • Упрощает работу с массивами: фильтрация, агрегация, работа с окнами — всё компактно и быстро.
  • Готовит почву для продвинутого анализа: без NumPy невозможно строить ML-модели, симуляции и стратегии.

Pandas: инструмент №1 для анализа рыночных данных

Если NumPy — это «математика под капотом», то Pandas — это то, с чем вы работаете руками. Эта библиотека создана специально для табличных и временных данных, таких как свечи, объемы, сигналы и индикаторы. Именно Pandas используется в 90% случаев при анализе рыночной информации и лежит в основе большинства аналитических пайплайнов в Python.

Что делает Pandas незаменимым:

  • DataFrame — структура, идеально подходящая для хранения OHLCV-данных.
  • Удобная обработка: фильтрация, группировка, ресемплинг, агрегации, скользящие окна.
  • Работа со временем: таймстемпы, временные индексы, преобразование частот.
  • Гибкая интеграция: дружит с NumPy, Plotly, sklearn, API и базами данных

Установка библиотеки

pip install pandas plotly

Шаг 1. Загрузка и предварительная обработка данных

import pandas as pd

# Загрузка CSV-файла (например, исторические данные по BTC)
df = pd.read_csv('btc_data.csv')

# Конвертация времени и установка индекса
df['Open time'] = pd.to_datetime(df['Open time'])
df.set_index('Open time', inplace=True)

# Оставим только нужные столбцы
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
df = df.sort_index()
print(df.head())

Шаг 2. Анализ цен: скользящие средние и возвраты

# Скользящие средние
df['ma_5'] = df['Close'].rolling(window=5).mean()
df['ma_20'] = df['Close'].rolling(window=20).mean()

# Доходность
df['returns'] = df['Close'].pct_change()

# Оценка волатильности
df['volatility'] = df['returns'].rolling(window=10).std()

Шаг 3. Визуализация с Plotly

import plotly.graph_objects as go

fig = go.Figure()

# Цена
fig.add_trace(go.Scatter(x=df.index, y=df['Close'], name='Цена', line=dict(color='black')))

# MA
fig.add_trace(go.Scatter(x=df.index, y=df['ma_5'], name='MA 5', line=dict(dash='dot')))
fig.add_trace(go.Scatter(x=df.index, y=df['ma_20'], name='MA 20', line=dict(dash='dot')))

fig.update_layout(
    title='Цены и скользящие средние (Pandas + Plotly)',
    xaxis_title='Время',
    yaxis_title='Цена',
    template='plotly_white',
    hovermode='x unified'
)

fig.show()

Шаг 4. Простой сигнал на основе MA

# Сигнал: MA5 пересекает MA20 снизу вверх = покупка
df['signal'] = 0
df['signal'] = df['ma_5'] > df['ma_20']
df['position'] = df['signal'].diff()

Визуализация сигналов:

buy = df[df['position'] == 1]
sell = df[df['position'] == -1]

fig = go.Figure()

fig.add_trace(go.Scatter(x=df.index, y=df['Close'], name='Цена', line=dict(color='black')))
fig.add_trace(go.Scatter(x=buy.index, y=buy['Close'], name='Покупка', mode='markers',
                         marker=dict(color='green', symbol='triangle-up', size=10)))
fig.add_trace(go.Scatter(x=sell.index, y=sell['Close'], name='Продажа', mode='markers',
                         marker=dict(color='red', symbol='triangle-down', size=10)))

fig.update_layout(title='Сигналы на основе пересечения MA (Pandas + Plotly)', template='plotly_white')
fig.show()

Шаг 5. Дополнительные возможности Pandas

Фильтрация

# Все свечи с объемом больше среднего
high_volume = df[df['Volume'] > df['Volume'].mean()]

Агрегация

# Среднее закрытие по дням
daily_mean = df['Close'].resample('D').mean()

Группировка

# Средняя волатильность по неделям
weekly_vol = df['volatility'].resample('W').mean()

Вывод

Pandas — это универсальный инструмент анализа рыночных данных, и вот почему:

  • Он превращает сырые CSV-файлы в структурированные DataFrame.
  • Позволяет строить сигналы и стратегии без сложных зависимостей.
  • Является основой большинства аналитических и торговых пайплайнов.

Если вы планируете анализировать данные с биржи, запускать бэктесты, подключать API — вы будете использовать Pandas в 90% случаев.

Пример графика

Pandas и NumPy — основа анализа данных в трейдинге

Если вы всерьёз решили заняться анализом рыночных данных, бэктестингом или построением торговых стратегий — начните с NumPy и Pandas. Это не просто библиотеки — это базовые инструменты, без которых не обходится ни один аналитический пайплайн в трейдинге.

NumPy — это мотор высокопроизводительных вычислений:

  • Векторные операции без циклов,
  • Быстрая статистика и агрегаты,
  • Работа с массивами цен, объёмов, доходностей и индикаторов.

Pandas — это универсальный инструмент для работы с табличными и временными данными:

  • DataFrame — структура, в которой удобно мыслить трейдеру,
  • Скользящие окна, группировки, фильтрации,
  • Прямое взаимодействие с CSV, API и визуализациями.

Эти библиотеки не конкурируют — они работают вместе:

  • NumPy лежит в основе Pandas, обеспечивая скорость и гибкость;
  • Pandas — обёртка, которая делает данные удобными для анализа.

Освоив их, вы получите уверенный фундамент, на котором можно строить всё: от простых сигналов и индикаторов до ML-моделей и комплексных фреймворков.

Код и примеры вы, как всегда, найдёте в нашем репозитории. Подписывайтесь на профиль и не забудьте поставить ⭐ репозиторию

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

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

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

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

Подписаться

Научитесь читать графики всего за 15 минут

Заберите простой мини-гайд для быстрого старта в трейдинге. Идеально для новичков

Подтвердите согласие
Как построить среднюю скользящую Moving Average на Python
Средняя скользящая (Moving Average, MA) — это один из самых популярных индикаторов технического анализа, используемый трейдерами для определения трендов на...
Читать далее
Что такое проп трейдинг и как на нем зарабатывают
Многие трейдеры слышали про проп трейдинг, но не все понимают, что это на самом деле. Этот формат торговли становится все популярнее,...
Читать далее
Аналитика ETHUSDT на новую неделю (#46)
ETHUSDT не отстает от своих коллег по крипте и тоже движется вниз по графику, обеспечивая победу продавцам. Внимательно следим за движением...
Читать далее