Учебник: Как Использовать Python Для Алгоритмической Торговли Акциями. Часть 2



Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

Продолжаем публиковать адаптацию
Руководства по DataCamp по использованию Python для разработки финансовых приложений.

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

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

Блокнот Jupyter этого руководства можно скачать.

Здесь .



Общий финансовый анализ: расчет прибыли

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

Вычислить такие изменения легко с помощью функции pct_change(), включенной в пакет Pandas.

  
  
  
  
  
  
  
  
   

# Import `numpy` as `np` import numpy as np # Assign `Adj Close` to `daily_close` daily_close = aapl[['Adj Close']] # Daily returns daily_pct_change = daily_close.pct_change() # Replace NA values with 0 daily_pct_change.fillna(0, inplace=True) # Inspect daily returns print(daily_pct_change) # Daily log returns daily_log_returns = np.log(daily_close.pct_change()+1) # Print daily log returns print(daily_log_returns)

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

Знать прибыль за день — это хорошо, но что, если нам нужно посчитать эту цифру за месяц или даже квартал? В таких случаях вы можете использовать функцию resample(), которую мы рассмотрели в последней части урока:

# Resample `aapl` to business months, take last observation as value monthly = aapl.resample('BM').

apply(lambda x: x[-1]) # Calculate the monthly percentage change monthly.pct_change() # Resample `aapl` to quarters, take the mean as value per quarter quarter = aapl.resample("4M").

mean() # Calculate the quarterly percentage change quarter.pct_change()

Использовать pct_change() удобно, но в этом случае сложно понять, как именно рассчитывается ежедневный доход. В качестве альтернативы вы можете использовать функцию Pandas под названием «shift()».

Затем вам нужно разделить значения daily_close на daily_close.shift(1) -1. При использовании этой функции значения NA будут расположены в начале результирующего кадра данных.

Для справки, расчет ежедневного изменения цены акции производится по формуле:

Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

, Где p — цена, t — время (в нашем случае день), r — доход. Вы можете создать график распределения daily_pct_change:

# Import matplotlib import matplotlib.pyplot as plt # Plot the distribution of `daily_pct_c` daily_pct_change.hist(bins=50) # Show the plot plt.show() # Pull up summary statistics print(daily_pct_change.describe())



Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

Результат выглядит симметричным и нормально распределенным: ежедневное изменение цены составляет около интервала 0,00. Следует понимать, что для корректной интерпретации результатов гистограммы необходимо использовать функцию описать(), примененную к daily_pct_c. В этом случае будет видно, что среднее значение также близко к интервалу 0,00, а стандартное отклонение составляет 0,02. Вам также необходимо посмотреть на процентили, чтобы понять, какая часть данных выходит за пределы -0,010672, 0,001677 и 0,014306. Индекс общая дневная норма прибыли полезен для определения стоимости инвестиций через регулярные промежутки времени.

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

# Calculate the cumulative daily returns cum_daily_return = (1 + daily_pct_change).

cumprod() # Print `cum_daily_return` print(cum_daily_return)

Здесь вы снова можете использовать Matplotlib для быстрого построения графика cum_daily_return. Вам просто нужно добавить функциюplot() и, при необходимости, определить размер графика с помощью figsize.

# Import matplotlib import matplotlib.pyplot as plt # Plot the cumulative daily returns cum_daily_return.plot(figsize=(12,8)) # Show the plot plt.show()



Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

Это довольно просто.

Теперь, если вам нужно проанализировать не дневной доход, а ежемесячный доход, вам следует вернуться к функции resample() — с ее помощью вы сможете привести cum_daily_return к месячным значениям:

# Resample the cumulative daily return to cumulative monthly return cum_monthly_return = cum_daily_return.resample("M").

mean() # Print the `cum_monthly_return` print(cum_monthly_return)

Умение рассчитывать доходность — полезный навык, но на практике эти цифры редко несут ценную информацию, если вы не сравните их с доходностью других акций.

Вот почему примеры часто сравнивают две или более акций друг с другом.

Чтобы сделать это, вам сначала нужно загрузить больше данных — в нашем случае с Yahoo! Финансы.

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

В приведенном ниже примере функция data() принимает тикер для получения данных от начальной до конечной даты и возвращает результат функции get().

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

Приведенный ниже код загружает данные акций Apple, Microsoft, IBM и Google в один общий фрейм данных:

def get(tickers, startdate, enddate): def data(ticker): return (pdr.get_data_yahoo(ticker, start=startdate, end=enddate)) datas = map (data, tickers) return(pd.concat(datas, keys=tickers, names=['Ticker', 'Date'])) tickers = ['AAPL', 'MSFT', 'IBM', 'GOOG'] all_data = get(tickers, datetime.datetime(2006, 10, 1), datetime.datetime(2012, 1, 1))

Примечание : Этот код также использовался в руководстве.

использование Pandas для финансов , позже он был изменен.

Кроме того, поскольку в настоящее время существуют проблемы с загрузкой данных с Yahoo! Финансы, для корректной работы возможно придется скачать пакет fix_yahoo_finance - инструкцию по установке можно найти Здесь или в Блокнот Jupyter для этого урока .

Вот результат запуска этого кода:

Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

Этот большой фрейм данных можно использовать для рисования интересных графиков:

# Import matplotlib import matplotlib.pyplot as plt # Isolate the `Adj Close` values and transform the DataFrame daily_close_px = all_data[['Adj Close']].

reset_index().

pivot('Date', 'Ticker', 'Adj Close') # Calculate the daily percentage change for `daily_close_px` daily_pct_change = daily_close_px.pct_change() # Plot the distributions daily_pct_change.hist(bins=50, sharex=True, figsize=(12,8)) # Show the resulting plot plt.show()



Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

Еще одним полезным графиком для финансового анализа является матрица рассеяния.

Вы можете получить его, используя библиотеку pandas. Вам нужно будет добавить в код функцию scatter_matrix().

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

Также с помощью аргумента альфа вы можете установить прозрачность, а с помощью figsize — изменить размер графика.



# Import matplotlib import matplotlib.pyplot as plt # Plot a scatter matrix with the `daily_pct_change` data pd.scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(12,12)) # Show the plot plt.show()



Учебник: Как использовать Python для алгоритмической торговли акциями.
</p><p>
 Часть 2

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

pd.plotting.scatter_matrix()).

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

Продолжение следует….



Другие материалы по финансам и фондовому рынку от ИТИ Капитал :

Теги: #финансы #разработка #python #торговля акциями #python
Вместе с данным постом часто просматривают: