Расчет и построение скользящих средних с помощью Python

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

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

Скользящая средняя - это среднее значение последних цен закрытия n. Число последних цен закрытия n для выбора зависит от инвестора или аналитика, проводящего анализ. Обычный подход заключается в том, чтобы взять 20 дней, которые в основном представляют собой количество торговых дней в месяце.

Чем короче количество дней, тем более чувствительной будет скользящая средняя к изменениям цены. То есть, если мы выберем большее количество дней, краткосрочные колебания на индикаторе не отразятся. Однако, выбрав большое количество дней, мы можем пропустить некоторые предстоящие изменения цен из-за упущения из виду краткосрочные колебания.

Ниже мы можем увидеть, как рассчитывается простая скользящая средняя (источник Investopedia).

Как интерпретировать скользящие средние и пересечения

Финансовые аналитики и инвесторы могут использовать скользящие средние для анализа тенденций цен и прогнозирования предстоящих изменений тенденций. Во время восходящего тренда цена выше скользящих средних. В условиях нисходящего тренда цены ниже скользящих средних. Когда цена закрытия пересекает скользящую среднюю, это может рассматриваться инвесторами как возможное изменение ценового тренда.

Мы можем использовать несколько скользящих средних для разных периодов вместе. Например, у нас может быть краткосрочная скользящая средняя длительностью 20 дней и долгосрочная скользящая средняя длительностью 250 дней. Признаком изменения ценового тренда может быть ситуация, когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю:

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

Технический анализ скользящей средней с использованием Python

Теперь, когда мы понимаем, как рассчитывать и интерпретировать скользящие средние, мы готовы создать этот инструмент технического анализа с помощью Python. Наша цель - создать сценарий, в котором мы передадим любую компанию, которую хотим проанализировать, и наша функция будет:

  • Во-первых, загрузите информацию о ценах на акции из бесплатного финансового источника API с именем financialmodeliongprep.
  • Во-вторых, мы проанализируем результат API и преобразуем его в Pandas DataFrame, содержащий дату и цену закрытия за последние 1200 торговых дней.
  • В-третьих, мы будем вычислять скользящие средние за 20 и 250 дней.
  • Наконец, мы завершим наш Технический анализ скользящей средней построением цены закрытия и скользящей средней вместе на графике matplotlib.

Первое, что нам нужно сделать, это импортировать все необходимые пакеты, создать нашу функцию stockpriceanalysis и сделать http-запрос к конечной точке API для получения цен закрытия за последние несколько лет.

Мы будем использовать Apple в качестве примера. Обратите внимание, что URL-адрес конечной точки API принимает в качестве параметра тикер компании, для которой мы хотим получить данные. В нашем случае это будет аргумент, который мы передаем нашей функции (например, aapl для Apple).

Затем мы можем проанализировать ответ и сохранить цены только за последние 1200 дней Пожалуйста, ознакомьтесь со следующей статьей, если вы хотите узнать более подробно, как анализировать и обрабатывать ответ API.

Теперь у нас есть словарь в переменной stockprices, содержащий 1200 точек данных с датой и ценой закрытия. Мы конвертируем его в Pandas DataFrame с помощью метода pd.DataFrame.from_dict () и устанавливаем дату в качестве индекса.

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

def stockpriceanalysis(stock):
    stockprices = requests.get(f"https://financialmodelingprep.com/api/v3/historical-price-full/{stock}?serietype=line")
    stockprices = stockprices.json()

#Parse the API response and select only last 1200 days of prices
    stockprices = stockprices['historical'][-1200:]

#Convert from dict to pandas datafram

    stockprices = pd.DataFrame.from_dict(stockprices)
    stockprices = stockprices.set_index('date')

Если теперь мы распечатаем наш фрейм данных о ценах на акции, мы получим ответ ниже:

Отлично, теперь мы готовы рассчитать 20-дневные и 250-дневные скользящие средние. Я выбираю 20 дней в качестве краткосрочной скользящей средней, поскольку 20 торговых дней представляют более или менее один месяц. В то время как 250 торговых дней представляют собой более или менее один год. Вы можете изменить количество дней для анализа.

Скользящее среднее легко вычисляется с помощью Pandas с использованием скользящего метода и передачи окна (т.е. количества дней) в качестве аргумента:

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


def stockpriceanalysis(stock):
    stockprices = requests.get(f"https://financialmodelingprep.com/api/v3/historical-price-full/{stock}?serietype=line")
    stockprices = stockprices.json()

#Parse the API response and select only last 1200 days of prices
    stockprices = stockprices['historical'][-1200:]

#Convert from dict to pandas datafram

    stockprices = pd.DataFrame.from_dict(stockprices)
    stockprices = stockprices.set_index('date')
    #20 days to represent the 22 trading days in a month
    stockprices['20d'] = stockprices['close'].rolling(20).mean()
    stockprices['250d'] = stockprices['close'].rolling(250).mean()

Построение скользящих средних

Теперь, когда мы рассчитали цену закрытия, скользящие средние за 20 и 250 дней, мы можем построить их на одном графике с помощью matplotlib . Затем мы добавляем заголовок и уплотняем ось, чтобы улучшить макет графика.

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


def stockpriceanalysis(stock):
    stockprices = requests.get(f"https://financialmodelingprep.com/api/v3/historical-price-full/{stock}?serietype=line")
    stockprices = stockprices.json()

#Parse the API response and select only last 1200 days of prices
    stockprices = stockprices['historical'][-1200:]

#Convert from dict to pandas datafram

    stockprices = pd.DataFrame.from_dict(stockprices)
    stockprices = stockprices.set_index('date')
    #20 days to represent the 22 trading days in a month
    stockprices['20d'] = stockprices['close'].rolling(20).mean()
    stockprices['250d'] = stockprices['close'].rolling(250).mean()
  
    stockprices[['close','20d','250d']].plot(figsize=(10,4))
    plt.grid(True)
    plt.title(stock + ' Moving Averages')
    plt.axis('tight')
    plt.ylabel('Price')

Если мы запустим функцию анализа цен акций и передадим тикер акций Apple в качестве аргумента, мы получим график со скользящими средними значениями Apple и закрытием цены за последние несколько месяцев:

stockpriceanalysis('aapl')

Посмотрев на график, мы можем увидеть результат нашего технического анализа скользящей средней для Apple.

Мы можем наблюдать пересечение 20-дневной скользящей средней и последней цены закрытия. Это хороший признак того, что восходящий тренд закончился и начинается нисходящий ценовой тренд.

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

Заключение

Мы создали очень мощный инструмент для выполнения простого технического анализа с помощью Python с использованием скользящих средних за 20 и 250 дней. Скрипт можно использовать для выполнения анализа для других компаний, просто передав тикер компании в качестве аргумента нашей функции.

Рада получить ваши отзывы через мой аккаунт в Твиттере.

Вы также можете посмотреть видеоурок ниже, где я шаг за шагом объясняю код:

Первоначально опубликовано на https://codingandfun.com 29 февраля 2020 г.