Время прочтения: 2 мин.
Рассмотрим применение скользящих средних на практике. Наиболее часто данный метод применяется в торговле на фондовом рынке, где с его помощью создается торговая стратегия. Язык Python идеально подходит для формирования простой и понятной стратегии.
Начнем с импортирования библиотек:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Импортируем данные, которые мы будем использовать для стратегии. Первичную информацию можно скачать с нескольких ресурсов, в данном примере используется выгрузка с https://finance.yahoo.com/ . Отмечу, что данные были взяты за период с 1.01.2018 по 06.05.2021:
data = pd.read_csv('C:/Users/……..)
Можно проверить, насколько корректно были введены данные посредством команды:
Data
Аналогичным способом можно проверять все последующие переменные и вычисления, насколько корректно вышел следующий этап.
Рассчитаем доходность выбранной ценной бумаги, которая будет выражена через значение «R», + удаляем индексы:
data['R'] = data['Close'][1:].reset_index(drop=True)/data['Close'][:-1].reset_index(drop=True) - 1
Затем создаем 2 скользящие средние, одна из них будет короткая (SMA), а другая длинная(LMA). Период, выбранный за основу вычислений скользящих (15 и 20), может меняться на любые допустимые значения:
Short = 14
Long = 21
data['SMA'] = data['Close'].rolling(Short).mean()
data['LMA'] = data['Close'].rolling(Long).mean()
Далее удаляем ненужные строки, которые возникли в ходе вычислений скользящих средних, а также последнюю, что обусловлено отсутствием доходности на следующий период времени:
data = data.drop(len(data)-1)
data = data.drop(data.index[0:Long-1])
Теперь расчитаем доходность стратегии, которая выражается в поимке тренда:
data['Policy'] = data['R']*(data['SMA']>data['LMA']) - data['R']*(data['SMA']<data['LMA'])
Осталось представить конечные данные в виде диаграммы, а также конечные значения доходности стратегии. Также для сравнения представим стратегию не активной торговли, а покупки и удержаний позиций:
plt.plot(np.cumprod(1+data['Policy']))
plt.plot(np.cumprod(1+data['R']))
pos = np.prod(1+data['Policy'])**(252/len(data['Policy'])) - 1
pos2 = np.prod(1+data['R'])**(252/len(data['R'])) - 1
print('Стратегия скользящая средняя: '+str(round(pos*100,2))+'%')
print('Стратегия покупка/удержание: '+str(round(pos2*100,2))+'%')
Итогом стал вывод, что у представленной ценной бумаги более выгодной стратегией является её покупка и удержание на протяжении n-ого количества времени, нежели стратегия скользящих средних и их отрицательная доходность.