Как рассчитать скользящую среднюю: пошаговая инструкция с примерами
Пройдите тест, узнайте какой профессии подходите
Для кого эта статья:
- профессиональные трейдеры и аналитики данных
- студенты и начинающие специалисты в области анализа данных
- люди, интересующиеся финансовыми рынками и методами аналитики
Каждый день финансовые рынки генерируют терабайты данных, а цены на активы скачут как хаотичная кардиограмма. Профессионалы знают: за этим шумом скрываются закономерности, которые можно выявить с помощью скользящих средних — одного из самых мощных инструментов аналитики. Но парадокс: несмотря на математическую простоту, большинство трейдеров и аналитиков применяют этот метод некорректно, теряя на этом миллионы. 📊 Пора разобраться с этим раз и навсегда.
Хотите освоить не только расчет скользящих средних, но и стать востребованным специалистом по анализу данных? На Курсе «Аналитик данных» с нуля от Skypro вы научитесь превращать сырые данные в золотые инсайты через освоение Python, SQL и визуализации. Уже через 9 месяцев вы сможете анализировать любые потоки информации и принимать стратегические решения, основанные на точных расчетах. Старт карьеры аналитика ближе, чем вы думаете!
Что такое скользящая средняя и где она применяется
Скользящая средняя (Moving Average, MA) — математический метод сглаживания временных рядов путём усреднения значений за определённый период. По сути, это фильтр, отсекающий краткосрочные колебания и выявляющий долгосрочные тенденции в данных.
Принцип работы скользящей средней прост: берётся фиксированное число последовательных точек данных (окно), вычисляется их среднее значение, затем окно "скользит" вперёд — исключается самая старая точка, добавляется новая, и среднее пересчитывается. 🔄
Области применения скользящих средних охватывают множество сфер:
- Финансовые рынки — определение трендов, сигналы для входа/выхода из позиций, расчет уровней поддержки и сопротивления
- Экономика — анализ макроэкономических показателей, прогнозирование инфляции, ВВП и индексов производства
- Метеорология — сглаживание температурных данных, выявление тенденций климатических изменений
- Цифровая обработка сигналов — устранение шумов, выделение полезного сигнала
- Маркетинг — анализ сезонности продаж, эффективности рекламных кампаний
Сфера применения | Типичный период скользящей средней | Ключевое преимущество |
---|---|---|
Трейдинг на дневных графиках | 20, 50, 200 дней | Определение трендов разной продолжительности |
Квартальная финансовая отчётность | 4 квартала (год) | Сглаживание сезонных колебаний |
Контроль качества производства | 7-30 дней | Выявление систематических отклонений |
Фармацевтические исследования | 10-14 наблюдений | Фильтрация случайных выбросов |
Анализ интернет-трафика | 7 дней | Нивелирование дневных колебаний |
Артём Валеев, руководитель отдела алгоритмической торговли
Когда я только начинал карьеру трейдера, я совершил классическую ошибку новичка — использовал скользящее среднее без понимания его механики. Разработал стратегию на пересечении 5 и 20-дневных МА, которая показала феноменальные результаты на исторических данных. Окрылённый успехом, вложил значительную сумму... и за месяц потерял 40% депозита. Потом я понял, что попал в классическую ловушку: МА запаздывает на высоковолатильном рынке, и оптимизация на исторических данных не гарантирует будущих результатов. Только после глубокого изучения математики за скользящими средними я смог разработать действительно работающие стратегии.

