Мы уже говорили о том, что в мире высокочастотного трейдинга лучших результатов достигают те, у кого есть не только самое эффективное, но и самое быстрое программное и аппаратное обеспечение.
Некоторые из самых популярных языков программирования в сфере финансов включают R и Python, а также широко используются C++, C# и Java. Опубликовано на сайте DataCamp. руководство мы говорим о том, как начать использовать Python для создания финансовых приложений — представляем вам серию статей, адаптированных из глав этого материала.
Структура управления:
- Первая часть предназначена для новичков на рынке, в ней будет рассказано о структуре финансовых рынков, акциях и торговых стратегиях, данных временных рядов, а также о том, что вам понадобится для начала разработки.
- В части 2 будет представлено введение в работу с данными временных рядов и инструментами финансового анализа, такими как волатильность и скользящие средние, с использованием библиотеки Pandas Python.
- Затем мы перейдем к фактической разработке простой стратегии импульсной торговли.
- В четвертой части мы поговорим о том, как протестировать стратегию на исторических данных.
- Наконец, будут рассмотрены вопросы оптимизации стратегии для повышения ее эффективности, а также оценки ее производительности и надежности.
Введение: простым языком о структуре финансового сектора
Прежде чем погрузиться в мир торговых стратегий, имеет смысл коснуться некоторых основных понятий.Однако это не значит, что то, о чем пойдет речь ниже, полностью предназначено для новичков.
Было бы здорово, если бы вы сначала прошли курс по использованию Python для работы с данными , а также иметь представление о том, как работать со списками и пакетами Python, и хотя бы на базовом уровне знакомы с NumPy и Pandas.
Акции и торговля на бирже
Когда компания хочет продолжить развитие бизнеса, запустить новые проекты или расшириться, она может использовать акции в качестве инструмента финансирования.Акция представляет собой долю в собственности компании; акции обмениваются на деньги.
Акции можно покупать и продавать: участники таких сделок совершают сделки с уже имеющимися, ранее выпущенными акциями.
Цена, по которой будет продана или куплена та или иная акция, может постоянно меняться независимо от эффективности деятельности компании, выпустившей акции: все определяется спросом и предложением.
Важно понимать разницу между акциями и, например, облигациями (облигациями), которые используются для привлечения заемных средств.
Когда речь идет о торговле, можно рассматривать не только продажу и покупку акций — сделка может быть заключена для различных активов, которые могут включать как финансовые инструменты, так и, например, драгоценные металлы или ресурсы, такие как нефть.
Приобретая акции, инвестор получает определенную долю в компании, от которой он может в будущем получить финансовую выгоду, продав эту долю.
Стратегии могут быть разными: есть длинные сделки (long), заключенные в надежде на дальнейший рост акций, и короткие сделки, когда инвестор предполагает, что акции подешевеют, поэтому продает акции в надежде их «выкупить».
в будущем по более низкой цене.
Разработка торговой стратегии включает в себя несколько этапов, что аналогично, например, построению моделей машинного обучения: сначала нужно сформулировать стратегию и описать ее в формате, позволяющем запустить ее на компьютере, затем необходимо протестировать работоспособность полученной программы, оптимизировать ее, а затем оценить эффективность и надежность работы.
Торговые стратегии обычно тестируются с помощью бэктестинга: это подход, при котором стратегия «прогоняется» на исторических торговых данных — на основе этого программа генерирует сделки.
Это позволяет понять, принесла ли бы такая стратегия доход, учитывая развитие ситуации на рынке, наблюдавшееся в прошлом.
Таким образом, вы сможете предварительно оценить перспективность стратегии в торговле в реальном времени.
В то же время нет никакой гарантии, что хорошие результаты на исторических данных будут повторены при работе на реальном рынке.
Данные временных рядов
Временной ряд — это последовательность цифровых данных, полученных через последовательные равные промежутки времени.В финансах такие ряды используются для отслеживания движения цен за определенный период времени, регистрируемого через регулярные промежутки времени.
Вот как это выглядит:
Даты расположены по оси X, а цена – по оси Y. «Последовательные равные промежутки времени» в данном случае означает, что по оси времени даты расположены с двухнедельными интервалами: можно сравнить 7.03.2005 и 31.03.2005, а также 05.04.2005 и 4 /19/2005 ( здесь даты пишутся в американском формате, где сначала идет месяц, а потом день ).
Однако финансовые данные обычно включают не два параметра (цену и дату), а пять – помимо размера торгового периода, это цена открытия торгового периода, наивысшая и минимальная цена внутри него, а также цена открытия торгового периода.
цена на момент закрытия периода.
Это означает, что если мы рассмотрим дневной период, то анализ данных даст нам информацию о том, на каком уровне была цена в начале и в конце торгов в выбранный день, а также какова была максимальная и минимальная цена во время торговли.
Выше были описаны основные понятия, которые вам необходимо знать, чтобы продолжить изучение данного руководства.
Основы Python для финансов: Pandas
Одним из самых популярных инструментов при использовании Python для разработки финансовых приложений является пакет Pandas. Он нужен в самом начале, но по мере углубления в процесс разработки вам также понадобятся такие пакеты, как NumPy, SciPy, Matplotlib. Во-первых, давайте сосредоточимся на Pandas и его применении для анализа временных рядов.Ниже мы поговорим о том, как импортировать данные, анализировать и манипулировать ими с помощью этого пакета.
Импортировать финансовые данные
Пакет pandas-datareader позволяет получать данные из таких источников, как Google, Yahoo! Финансы или Всемирный банк – более подробная информация о доступных источниках данных написана в документация .В этом руководстве рассматривается получение данных из Yahoo! Финансы.
Для начала вам необходимо установить последнюю версию пакета с помощью pip:
Приводятся инструкции по установке версии, находящейся в разработке.pip install pandas-datareader
Здесь .
import pandas_datareader as pdr
import datetime
aapl = pdr.get_data_yahoo('AAPL',
start=datetime.datetime(2006, 10, 1),
end=datetime.datetime(2012, 1, 1))
Не так давно произошли изменения в API Yahoo, поэтому, чтобы начать работу с библиотекой самостоятельно, необходимо установить исправления, которые позволят дождаться официального патча.
Проблема описана более подробно Здесь .
Однако для этого урока данные были загружены заранее, поэтому проблем с их изучением у вас не возникнет.
Также важно понимать, что хотя pandas-datareader — удобный инструмент для загрузки данных, он не единственный для Python. Вы также можете использовать такие библиотеки, как Quandl, которые позволяет получить данные от сервиса Google Finance: import quandl
aapl = quandl.get("WIKI/AAPL", start_date="2006-10-01", end_date="2012-01-01")
Многие также знают, что Excel очень популярен в сфере финансов для анализа данных.
Для удобства дальнейшей работы вы можете интегрировать этот инструмент с Python (подробнее связь ).
Работа с данными временных рядов
Мы использовали pandas_datareader для импорта данных.В результате возник объект aapl — это DataFrame, то есть двумерная именованная структура данных со столбцами потенциально разных типов.
Первое, что нужно сделать при работе с таким фреймом, — это запустить функции head() и Tail(), чтобы просмотреть первый и последний столбцы фрейма данных.
Вы можете использовать функцию описать(), чтобы получить полезную статистическую сводку загруженных данных.
Пример этого кода можно найти по адресу страница исходного материала .
Данные содержат четыре столбца с ценой открытия и закрытия торгового периода, а также максимальной и минимальной ценой — мы смотрим на дневные интервалы и акции Apple. Мы также получаем два дополнительных столбца: Volume и Adj Close. Первый из них используется для записи количества акций, которые были проданы в торговый день.
Второй столбец — «скорректированная» цена закрытия, то есть все действия с акциями, которые можно было совершить до открытия следующего торгового дня, были добавлены к цене закрытия периода.
Если вам нужно сохранить данные в CSV-файл, вы можете сделать это с помощью функции to_csv(), а прочитать файл можно с помощью read_csv() — это полезно для ситуаций, когда источник данных меняется и доступ к нему временно теряется .
import pandas as pd
aapl.to_csv('data/aapl_ohlc.csv')
df = pd.read_csv('data/aapl_ohlc.csv', header=0, index_col='Date', parse_dates=True)
После базового анализа загруженных данных пора двигаться дальше.
Для этого вы можете, например, просмотреть индексы и столбцы, выбрав, например, последние десять строк определенного столбца.
Это называется подмножеством, поскольку берется только небольшое подмножество доступных данных.
Результирующее подмножество представляет собой строку, то есть одномерный именованный массив.
Чтобы просмотреть индекс и столбцы данных, вам следует использовать атрибуты index и columns. Затем вы можете выбрать подмножество последних десяти наблюдений в столбце.
Для выделения этих значений следует использовать квадратные скобки.
Последнее значение помещается в переменную ts, а его тип проверяется с помощью функции type().
# Inspect the index
aapl.index
# Inspect the columns
aapl.columns
# Select only the last 10 observations of `Close`
ts = aapl['Close'][-10:]
# Check the type of `ts`
type(ts)
Использовать квадратные скобки удобно, но это не самый распространенный способ работы с Pandas. Поэтому также стоит рассмотреть функции loc() и iloc(): первая используется для индексации по меткам, а вторая — для позиционной индексации.
На практике это означает, что вы можете передать метку строки, например 2007 или 2006-11-01, в функцию loc(), а целые числа, такие как 22 или 43, передаются в функцию iloc().
# Inspect the first rows of November-December 2006
print(aapl.loc[pd.Timestamp('2006-11-01'):pd.Timestamp('2006-12-31')].
head()) # Inspect the first rows of 2007 print(aapl.loc['2007'].
head())
# Inspect November 2006
print(aapl.iloc[22:43])
# Inspect the 'Open' and 'Close' values at 2006-11-01 and 2006-12-01
print(aapl.iloc[[22,43], [0, 3]])
Если вы внимательно посмотрите на результаты процедуры разделения, то увидите, что в данных отсутствуют определенные дни.
Дальнейший анализ закономерности покажет, что обычно не хватает двух-трех дней.
Это выходные и праздничные дни, во время которых биржевые торги не проводятся.
Помимо индексации, есть несколько способов узнать больше о ваших данных.
Например, вы можете попытаться создать выборку из 20 строк данных, а затем переформатировать их так, чтобы приложение стало ежемесячным значением, а не ежедневным.
Это можно сделать с помощью функций sample() и resample(): # Sample 20 rows
sample = aapl.sample(20)
# Print `sample`
print(sample)
# Resample to monthly level
monthly_aapl = aapl.resample('M').
mean()
# Print `monthly_aapl`
print(monthly_aapl)
Прежде чем перейти к визуализации данных и финансовому анализу, вы можете начать рассчитывать разницу между ценами открытия и закрытия торгового периода.
Эту арифметическую операцию можно проделать с помощью Pandas — нужно вычесть значения столбца Open данных приложения из столбца Close. Или, другими словами, вычтите aapl.Close из aapl.Open. Полученный результат будет сохранен в новом столбце кадра данных aapl с именем diff, который можно удалить с помощью функции del: # Add a column `diff` to `aapl`
aapl['diff'] = aapl.Open - aapl.Close
# Delete the new `diff` column
del aapl['diff']
Полученные абсолютные значения уже могут быть полезны при разработке финансовой стратегии, но обычно требуется более глубокий анализ, например, процент роста или снижения цены той или иной акции.
Визуализация данных временных рядов
Помимо анализа данных с использованием функций head(), Tail() и индексации, также возможна визуализация данных.Благодаря интеграции Pandas с инструментом построения графиков Matplotlib это можно сделать довольно легко.
Вам просто нужно использовать функциюplot() и передать ей соответствующие параметры.
Кроме того, если вы добавите параметр сетки, полученный график будет наложен на сетку.
# Import Matplotlib's `pyplot` module as `plt`
import matplotlib.pyplot as plt
# Plot the closing prices for `aapl`
aapl['Close'].
plot(grid=True)
# Show the plot
plt.show()
Этот код создает такой график:
Следующая часть руководства будет посвящена финансовому анализу данных временных рядов с использованием Python. Продолжение следует….
Другие материалы по финансам и фондовому рынку от ИТИ Капитал :
- Аналитика рынка и обзоры
- Фьючерсы, индексы и IPO: как на самом деле работают биржи и зачем они нужны
- Топ-10 книг для понимания структуры фондового рынка
- Фьючерсы, индексы и IPO: как на самом деле работают биржи и зачем они нужны
- Инфраструктура российского рынка ценных бумаг (краткая образовательная программа)
- How-to: роботы и API брокерской торговой системы
-
Расширение С Забавной Историей
19 Oct, 24 -
Защита Android-Приложений От Взлома
19 Oct, 24 -
Основы Верстки Нативных Приложений Android
19 Oct, 24