Алгоритмическая торговля с использованием Python
В этой статье вы узнаете простую торговую стратегию, используемую для определения того, когда покупать и продавать акции, используя язык программирования Python. В частности, вы узнаете, как выполнять алгоритмическую торговлю. Чрезвычайно сложно предсказать направление движения фондового рынка, но в этой статье я попробую. Даже людям с хорошим пониманием статистики и вероятностей это нелегко.
Алгоритмическая торговля - это процесс выполнения заказов с использованием автоматических и предварительно запрограммированных торговых инструкций для учета таких переменных, как цена, время и объем. - investopedia.com
Python - один из самых популярных языков программирования для финансов, наряду с другими, такими как C # и R. Торговая стратегия, которая будет использоваться в этой статье, называется пересечение двойных скользящих средних.
Пересечение двойной скользящей средней происходит, когда краткосрочная средняя пересекает долгосрочную. Этот сигнал используется для определения того, что импульс смещается в сторону краткосрочной средней. Сигнал на покупку генерируется, когда краткосрочная средняя пересекает долгосрочную среднюю и поднимается выше нее, в то время как сигнал на продажу запускается, когда краткосрочная средняя пересекает долгосрочную среднюю и опускается ниже нее. - datacamp.com
Пожалуйста, оставьте аплодисменты над этой статьей, если вы найдете ее полезной или интересной. Я также хотел бы узнать некоторые из ваших торговых стратегий в разделе ответов.
Если вы предпочитаете не читать эту статью и хотите ее видеопрезентацию, вы можете проверить Видео YouTube ниже. В нем подробно рассказывается обо всем, что описано в этой статье, и он поможет вам легко начать программировать, даже если на вашем компьютере не установлен язык программирования Python. Или вы можете использовать оба в качестве дополнительных материалов для обучения!
Если вам интересно узнать больше о машинном обучении и алгоритмической торговле, вы можете прочитать Практическое машинное обучение для алгоритмической торговли: разработка и реализация инвестиционных стратегий на основе интеллектуальных алгоритмов, которые учатся на данных с использованием Python. Книга покажет вам, как реализовать алгоритмы машинного обучения для построения, обучения и проверки алгоритмических моделей. Он также покажет вам, как создать свой собственный процесс алгоритмического проектирования для применения вероятностных подходов машинного обучения к торговым решениям, а книга покажет вам, как разрабатывать нейронные сети для алгоритмической торговли для выполнения прогнозирования временных рядов и интеллектуальной аналитики.
Хорошо, теперь, когда все это в порядке, давайте приступим к программированию!
Начать программирование:
Начну эту программу с описания.
#Description: This program uses the dual moving average crossover to determine when to buy and sell stock.
Импортируйте зависимости.
import pandas as pd import numpy as np from datetime import datetime import matplotlib.pyplot as plt plt.style.use('fivethirtyeight')
Затем загрузите данные. Поскольку я использую веб-сайт Google для программирования, мне нужно использовать Google для загрузки файла данных.
#Load the data from google.colab import files # Use to load data on Google Colab uploaded = files.upload() # Use to load data on Google Colab
Файл, который я загружаю, представляет собой CSV-файл с именем «AAPL.csv», который содержит данные (Дата, Цена открытия, Максимальная цена, Цена закрытия, Скорректированная цена закрытия и Объем) для цены акций Apple Corporation с 2 октября 2006 г. до 30 декабря 2011 г.
Затем сохраните данные в переменной.
#Store the data into the df variable AAPL = pd.read_csv('AAPL.csv')
Теперь покажите данные.
#Show the dataframe AAPL
Создайте и покажите новый фрейм данных, который содержит скорректированную цену закрытия акций.
df = pd.DataFrame() df['AAPL'] = AAPL['Adj Close Price'].values df
Визуально покажите цену акции.
# Visually Show The Stock/Portfolio Price(s) # Create the title title = 'Stock Adj. Close Price History ' #Get the stocks my_stocks = df #Create and plot the graph plt.figure(figsize=(12.2,4.5)) #width = 12.2in, height = 4.5 # Loop through each stock and plot the Adj Close for each day for c in my_stocks.columns.values: plt.plot( my_stocks[c], label=c)#plt.plot( X-Axis , Y-Axis, line_width, alpha_for_blending, label) plt.title(title) plt.xlabel('Oct. 02, 2006 - Dec. 30, 2011',fontsize=18) plt.ylabel('Adj. Price USD ($)',fontsize=18) plt.legend(my_stocks.columns.values, loc='upper left') plt.show()
Теперь, когда есть все данные и я могу видеть, как цена росла за этот период времени, я хочу начать использовать стратегию, чтобы помочь определить импульс цены акции и подходящее время для покупки и продажи акций. .
Настройка и тестирование торговой стратегии
Пришло время настроить и протестировать торговую стратегию. Опять же, торговая стратегия, которую я буду использовать, называется пересечением двойных скользящих средних.
Сначала мне нужно создать краткосрочную среднюю, поэтому я создам 30-дневную простую скользящую среднюю.
#Create the 30 day simple moving average SMA30 = df.rolling(window=30).mean() SMA30
Затем мне нужно создать долгосрочную среднюю, поэтому я создам 100-дневную простую скользящую среднюю.
#Create the 100 day simple moving average SMA100 = df.rolling(window=100).mean() SMA100
Давайте наглядно покажем цену акции и ее скользящие средние.
# Visually Show The Stock and The Moving Averages # Create the title title = 'Adj. Close Price History Simple Moving Averages ' #Get the stocks my_stocks = df #Create and plot the graph plt.figure(figsize=(12.2,4.5)) #width = 12.2in, height = 4.5 plt.plot( my_stocks['AAPL'], label='AAPL')#plt.plot( X-Axis , Y-Axis, line_width, alpha_for_blending, label) plt.plot( SMA30['AAPL'], label='SMA30') plt.plot( SMA100['AAPL'], label='SMA100') plt.title(title) plt.xlabel('Oct. 02, 2006 - Dec. 30, 2011 ',fontsize=18) plt.ylabel('Adj. Price USD ($)',fontsize=18) plt.legend( loc='upper left') plt.show()
Затем создайте функцию, чтобы сигнализировать, когда покупать и продавать актив / акцию.
#Create a function to signal when to buy and sell an asset def buy_sell(signal): sigPriceBuy = [] sigPriceSell = [] flag = -1 for i in range(0,len(signal)): #if sma30 > sma100 then buy else sell if signal['SMA30'][i] > signal['SMA100'][i]: if flag != 1: sigPriceBuy.append(signal['AAPL'][i]) sigPriceSell.append(np.nan) flag = 1 else: sigPriceBuy.append(np.nan) sigPriceSell.append(np.nan) #print('Buy') elif signal['SMA30'][i] < signal['SMA100'][i]: if flag != 0: sigPriceSell.append(signal['AAPL'][i]) sigPriceBuy.append(np.nan) flag = 0 else: sigPriceBuy.append(np.nan) sigPriceSell.append(np.nan) #print('sell') else: #Handling nan values sigPriceBuy.append(np.nan) sigPriceSell.append(np.nan) return (sigPriceBuy, sigPriceSell)
Создайте новый фрейм данных для хранения всех данных.
#Create a new dataframe signal = pd.DataFrame(index=df['AAPL'].index) signal['AAPL'] = df['AAPL'] signal['SMA30'] = SMA30['AAPL'] signal['SMA100'] = SMA100['AAPL']
Покажи данные.
signal
Продолжайте хранить больше данных во фрейме данных.
x = buy_sell(signal) signal['Buy_Signal_Price'] = x[0] signal['Sell_Signal_Price'] = x[1]
Покажи данные.
signal
# Visually Show The Stock buy and sell signals # Create the title title = 'Adj. Close Price History Buy / Sell Signals ' #Get the stocks my_stocks = signal ticker = 'AAPL' #Create and plot the graph plt.figure(figsize=(12.2,4.5)) #width = 12.2in, height = 4.5 plt.scatter(my_stocks.index, my_stocks['Buy_Signal_Price'], color = 'green', label='Buy Signal', marker = '^', alpha = 1) plt.scatter(my_stocks.index, my_stocks['Sell_Signal_Price'], color = 'red', label='Sell Signal', marker = 'v', alpha = 1) plt.plot( my_stocks[ticker], label=ticker, alpha = 0.35)#plt.plot( X-Axis , Y-Axis, line_width, alpha_for_blending, label) plt.plot( my_stocks['SMA30'], label='SMA30', alpha = 0.35) plt.plot( my_stocks['SMA100'], label='SMA100', alpha = 0.35) plt.title(title) plt.xlabel('Oct. 02, 2006 - Dec. 30, 2011',fontsize=18) plt.ylabel('Adj. Close Price USD ($)',fontsize=18) plt.legend( loc='upper left') plt.show()
Похоже, следуя этой стратегии, я терял бы деньги в 1/4 раза, то есть примерно в 25% случаев, но увеличивал бы прибыль в 3/4 или 75% случаев. Из графика видно, что период с 400 по 450 день был единственным случаем, когда эта стратегия потерпела неудачу в этом наборе данных. Эта стратегия также не кажется оптимальной, так как лучшее время для продажи никогда не приходилось на пик цены акции.
В заключение, это выглядит многообещающей стратегией, но я использовал только 1323 торговых дня, чтобы протестировать ее, и только на одном активе. Прежде чем реализовать подобную стратегию, необходимо провести гораздо больше испытаний.
Спасибо за чтение этой статьи, надеюсь, она будет полезной и интересной для всех вас! Если вам понравилась эта статья и вы нашли ее полезной, пожалуйста, оставьте несколько аплодисментов, чтобы выразить свою признательность. Продолжайте обучение, и если вам нравится машинное обучение, математика, информатика, программирование или анализ алгоритмов, посетите и подпишитесь на мои каналы YouTube (randerson112358 и компьютерные науки).
Если вам также интересно узнать больше о машинном обучении в целом, чтобы сразу приступить к работе с проблемами и примерами, я настоятельно рекомендую вам ознакомиться с Практическое машинное обучение с помощью Scikit-Learn и TensorFlow: концепции, инструменты и методы для создания интеллектуальных систем. Системы ». Это отличная книга, которая поможет новичкам научиться писать программы машинного обучения и понять концепции машинного обучения.
Примечание от Python In Plain English
Мы всегда заинтересованы в продвижении качественного контента. Если у вас есть статья, которую вы хотели бы отправить в какую-либо из наших публикаций, отправьте нам электронное письмо по адресу [email protected] с вашим именем пользователя Medium, и мы добавим вас в качестве автора.