使用Python进行自动交易
使用Python加速交易过程,因此也被称为自动交易/量化交易。 Python的使用归功于其功能强大的库,如 TA-Lib、Zipline、Scipy、Pyplot、Matplotlib、NumPy、Pandas 等。探索手头的数据称为数据分析。从Python开始。我们将首先学习使用 Quandl API 提取数据。
使用以前的数据将是我们回测策略的关键。只有使用历史数据才能理解策略在特定情况下的运作方式。我们使用历史数据是因为股票市场的趋势往往会随着时间的推移而重演。
设置工作环境
最简单的入门方法是安装 Anaconda。 Anaconda 是Python的一个发行版,它提供了不同的 IDE,如 Spyder、Jupyter、__、___ 等。
安装 Quandl
Quandl 将帮助我们检索股票的历史数据。要 ninstall quandl,在终端中键入以下命令 -
pip install quandl
注意: Quandl Python模块是免费的,但您必须拥有 Quandl API 密钥才能下载数据。要获得您自己的 API 密钥,您需要创建一个免费的 Quandl 帐户并设置您的 API 密钥。
导入包
安装 Quandl 后,下一步就是导入包。我们将在本教程中严格使用 Pandas,因为回测需要大量数据操作。
import pandas as pd
import quandl as qd
导入包后,我们将使用 API 密钥从 Quandl 中提取数据。
qd.ApiConfig.api_key = "”
使用 Quandl 提取数据
Python3
import pandas as pd
import quandl as qd
qd.ApiConfig.api_key = "API KEY"
msft_data = qd.get("EOD/MSFT",
start_date="2010-01-01",
end_date="2020-01-01")
msft_data.head()
Python3
# Import numpy package
import numpy as np
# assign `Adj Close` to `close_price`
close_price = msft_data[['Adj_Close']]
# returns as fractional change
daily_return = close_price.pct_change()
# replacing NA values with 0
daily_return.fillna(0, inplace=True)
print(daily_return)
Python3
# assigning adjusted closing prices
# to adj_prices
adj_price = msft_data['Adj_Close']
# calculate the moving average
mav = adj_price.rolling(window=50).mean()
# print the result
print(mav[-10:])
Python3
# import the matplotlib package
# to see the plot
import matplotlib.pyplot as plt
adj_price.plot()
Python3
mav.plot()
Python3
# import the matplotlib package
# to see the plot
import matplotlib.pyplot as plt
adj_price.plot()
mav.plot()
输出:
上述代码将提取 2010 年 1 月 1 日至 2020 年 1 月 1 日期间 MSFT 股票的数据。data.head() 将显示前 5 行数据。
重要术语:应该了解数据代表和描述的内容。
- Open/Close –股票的开盘价和收盘价。
- 高/低——股票在特定日期达到的最高和最低价格。
- Adj_High/ Adj_Close –当前股息分配、股票分割或其他公司行为对历史数据的影响。
计算回报
回报只是交易者/投资者使用多头或空头头寸后股票所获得的利润或损失。我们只需使用函数pct_change()
Python3
# Import numpy package
import numpy as np
# assign `Adj Close` to `close_price`
close_price = msft_data[['Adj_Close']]
# returns as fractional change
daily_return = close_price.pct_change()
# replacing NA values with 0
daily_return.fillna(0, inplace=True)
print(daily_return)
输出:
Adj_Close
Date
2013-09-03 0.000000
2013-09-04 -0.021487
2013-09-05 0.001282
2013-09-06 -0.002657
2013-09-09 0.016147
... ...
2017-12-21 -0.000234
2017-12-22 0.000117
2017-12-26 -0.001286
2017-12-27 0.003630
2017-12-28 0.000117
[1090 rows x 1 columns]
每日收益中使用的公式=('t' 时的价格 - 1 时的价格)/ 1 时的价格(任何给定时间't' 的价格 - 开盘价)/ 开盘价
移动平均线
移动平均线的概念将为我们基于动量的交易策略奠定基础。对于金融,分析师还需要在称为移动周期计算的滑动时间段内不断测试统计度量。让我们看看如何计算 50 天窗口内的滚动平均值,并将窗口滑动 1 天。
Python3
# assigning adjusted closing prices
# to adj_prices
adj_price = msft_data['Adj_Close']
# calculate the moving average
mav = adj_price.rolling(window=50).mean()
# print the result
print(mav[-10:])
Date
2017-12-14 78.769754
2017-12-15 78.987478
2017-12-18 79.195540
2017-12-19 79.387391
2017-12-20 79.573250
2017-12-21 79.756221
2017-12-22 79.925922
2017-12-26 80.086379
2017-12-27 80.249752
2017-12-28 80.414472
Name: Adj_Close, dtype: float64
移动平均线有助于消除任何数据异常或峰值,并为您提供更平滑的公司业绩曲线。
绘制并查看差异:
Python3
# import the matplotlib package
# to see the plot
import matplotlib.pyplot as plt
adj_price.plot()
输出:
观察差异:
Python3
mav.plot()
输出:
将它们绘制在一起:
Python3
# import the matplotlib package
# to see the plot
import matplotlib.pyplot as plt
adj_price.plot()
mav.plot()
输出: