Рубрики
Без рубрики

Python для финансов – Алгоритмический торговый учебник для начинающих

Автор оригинала: Harshit Tyagi.

Технология стала активом в финансах. Финансовые учреждения в настоящее время развиваются в технологических компаниях, а не просто проживающих финансовые аспекты поля.

Математические алгоритмы приносят инновации и скорости. Они могут помочь нам получить конкурентное преимущество на рынке.

Скорость и частота финансовых операций вместе с большими объемами данных оказали много внимания к технологии от всех крупных финансовых учреждений.

Алгоритмическая или количественная торговля является процессом проектирования и разработки торговых стратегий на основе математического и статистического анализа. Это чрезвычайно сложная область финансов.

В этом руководстве служит руководством новичка к количественным торгам с Python. Вы найдете этот пост очень полезным, если вы:

  1. Студент или кто-то, стремящийся стать количественным аналитиком (квантом) в фонд или банке.
  2. Кто-то, кто планирует начать свой собственный количественный торговый бизнес.

Мы пройдемся по следующим темам в этом посте:

  • Основы акций и торговли
  • Извлечение данных из API Quandl
  • Исследующий анализ данных на запасные цены ценообразования
  • Скользящие средние
  • Формирование торговой стратегии с Python
  • Визуализация производительности стратегии

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

Что такое запасы? Что такое торговля акциями?

Запасы

Сток – это представление доли в собственности Корпорации, которая выдается на определенной сумме. Это тип финансовой безопасности, который устанавливает вашу претензию на активы и производительность компании.

Организация или компания выпускают акции, чтобы собрать больше средств/капитала для того, чтобы масштабироваться и участвовать в большем количестве проектов. Эти акции затем публично доступны и продаются и куплены.

Фондовая торговля и торговая стратегия

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

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

Трейдеры платят деньги взамен на собственность внутри компании, надеясь сделать некоторые прибыльные сделки и продавать акции по более высокой цене.

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

Итак, большинство трейдеров следуют за планом и моделью для торговли. Это известно как торговая стратегия.

Количественные трейдеры при хедж-фондах и проектировании инвестиционных банков и разработка этих торговых стратегий и структур для их тестирования. Это требует глубокого опыта программирования и понимание языков, необходимых для создания собственной стратегии.

Python – один из самых популярных языков программирования, среди подобных C ++, Java, R и Matlab. Он принимается широко во всех доменах, особенно в науке о данных, из-за его простого синтаксиса, огромного сообщества и сторонней поддержки.

Вам понадобится знакомство с Python и статистикой, чтобы максимально использовать этот учебник. Обязательно почистите свой Python и проверьте Основы статистики Отказ

Извлечение данных из API QUANDL

Для того, чтобы извлечь данные ценообразования, мы будем использовать Api quandl Отказ Но до этого давайте создадим рабочую среду. Вот как:

  1. В вашем терминале создайте новый каталог для проекта (назовите его, однако, хотите):
mkdir 
  1. Убедитесь, что у вас есть Python 3 и Виртуальский Установлен на вашу машину.
  2. Создайте новый Python 3 Virtualenv, используя virtualenv и активировать его, используя Источник /bin/at Активировать Отказ
  3. Теперь установите Jupyter-Notebook, используя Пип и введите Пип Установите Jupyter-Notebook в терминале.
  4. Точно так же установите Пандас , quandl и numpy пакеты.
  5. Запустите свой Jupyter-Notebook от терминала.

Теперь ваш ноутбук должен работать на Localhost, как скриншот ниже:

Вы можете создать свой первый ноутбук, нажав на Новый раскрывающийся список справа. Убедитесь, что вы создали учетную запись на Quandl Отказ Следуйте указанным шагам здесь создать свой ключ API.

Как только вы все настроете, давайте погрузимся вправо в:

# importing required packages
import pandas as pd
import quandl as q

Пандас будет самым строго использованным пакетом в этом руководстве, поскольку мы будем делать много манипулирования и построению данных.

После импортируемых пакетов мы сделаем запросы к API Quandl с помощью пакета QUANDL:

# set the API key
q.ApiConfig.api_key = ""
#send a get request to query Microsoft's end of day stock prices from 1st #Jan, 2010 to 1st Jan, 2019

msft_data = q.get("EOD/MSFT", start_date="2010-01-01", end_date="2019-01-01")
# look at the first 5 rows of the dataframe

msft_data.head()

Здесь у нас есть данные о ценах Microsoft EOD в течение последних 9 лет. Все, что вам нужно было сделать, это позвонить получить Метод из пакета QUANDL и снабжать стоковую символ, MSFT и TimeFrame для необходимых вами данных.

Это было действительно просто, верно? Давайте перейдем вперед, чтобы понять и исследовать эти данные дальше.

Исследующий анализ данных на запасные цены ценообразования

С данными в наших руках, первое, что мы должны сделать, это понять, что он представляет и какую информацию он инкапсулирует.

Печать информации о DataFrame, мы можем увидеть все, что она содержит:

Как видно на скриншоте выше, DataFrame содержит dateTimeindex, что означает, что мы имеем дело со данными временных серий.

Индекс может рассматриваться как структура данных, которая помогает нам изменить или ссылаться на данные. Данные серии Time – это последовательность снимков цен, предпринятых в последовательных, одинаковых интервалах времени.

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

Важная терминология

Глядя на другие столбцы, давайте попробуем понять, что представляет каждый столбец:

  • Открыть/закрыть – захватывает цену открытия/закрытия акций
  • ADJ_OPEN/ADJ_CLOSE – скорректированная цена открытия/закрытия – цена на акции на любой данный день торговли, которые были пересмотрены, включающие какие-либо дивидендные распределения, накладки, а также другие корпоративные действия, которые произошли в любое время до открытия следующего дня.
  • Объем – это записывает количество акций, которые торгуются в любой данный день торговли.
  • Высокий/низкий – он отслеживает самую высокую и самую низкую цену акций в течение определенного дня торговли.

Это важные столбцы, на которых мы сосредоточимся на этом моменте во времени.

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

msft_data.describe()

Resample ()

Метод Pandas’s Resample () используется для облегчения контроля и гибкости на преобразовании частоты данных временных рядов. Мы можем указать временные интервалы, чтобы перезагрузить данные ежемесячно, ежеквартально или ежегодно и выполнять необходимую работу над ним.

msft_data.resample('M').mean()

Это интересный способ проанализировать показатели запасов в разных сроках.

Расчет возврата

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

У нас есть pct_Change () в нашем распоряжении для этой цели. Вот как вы можете рассчитать возвраты:

# Import numpy package
import numpy as np
# assign `Adj Close` to `daily_close`
daily_close = msft_data[['Adj_Close']]
# returns as fractional change
daily_return = daily_close.pct_change()
# replacing NA values with 0

daily_return.fillna(0, inplace=True)
print(daily_return)

Это распечатает возврат, что запас генерируется ежедневно. Умножение числа на 100 даст вам процентное изменение.

Формула, используемая в pct_Change ():

Теперь, чтобы рассчитать ежемесячные доходы, все, что вам нужно сделать:

mdata = msft_data.resample('M').apply(lambda x: x[-1])

monthly_return = mdata.pct_change()

После перескакивания данных до месяцев (для рабочих дней) мы можем получить последний день торговли в месяц, используя Применить () функция.

Применить () принимает функцию и применяет его к каждому ряду серии Panda. лямбда Функция – это анонимная функция в Python, которая может быть определена без имени, и требуется только выражения в следующем формате:

Lambda: expression

Например, лямбда х: х * 2 это функция лямбда. Здесь X – это аргумент и х * 2 Это выражение, которое оценивается и возвращается.

Скользящие средние в торговле

Концепция скользящих средств собирается создать базу для нашей торговой стратегии на основе импульсов.

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

Давайте посмотрим, как мы сможем рассчитать прокату подразумевать в окне 50 дней и сдвиньте окно на 1 день.

Rolling ()

Это волшебная функция, которая делает уловки для нас:

# assigning adjusted closing prices to 

adj_pricesadj_price = msft_data['Adj_Close']
# calculate the moving average
mav = adj_price.rolling(window=50).mean()
# print the resultprint(mav[-10:])

Вы увидите, что проката означает на окне 50 дней (около 2 месяцев). Скользящие средние помогают сгладить любые колебания или шипы данных и дать вам более гладкую кривую для эффективности компании.

Мы можем построить и увидеть разницу:

# import the matplotlib package to see the plot

import matplotlib.pyplot as plt

adj_price.plot()

Теперь вы можете построить подразделение Rolling ():

mav.plot()

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

Формулирование торговой стратегии

Здесь приходит окончательная и интересная часть: проектирование и создание торговой стратегии. Это будет пошаговое руководство по разработке простой стратегии простых движущихся стратегии MOMENTUM.

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

Стратегия SMAC – это известная схематическая импульсная стратегия. Это длительная стратегия. Импульс, здесь, общее возвращение накладки, включая дивиденды за последние N месяцы. Этот период N месяцы называют сроком обратного списка.

Существует 3 основных типа периодов обратной связи: краткосрочный, промежуточный и длительный срок. Нам нужно определить 2 разных периода обратной связи определенных временных рядов.

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

Теперь давайте посмотрим, как будет выглядеть код этой стратегии:

# step1: initialize the short and long lookback periods

short_lb = 50long_lb = 120
# step2: initialize a new DataFrame called signal_df with a signal column

signal_df = pd.DataFrame(index=msft_data.index)signal_df['signal'] = 0.0
# step3: create a short simple moving average over the short lookback period
signal_df['short_mav'] = msft_data['Adj_Close'].rolling(window=short_lb,                                     min_periods=1, center=False).mean()
# step4: create long simple moving average over the long lookback period

signal_df['long_mav'] = msft_data['Adj_Close'].rolling(window=long_lb, min_periods=1, center=False).mean()
# step5: generate the signals based on the conditional statement

signal_df['signal'][short_lb:] = np.where(signal_df['short_mav'][short_lb:] > signal_df['long_mav'][short_lb:], 1.0, 0.0)   
# step6: create the trading orders based on the positions column

signal_df['positions'] = signal_df['signal'].diff()signal_df[signal_df['positions'] == -1.0]

Посмотрим, что здесь происходит. Мы создали 2 периода обрабка. Короткий период обрабка Short_lb 50 дней, а более длительный период обратной связи для длительного скользящего среднего определен как long_lb 120 дней.

Мы создали новый DataFrame, который предназначен для захвата сигналов. Эти сигналы генерируются всякий раз, когда короткие скользящие средние пересекают длительное скользящее среднее, используя NP. Где Отказ Присваивает 1.0 для правды и 0,0 Если условие выйдет на ложь.

позиции Столбцы в DataFrame сообщит нам, если есть сигнал покупки или сигнал продажи, или оставаться поставленным. Мы в основном вычисляем разницу в столбце сигналов из предыдущей строки, используя Различать Отказ

И там у нас есть наша стратегия, реализованная всего за 6 шагов, используя Pandas. Легко, не так ли?

Теперь, давайте попробуем визуализировать это, используя matplotlib. Все, что нам нужно сделать, это инициализировать рисунок сюжета, добавьте отрегулированные цены закрытия, короткие и длинные скользящие средние значения на сюжет, а затем построить сигналы покупки и продажи, используя столбец позиций в Signal_df выше:

# initialize the plot using plt
fig = plt.figure()
# Add a subplot and label for y-axis

