Войти
Главная / Data science в трейдинге / Как построить среднюю скользящую Moving Average на Python
Хотите зарабатывать на трейдинге?

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

Подписаться

Как построить среднюю скользящую Moving Average на Python

Средняя скользящая (Moving Average, MA) — это один из самых популярных индикаторов технического анализа, используемый трейдерами для определения трендов на рынке. Она помогает сгладить колебания цен и позволяет лучше понять направление движения актива. В статье рассказываем, как построить Moving Average с помощью Python.

Что такое средняя скользящая?

Средняя скользящая — это математическая техника, которая вычисляет среднее значение цен актива за определённый период времени.

Она может быть простая (SMA — Simple Moving Average) или экспоненциальная (EMA — Exponential Moving Average).

  • SMA — рассчитывается как обычное арифметическое среднее за заданный период.
  • EMA — учитывает больше вес для более свежих данных, что делает её более чувствительной к изменениям цены.

Почему важна средняя скользящая для трейдеров?

  1. Определение тренда: Скользящая средняя помогает выявить долгосрочные и краткосрочные тренды.
  2. Подтверждение сигналов: Когда цена пересекает скользящую среднюю, это может быть сигналом о смене тренда.
  3. Фильтрация шумов: Скользящая средняя сглаживает резкие колебания цен, давая более чёткую картину движения рынка.

Пошаговое руководство: как вычислить и использовать скользящую среднюю на Python

Для примера мы будем использовать простую скользящую среднюю (SMA), но аналогичный подход можно применить для экспоненциальной (EMA).

Шаг 1: Установка необходимых библиотек

Для работы с данными и вычисления средней скользящей нам понадобятся библиотеки pandas (для обработки данных) и matplotlib (для визуализации). Установим их с помощью pip:

pip install pandas matplotlib

Шаг 2: Загрузка исторических данных

Для примера загрузим исторические данные о ценах криптовалюты с помощью библиотеки ccxt. Эта библиотека позволяет работать с данными с различных криптовалютных бирж.

Пример кода для получения исторических данных о криптовалюте с биржи Binance:

import ccxt
import pandas as pd
import matplotlib.pyplot as plt

# Подключаемся к бирже Binance
exchange = ccxt.binance()

# Получаем исторические данные по Bitcoin (BTC/USDT) за последние 30 дней
ohlcv = exchange.fetch_ohlcv('BTC/USDT', '1d', limit=30)

# Преобразуем данные в DataFrame для удобства
data = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)

# Выводим данные
print(data.head())

Этот код подключается к бирже Binance и получает последние 30 дней данных о ценах для пары BTC/USDT в формате OHLCV (Open, High, Low, Close, Volume).

Шаг 3: Расчёт средней скользящей

Теперь вычислим простую скользящую среднюю для закрывающих цен (Close) на основе данных, которые мы только что загрузили.

# Период для расчёта SMA
period = 7

# Вычисляем простую скользящую среднюю (SMA)
data['SMA'] = data['close'].rolling(window=period).mean()

# Выводим данные с вычисленной SMA
print(data[['close', 'SMA']].tail())

Здесь:

  • Мы используем метод .rolling(window=period) для создания окна из 7 дней (можно изменить на любой другой период).
  • Метод .mean() вычисляет среднее значение для каждого окна.

Шаг 4: Визуализация данных

Теперь, когда мы рассчитали скользящую среднюю, можем визуализировать её на графике. Это поможет нам лучше понять, как цена и скользящая средняя взаимодействуют.

# Строим график
plt.figure(figsize=(10,6))

# График закрывающих цен
plt.plot(data.index, data['close'], label='BTC/USDT Close Price', color='blue')

# График скользящей средней
plt.plot(data.index, data['SMA'], label=f'{period}-Day SMA', color='red', linestyle='--')

# Настройки графика
plt.title(f'BTC/USDT Price and {period}-Day SMA')
plt.xlabel('Date')
plt.ylabel('Price (USDT)')
plt.legend()

# Показать график
plt.show()

На графике будет отображаться:

  • Синие линии — цена закрытия (Close).
  • Красные пунктирные линии — простая скользящая средняя (SMA).

Шаг 5: Применение стратегий

Теперь, когда мы вычислили скользящую среднюю, можем использовать её для принятия торговых решений. Например, одна из популярных стратегий — это пересечение скользящих средних.

  • Сигнал на покупку: Когда цена пересекает скользящую среднюю снизу вверх.
  • Сигнал на продажу: Когда цена пересекает скользящую среднюю сверху вниз.

