Python 量化金融库

学习一些量化金融领域常用的 Python 库,比如:

  • zipline: 用于回测和实施交易算法的库,安装命令:pip install zipline

  • Quantlib: 用于定价金融工具和执行金融计算的库,安装命令:pip install Quantlib

  • TA-Lib: 用于技术分析的库,安装命令:pip install TA-Lib

  • pyfolio: 是一个用于评估投资组合性能的库,它可以与zipline等回测工具集成,提供分析投资组合收益、风险等方面的工具,安装命令:pip install pyfolio

  • statsmodels: 是一个用于估计统计模型的库,包括线性回归、时间序列分析等。在量化金融中,它可用于建立和测试交易策略,安装命令:pip install statsmodels


zipline

zipline 是一个用于量化金融研究和算法交易的开源框架。

它是由 Quantopian 公司开发的,旨在为研究员和开发者提供一个方便的工具,用于构建、测试和执行量化交易策略。

在 zipline 的使用之前,请确保你已经安装了该库,你可以使用以下命令进行安装:

conda install -c conda-forge zipline

这里我们使用 Anaconda 来安装 zipline,免得后面出现奇奇怪怪的问题。

接下来我们登录 quandl 官网,进行注册,获得 api key:https://data.nasdaq.com/account/profile

然后设置 api key,并下载数据包,具体命令如下:

set QUANDL_API_KEY=your_key

macOS 系统使用以下命令:

export QUANDL_API_KEY=your_key-zZQN

下载数据包:

zipline ingest -b quandl

查询数据包:

# zipline bundles
csvdir <no ingestions>
quandl 2023-12-09 06:02:03.178299
quandl 2023-12-09 05:59:04.273082
quandl 2023-12-09 05:54:57.277732
quandl 2023-12-09 05:52:15.532504
quandl 2023-12-09 03:32:03.853032
quantopian-quandl <no ingestions>

现在,让我们使用 zipline 进行一个简单的测试。

以下是是一个简单的 Zipline 策略脚本,用于进行股票交易的回测:

实例

from zipline.api import order, record, symbol


def initialize(context):
    pass


def handle_data(context, data):
    order(symbol('AAPL'), 10)
    record(AAPL=data.current(symbol('AAPL'), 'price'))

以上是一个简单的策略在每个交易日都以当前价格买入 10 股苹果公司的股票,并记录每个交易日的 AAPL 当前价格。

  • order(symbol('AAPL'), 10):这一行表示在每个交易日,以当前价格购买 10 股苹果公司(AAPL)的股票。symbol('AAPL') 用于获取 AAPL 的股票符号。

  • record(AAPL=data.current(symbol('AAPL'), 'price')):这一行表示记录每个交易日 AAPL 的当前价格。data.current(symbol('AAPL'), 'price') 用于获取当前 AAPL 的股价。

然后执行以下命令:

# zipline run -f my_strategy.py --start 2016-1-1 --end 2018-1-1 -o buyapple_out.pickle --no-benchmark
Simulated 503 trading days
 first open: 2016-01-04 14:30:00+00:00
 last close: 2017-12-29 21:00:00+00:00

执行成功后,会生成 buyapple_out.pickle 文件,我们可以使用 pickle 模块读取它。

命令说明:

  • zipline run 启动 Zipline 运行回测。

  • -f my_strategy.py 指定策略文件。在这个例子中,my_strategy.py 是包含您编写的策略的 Python 文件。

  • --start 2016-1-1--end 2018-1-1 指定回测的起始和结束日期。这个例子中回测的时间范围是从 2016 年 1 月 1 日到 2018 年 1 月 1 日。

  • -o buyapple_out.pickle 指定输出文件的名称。在这个例子中,回测的结果将被保存为 buyapple_out.pickle 文件。这个文件包含了回测的各种输出信息,例如交易记录、性能指标等。

  • --no-benchmark 禁用基准(benchmark)。在回测中,有时会使用某个基准来比较策略的表现。使用 --no-benchmark 选项表示不使用任何基准。

pickle 模块用于序列化和反序列化对象,可以方便地将对象保存到文件或从文件中加载对象。

以下演示如何读取 buyapple_out.pickle 文件中的内容:

实例

import pickle

# 指定pickle文件路径
pickle_file_path = 'buyapple_out.pickle'

# 读取pickle文件
with open(pickle_file_path, 'rb') as file:
    buyapple_out_data = pickle.load(file)

# 打印读取的数据
print(buyapple_out_data)

输出内容如下所示:

                                        period_open              period_close  short_value          pnl  long_exposure  ...  max_leverage  excess_return treasury_period_return trading_days  period_label
2016-01-04 21:00:00+00:00 2016-01-04 14:31:00+00:00 2016-01-04 21:00:00+00:00          0.0      0.00000            0.0  ...      0.000000            0.0                    0.0            1       2016-01
2016-01-05 21:00:00+00:00 2016-01-05 14:31:00+00:00 2016-01-05 21:00:00+00:00