plt1 = fig.add_subplot(111,  ylabel='Price in $')
msft_data['Adj_Close'].plot(ax=plt1, color='r', lw=2.)
# plot the short and long lookback moving averages
signal_df[['short_mav', 'long_mav']].plot(ax=plt1, lw=2., figsize=(12,8))
# plotting the sell signals

plt1.plot(signal_df.loc[signal_df.positions == -1.0].index,                         signal_df.short_mav[signal_df.positions == -1.0],'v',                     markersize=10, color='k')
# plotting the buy signals

plt1.plot(signal_df.loc[signal_df.positions == 1.0].index,          signal_df.short_mav[signal_df.positions == 1.0],         '^', markersize=10, color='m')         # Show the plotplt.show()

Запуск вышеуказанной ячейки в ноутбуке Jupyter даст сюжет, как приведенный ниже:

Теперь вы можете ясно видеть, что когда синяя линия (короткое скользящее среднее) поднимается вверх и за пределы оранжевой линии (длительное скользящее среднее), есть розовый маркер вверх, указывающий на сигнал покупки.

Сигнал продажи обозначается черным нисходящим маркером, где есть падение cort_mav ниже long_mav Отказ

Визуализируйте производительность стратегии на quantopian

Контиппиан Является ли платформа для молнии на молнии, которые используют случаи многообразия. Вы можете написать свои собственные алгоритмы, доступ к бесплатным данным, откройте свою стратегию, способствуют сообществу, и сотрудничайте с Quantopian, если вам нужен капитал.

Мы написали алгоритм, чтобы отказаться от нашей стратегии SMA, а вот результаты:

Вот объяснение вышеуказанных метрик:

  • Общая прибыль: общий процент доходности портфеля с начала до конца BASTTEST.
  • Конкретный возврат: разница между полной доходностью портфеля и общим возвратом.
  • Обычное возвращение: возвраты, которые относятся к общим факторам риска. Существует 11 сектор и 5 факторов риска риска стилей, которые составляют эти возвращения. Диаграммы экспозиции и стиля сектора в разделе риска в разделе «Риск» предоставляют более подробную информацию о этих факторах.
  • Шарп: 6-месячное соотношение прокатки шарика. Это мера скорректированных на рисках инвестиций. Он рассчитывается путем деления избыточного доходности портфеля в отношении свободной от риска скорости стандартного отклонения портфолио.
  • Max Drawdown: самая большая капля всего перемещения пикового корыта в истории портфеля.
  • Волатильность: стандартное отклонение доходности портфеля.

Похлопайте себя на спину, как вы успешно реализовали вашу количественную торговую стратегию!

Куда пойти отсюда?

Теперь, когда ваш алгоритм готов, вам нужно будет откроить результаты и оценить Метрики, картирование риска участвует в стратегии и акции. Опять же, вы можете использовать Blueshift и Контиппиан Чтобы узнать больше о Backtesting и Trading стратегий.

Дальнейшие ресурсы

Quantra это девичество квантонсти. С ряда бесплатных и платных курсов экспертов в этой области Quantra предлагает тщательное руководство по кучу основных и продвинутых торговых стратегий.

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

Бесплатные ресурсы

Чтобы узнать больше о торговых алгоритмах, проверьте эти блоги:

  • Квантование – Они охватывают широкий спектр алгоритмов откровения, руководства для начинающих и многое другое.
  • Инвестопедия – Все, что вы хотите знать об инвестициях и финансах.
  • Квантование – Детальные математические объяснения алгоритмов и их плюсы и минусы.

Уоррен Шведский стол говорит, что он читает около 500 страниц день , что следует сказать вам, что чтение важно для того, чтобы добиться успеха в области финансов.

Отправляйтесь на это путешествие торговли, и вы можете вести жизнь, полную волнения, страсти и математики.

С этим каналом я планирую развернуть пару Серия, покрывающая все данные науки о данных Отказ Вот почему вы должны быть подписаны на Канал :

Далее вы можете связаться со мной на Twitter или LinkedIn Отказ