Пример простого кода для генерации сигналов:

# Создаём сигналы для покупки/продажи
data['Signal'] = 0  # Изначально нет сигнала
data['Signal'][data['close'] > data['SMA']] = 1  # Покупка, если цена выше SMA
data['Signal'][data['close'] < data['SMA']] = -1  # Продажа, если цена ниже SMA

# Выводим последние сигналы
print(data[['close', 'SMA', 'Signal']].tail())

Теперь можно анализировать, когда происходят пересечения цены и средней скользящей, и использовать их для торговли.

Как наша команда использует средние скользящие для генерации торговых сигналов

import numpy as np
import pandas as pd
import plotly.graph_objects as go

# Определение параметров скользящих средних
short_window = 20  # Быстрая средняя
long_window = 50   # Медленная средняя

# Вычисление скользящих средних
data['Short_MA'] = data['close'].rolling(window=short_window).mean()
data['Long_MA'] = data['close'].rolling(window=long_window).mean()

# Определение сигналов пересечения
data['Signal'] = 0
data.loc[data['Short_MA'] > data['Long_MA'], 'Signal'] = 1  # Покупка
data.loc[data['Short_MA'] < data['Long_MA'], 'Signal'] = -1  # Продажа

# Поиск точек пересечения
buy_signals = data[(data['Signal'] == 1) & (data['Signal'].shift(1) == -1)]
sell_signals = data[(data['Signal'] == -1) & (data['Signal'].shift(1) == 1)]

# Создание графика с Plotly
fig = go.Figure()

# График цены
fig.add_trace(go.Scatter(x=data.index, y=data['close'], mode='lines', 
                         name='Цена BTC/USDT', line=dict(color='blue')))

# Быстрая скользящая средняя
fig.add_trace(go.Scatter(x=data.index, y=data['Short_MA'], mode='lines', 
                         name=f'{short_window}-дн. MA', line=dict(color='orange')))

# Медленная скользящая средняя
fig.add_trace(go.Scatter(x=data.index, y=data['Long_MA'], mode='lines', 
                         name=f'{long_window}-дн. MA', line=dict(color='deepskyblue')))

# Добавляем точки покупки (пересечение вверх)
fig.add_trace(go.Scatter(
    x=buy_signals.index, y=buy_signals['Short_MA'], mode='markers', 
    name='Сигнал на покупку',
    marker=dict(color='green', size=20, symbol='triangle-up')
))

# Добавляем точки продажи (пересечение вниз)
fig.add_trace(go.Scatter(
    x=sell_signals.index, y=sell_signals['Short_MA'], mode='markers', 
    name='Сигнал на продажу',
    marker=dict(color='red', size=20, symbol='triangle-down')
))

# Настройки графика
fig.update_layout(
    title='BTC/USDT с сигналами пересечения MA',
    xaxis_title='Дата',
    yaxis_title='Цена (USDT)',
    legend=dict(x=0, y=1),
    template='plotly_dark'
)

# Отображение графика
fig.show()

Заключение

Средняя скользящая — это мощный инструмент для анализа трендов и поиска точек входа и выхода на рынке. В этой статье я показал, как рассчитать и визуализировать скользящие средние на Python, а также как использовать их для генерации торговых сигналов.

Однако важно помнить, что ни один индикатор не является идеальным. Средние скользящие лучше использовать в сочетании с другими инструментами анализа и учитывать фундаментальные факторы. Удачи в торговле 🚀

Код, написанный для статьи, вы можете найти на Github. Не забывайте поставить звездочку репозиторию и подписаться на мой GitHub  

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

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

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

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

Подписаться
Аналитика ETHUSDT на новую неделю (#9)
Цена продолжает держаться в рамках позапрошлой недели, покупатели победили, но кому это интересно, когда цена лежит во флэте. Торгуем на...
Читать далее
Аналитика ETHUSDT на новую неделю (#7)
Пусть в конце января Эфир и запутался в проторговке, но сейчас он вышел на истинный путь. Истинным пока остается путь...
Читать далее
🐂 Бычий рынок и медвежий рынок: что это простыми словами
Если вы только начали разбираться в инвестициях или трейдинге, вы наверняка слышали, что рынки называют «медвежьими» и «бычьими». Эти термины...
Читать далее