Скользящие средние
Создайте SMA и EMA и посмотрите, как меняется окно расчёта.
Линия закрытия следует движению каждой свечи. Усреднение нескольких последовательных закрытий даёт более гладкую линию. Здесь вы создадите две скользящие средние по десяти свечам.
Вычисление среднего
Простое среднее трёх значений равно их сумме, делённой на три. Для 100, 103 и 101:
(100 + 103 + 101) / 3 = 101.333...Размер окна постоянен, но оно движется вместе со свечами. На следующей свече в окно из трёх значений входит новое закрытие, а старейшее выходит.
При новом закрытии 105 следующее среднее уже (103 + 101 + 105) / 3, то есть 103. Начальная цена 100 в окно не входит.
Среднему по десяти свечам нужны текущая и предыдущие девять цен закрытия. Не текущая плюс ещё десять: десять означает общее число значений.
Функции ta
Пространство имён ta содержит готовые расчёты. ta.sma(close, 10) возвращает простое скользящее среднее десяти закрытий. SMA расшифровывается как «simple moving average».
Два аргумента:
close: усредняемый источник;10: размер окна в свечах.
На первых девяти свечах ещё нет десяти закрытий. SMA там равна na, первое допустимое значение появляется на десятой. Этот начальный этап называют прогревом.
Размер окна не является длительностью в секундах. Десять дневных и десять часовых свечей охватывают разные периоды.
SMA и EMA рядом
EMA, экспоненциальная скользящая средняя, придаёт больший вес свежим значениям. ta.ema(close, 10) тоже использует длину десять свечей, но другую формулу.
EMA начинается с простого среднего первого полного окна. При длине десять обе линии появляются на десятой свече. Затем EMA добавляет к прошлому значению долю разницы между новой ценой и прошлой EMA. Доля равна 2 / (10 + 1).
Создайте moving_averages.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, plot, script, ta
@script.indicator("Two Moving Averages", overlay=True)
def main():
simple_average = ta.sma(close, 10)
exponential_average = ta.ema(close, 10)
plot(simple_average, "SMA 10", color=color.blue, linewidth=2)
plot(exponential_average, "EMA 10", color=color.orange, linewidth=2)Запустите на демонстрационных данных. Синяя SMA и оранжевая EMA появятся рядом со свечами. Просмотрите участки резкой смены направления цены. Средние могут реагировать с разной скоростью.

Среднее вычисляется по прошлым значениям. Гладкая форма сама по себе не говорит, куда пойдёт цена.
Почему считаем на каждой свече?
ta.sma и ta.ema используют состояние между последовательными выполнениями. В примере оба вызова выполняются на каждой свече.
Позже мы напишем код, выполняющий действие только в некоторых случаях: например, отметку при закрытии выше среднего. Это объясняется в главе об условиях и отметках.
И тогда считайте среднее на каждой свече, а уже потом решайте, как его использовать. Если вызывать ta.sma только на растущих свечах, расчёт пропустит остальные, и результат может отличаться от среднего по всей последовательности. Сейчас следите, чтобы оба расчёта выполнялись всегда.
Для этих линий собственным переменным не нужна Series: мы рисуем текущие значения и не используем simple_average[1]. Для прямого индексирования истории собственной переменной позже потребуется Series[float].
Длинное и короткое окно
Увеличение длины включает больше прежних цен. Линия обычно становится глаже и позже следует изменению цены. При меньшей длине свежие движения влияют сильнее.
Попробуйте на одних данных:
- Запустите две средние длиной десять и найдите узнаваемый разворот.
- Измените длину обоих вызовов на 30.
- Измените названия на
SMA 30иEMA 30. - Запустите снова и найдите тот же момент.
Заголовок меняется потому, что "SMA 10" лишь подпись. Его число не меняет расчёт. Окном управляет второй аргумент вызова.
Попробуйте самостоятельно
Создайте две простые средние: по пяти и двадцати свечам. Короткая синяя, длинная оранжевая. Задайте подходящие подписи.
Решение
Замените расчёты и рисование в main():
fast_average = ta.sma(close, 5)
slow_average = ta.sma(close, 20)
plot(fast_average, "SMA 5", color=color.blue, linewidth=2)
plot(slow_average, "SMA 20", color=color.orange, linewidth=2)У длины пять отсутствуют первые четыре значения, у двадцати первые девятнадцать. После прогрева обе линии используют один ряд закрытий с разными окнами.
Проверьте окно
SMA из трёх свечей легко проверить вручную. Установите длину три, выберите три закрытия подряд и найдите среднее. На третьей свече график должен показывать его. У первых двух полного окна нет.