Математическая формула расчета скользящей средней
В основе скользящей средней лежат несложные математические принципы, но именно эта простота делает инструмент универсальным и эффективным. Рассмотрим основные формулы расчета.
Простая скользящая средняя (Simple Moving Average, SMA) — наиболее распространённый вид скользящей средней, где все точки данных имеют одинаковый вес. Рассчитывается по формуле:
SMA = (P₁ + P₂ + ... + Pₙ) / n
где:
- P₁, P₂, ..., Pₙ — значения временного ряда в соответствующие периоды
- n — период скользящей средней (количество точек для усреднения)
Например, для 5-дневной SMA цены акции берутся последние 5 значений цены закрытия, суммируются и делятся на 5.
Экспоненциальная скользящая средняя (Exponential Moving Average, EMA) придаёт больший вес недавним данным, что позволяет быстрее реагировать на изменения. Рассчитывается по формуле:
EMA = (Текущее значение × k) + (Предыдущая EMA × (1 – k))
где k = 2 / (n + 1)
где:
- k — весовой коэффициент сглаживания
- n — период EMA
Для первого расчета EMA обычно используется SMA за тот же период в качестве начальной точки.
Взвешенная скользящая средняя (Weighted Moving Average, WMA) присваивает данным линейно убывающие веса — чем старее данные, тем меньше их влияние на результат:
WMA = (Pₙ × n + Pₙ₋₁ × (n-1) + ... + P₁ × 1) / (n + (n-1) + ... + 1)
где веса в знаменателе образуют арифметическую прогрессию.
Для принятия эффективных решений на основе скользящих средних критично понимать математические нюансы их расчета. Например, EMA реагирует на резкие изменения цен быстрее, чем SMA, что делает её предпочтительной для волатильных рынков. 📈
Характеристика | SMA | EMA | WMA |
---|---|---|---|
Скорость реакции на изменения | Низкая | Высокая | Средняя |
Чувствительность к выбросам | Средняя | Высокая | Средне-высокая |
Вычислительная сложность | Низкая | Средняя | Средняя |
Запаздывание (лаг) | Высокое | Низкое | Средне-низкое |
Применимость для долгосрочного анализа | Высокая | Средняя | Средняя |
Пошаговый алгоритм вычисления скользящей средней
Расчет скользящей средней может показаться сложным, но если следовать четкому алгоритму, процесс становится интуитивно понятным. Рассмотрим пошаговую инструкцию на примере простой скользящей средней (SMA).
Шаг 1: Определите период скользящей средней (n). Этот выбор зависит от ваших аналитических целей. Для краткосрочного анализа подойдут значения 5-20, для средне- и долгосрочного — 50, 100, 200.
Шаг 2: Соберите временной ряд данных минимальной длины n элементов. Например, для 10-дневной SMA потребуется как минимум 10 последовательных значений.
Шаг 3: Рассчитайте первое значение SMA, усреднив первые n элементов ряда.
SMA₁ = (P₁ + P₂ + ... + Pₙ) / n
Шаг 4: Сместите окно на одну позицию вперед (удалите самое старое значение P₁ и добавьте новое Pₙ₊₁).
Шаг 5: Рассчитайте новое значение SMA для смещенного окна.
SMA₂ = (P₂ + P₃ + ... + Pₙ₊₁) / n
Шаг 6: Повторяйте шаги 4-5 для каждой новой точки данных, продвигаясь по временному ряду.
Для оптимизации вычислений можно использовать рекуррентную формулу:
SMA(новая) = SMA(предыдущая) + (Новое значение – Самое старое значение) / n
Это позволяет избежать пересчета всей суммы для каждого нового окна. ⚡
Для расчета экспоненциальной скользящей средней (EMA) алгоритм немного усложняется:
Шаг 1: Определите период EMA (n) и рассчитайте весовой коэффициент k = 2/(n+1).
Шаг 2: Рассчитайте начальное значение EMA как SMA для первых n точек.
Шаг 3: Для каждой новой точки данных применяйте формулу:
EMA(новая) = (Новое значение × k) + (EMA(предыдущая) × (1-k))
Для демонстрации применим алгоритм к реальным данным:
Допустим, у нас есть цены закрытия акции за 10 дней: 145.30, 146.80, 147.10, 145.90, 146.40, 148.20, 147.50, 149.10, 150.30, 149.80.
Рассчитаем 5-дневную SMA:
- Для первых 5 дней: (145.30 + 146.80 + 147.10 + 145.90 + 146.40) / 5 = 146.30
- Для дней 2-6: (146.80 + 147.10 + 145.90 + 146.40 + 148.20) / 5 = 146.88
- Для дней 3-7: (147.10 + 145.90 + 146.40 + 148.20 + 147.50) / 5 = 147.02
- Для дней 4-8: (145.90 + 146.40 + 148.20 + 147.50 + 149.10) / 5 = 147.42
- Для дней 5-9: (146.40 + 148.20 + 147.50 + 149.10 + 150.30) / 5 = 148.30
- Для дней 6-10: (148.20 + 147.50 + 149.10 + 150.30 + 149.80) / 5 = 148.98
Таким образом, получаем ряд значений 5-дневной SMA: 146.30, 146.88, 147.02, 147.42, 148.30, 148.98, который уже явно демонстрирует восходящий тренд, сглаживая ежедневные колебания цены. 📊
Тест на профориентацию от Skypro поможет определить, подходит ли вам карьера аналитика данных. Узнайте, обладаете ли вы математическим мышлением и аналитической интуицией для работы с алгоритмами вроде скользящих средних. За 5 минут тест определит ваши сильные стороны и порекомендует оптимальное направление развития в IT. Аналитика данных может стать вашим призванием!
Разновидности скользящих средних и их особенности
Кроме уже рассмотренных SMA, EMA и WMA, существует целый ряд специализированных видов скользящих средних, каждый из которых имеет уникальные свойства и области применения. 🔍
Hull Moving Average (HMA) — разработана Аланом Халлом для минимизации лага при сохранении сглаживания. HMA использует взвешенные скользящие средние с различными периодами и формулой:
HMA = WMA(2 × WMA(n/2) – WMA(n)), √n
Где n — период, а √n округляется до ближайшего целого. HMA отличается быстрой реакцией на изменения тренда и практически отсутствием ложных сигналов на боковом рынке.
Volume Weighted Moving Average (VWMA) — учитывает не только цену, но и объем торгов:
VWMA = Σ(Цена × Объем) / Σ(Объем) за период n
Особенно эффективна для анализа акций и других инструментов, где объем отражает силу движения цены.
Variable Moving Average (VMA) — адаптивная скользящая средняя, автоматически корректирующая чувствительность в зависимости от волатильности рынка. В периоды высокой волатильности становится более отзывчивой, а при низкой — более сглаженной.
Triangular Moving Average (TMA) — по сути, это двойное сглаживание, когда SMA применяется к уже рассчитанной SMA:
TMA = SMA(SMA(n), n)
TMA даёт очень плавную линию, идеальную для определения долгосрочных трендов, но с существенным запаздыванием.
Double Exponential Moving Average (DEMA) — разработана для уменьшения лага стандартной EMA:
DEMA = 2 × EMA(n) – EMA(EMA(n))
DEMA быстрее реагирует на изменения тренда, сохраняя при этом способность фильтровать рыночный шум.
Modified Moving Average (MMA) — гибрид SMA и EMA, учитывающий только новые данные для обновления предыдущего значения:
MMA = ((Текущая цена – Предыдущая MMA) × (1/n)) + Предыдущая MMA
- Преимущества: простота расчета, меньшая чувствительность к экстремальным выбросам
- Недостатки: все еще имеет значительный лаг в быстро меняющихся условиях
Kaufman Adaptive Moving Average (KAMA) — разработана Перри Кауфманом, автоматически адаптируется к рыночным условиям, ускоряясь на трендовых рынках и замедляясь при боковом движении. Использует "коэффициент эффективности" для определения силы тренда.
Arnaud Legoux Moving Average (ALMA) — относительно новая разработка, применяющая гауссово распределение весов к ценовым точкам. Обеспечивает минимальный лаг и устойчивость к рыночному шуму.
Выбор конкретного типа скользящей средней зависит от:
- Характера анализируемых данных (волатильность, цикличность)
- Временного горизонта анализа (внутридневной, долгосрочный)
- Приемлемого баланса между оперативностью сигналов и защитой от ложных срабатываний
- Вычислительных возможностей (если расчеты производятся в реальном времени)
Практические кейсы расчета в Excel и Python
Теоретическое понимание скользящих средних необходимо дополнить практическими навыками их расчета. Рассмотрим, как реализовать различные типы скользящих средних в наиболее популярных инструментах анализа данных. 💻
Расчет в Excel:
Excel остается одним из самых доступных инструментов для работы со скользящими средними. Вот пошаговая инструкция расчета SMA:
- Подготовьте данные: столбец A для дат, столбец B для цен
- В ячейке C6 (предполагая, что используете 5-дневную СМА) введите формулу:
=AVERAGE(B2:B6)
- Скопируйте формулу вниз по столбцу, чтобы получить значения для всех последующих точек
Для создания EMA используйте формулу:
// Для первого значения EMA (в ячейке D6, если используем период 5)
=AVERAGE(B2:B6)
// Для последующих значений (в D7 и далее)
=B7*(2/(5+1))+D6*(1-2/(5+1))
Альтернативный способ — использовать встроенную функцию СРЗНАЧ.ЕСЛИ для создания скользящих средних с дополнительными условиями:
=СРЗНАЧ.ЕСЛИ(B$2:B7;">=100";B$2:B7)
Эта формула рассчитает среднее только для значений больше или равных 100.
Реализация в Python:
Python с библиотекой pandas предоставляет мощные инструменты для работы со скользящими средними:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
# Загружаем данные
df = pdr.get_data_yahoo('AAPL', '2022-01-01', '2023-01-01')
# Рассчитываем простую скользящую среднюю (SMA)
df['SMA_20'] = df['Close'].rolling(window=20).mean()
# Экспоненциальная скользящая средняя (EMA)
df['EMA_20'] = df['Close'].ewm(span=20, adjust=False).mean()
# Взвешенная скользящая средняя (WMA)
# Создаем линейно убывающие веса
weights = np.arange(1, 21)
df['WMA_20'] = df['Close'].rolling(20).apply(
lambda x: np.sum(weights * x) / weights.sum(), raw=True
)
# Визуализация результатов
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Close'], label='Цена закрытия')
plt.plot(df.index, df['SMA_20'], label='SMA (20)')
plt.plot(df.index, df['EMA_20'], label='EMA (20)')
plt.plot(df.index, df['WMA_20'], label='WMA (20)')
plt.legend()
plt.title('Сравнение различных типов скользящих средних')
plt.show()
Для более сложных типов скользящих средних, таких как Hull MA:
def hull_moving_average(series, period):
half_period = int(period / 2)
sqrt_period = int(np.sqrt(period))
# WMA с периодом n/2
half_wma = series.rolling(window=half_period).apply(
lambda x: np.sum(np.arange(1, half_period + 1) * x) / np.sum(np.arange(1, half_period + 1)),
raw=True
)
# WMA с периодом n
full_wma = series.rolling(window=period).apply(
lambda x: np.sum(np.arange(1, period + 1) * x) / np.sum(np.arange(1, period + 1)),
raw=True
)
# 2 * WMA(n/2) – WMA(n)
raw_hma = 2 * half_wma – full_wma
# WMA применяется к результату выше с периодом sqrt(n)
hma = raw_hma.rolling(window=sqrt_period).apply(
lambda x: np.sum(np.arange(1, sqrt_period + 1) * x) / np.sum(np.arange(1, sqrt_period + 1)),
raw=True
)
return hma
df['HMA_20'] = hull_moving_average(df['Close'], 20)
Примеры применения скользящих средних для анализа:
Аналитическая задача | Подход с использованием скользящих средних | Код в Python |
---|---|---|
Определение тренда | Сравнение текущей цены с MA | df['Trend'] = np.where(df['Close'] > df['SMA_20'], 'Up', 'Down') |
Сигналы на пересечении | Пересечение короткой и длинной MA | df['Signal'] = np.where(df['SMA_5'] > df['SMA_20'], 1, 0) |
Определение перекупленности/перепроданности | Процентное отклонение цены от MA | df['Deviation'] = (df['Close'] / df['SMA_20'] – 1) * 100 |
Сглаживание волатильности | Двойное применение EMA | df['Smoothed'] = df['EMA_20'].ewm(span=10).mean() |
Использование правильно настроенных скользящих средних позволяет выявлять закономерности, недоступные при обычном анализе необработанных данных. При этом важно понимать ограничения метода и комбинировать его с другими аналитическими инструментами для наилучших результатов. 🚀
Понимание и грамотное применение скользящих средних — это навык, отделяющий профессиональных аналитиков от любителей. Освоив технику расчета различных типов MA и научившись интерпретировать их сигналы, вы получаете мощный инструмент для выявления трендов и закономерностей в любой области, связанной с анализом временных рядов. Помните, что даже самая совершенная математическая модель требует критического осмысления и адаптации под конкретные задачи. Именно сочетание технических знаний и аналитической интуиции позволяет извлекать максимум пользы из методов скользящих средних.