Python

Скользящие средние и Python

Время прочтения: 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-ого количества времени, нежели стратегия скользящих средних и их отрицательная доходность.

Советуем почитать