数字货币量化系统之策略回测和 Catalyst 框架使用
一、回测
基于历史已经发生过的真实行情数据,在历史上某一个时间点开始,严格按照制定的量化策略模拟真实的金融市场交易的规则进行交易。
一般地,我们会得出一个时间段内的盈利率、最大回撤等数据。
二、回测框架Catalyst
用Python编写的加密货币的算法交易库,易用安全,允许在历史数据上对交易策略进行回测。
Catalyst builds on top of the well-established Zipline project. We did our best to minimize structural changes to the general API to maximize compatibility with existing trading algorithms, developer knowledge, and tutorials.
Catalyst建立在完善的 Zipline 项目之上。我们已竭尽所能,以最小化对通用API的结构更改,以最大程度地提高与现有交易算法,开发人员知识和教程的兼容性。
Catalyst 是基于著名的 Zipline 框架开发出来的,所以,如果有些属性找不到可以直接查看 Zipline 文档。
官方文档:
- https://enigma.co/catalyst/
- https://github.com/enigmampc/catalyst
- https://github.com/quantopian/zipline
安装
通过 Anaconda 创建虚拟环境安装必要的包
下载 python3.6-environment.yml 文件到本地:
Download python3.6-environment.yml
Linux or MacOS Python 3.6:
conda env create -f python3.6-environment.yml
source activate catalyst
Windows安装方法请看官方文档:
https://enigma.co/catalyst/install.html
PyCharm 配置
File -> Setting -> Project Interpreter
虚拟环境创建好之后,再选在 虚拟环境作为pycharm运行路径:
Catalyst框架简单使用
在使用回测时,首先要加载交易所数据:
catalyst ingest-exchange -x binance -i btc_usdt -f daily
catalyst_start.py
# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: catalyst_start.py
@time: 19/12/17 01:18
"""
# ================ 注意 =====================
# 在回测之前,需要运行下面的命令加载数据:
# see doc: https://enigma.co/catalyst/beginner-tutorial.html
# 加载币安交易所数据
# > catalyst ingest-exchange -x binance -i btc_usdt -f minute
# > catalyst ingest-exchange -x binance -i btc_usdt -f daily
# ================ 注意 =====================
import pandas as pd
import matplotlib.pyplot as plt
from catalyst import run_algorithm
from catalyst.api import order, record, symbol
def initialize(context):
"""
初始化
:param context:
:return:
"""
context.asset = symbol('btc_usdt')
def handle_data(context, data):
"""
循环运行策略
:param context:
:param data:
:return:
"""
# 每个交易周期买入 1 个比特币
order(context.asset, 1)
# 记录每个交易周期的比特币价格
record(btc=data.current(context.asset, 'price'))
def analyze(context, perf):
"""
策略分析
:param context:
:param perf:
:return:
"""
# print(perf.portfolio_value)
# 每日资产
ax1 = plt.subplot(211)
perf.portfolio_value.plot(ax=ax1)
ax1.set_ylabel('portfolio value')
# 比特币价格
ax2 = plt.subplot(212, sharex=ax1)
perf.btc.plot(ax=ax2)
ax2.set_ylabel('bitcoin price')
plt.show()
if __name__ == '__main__':
run_algorithm(
captal_base=1000,
data_frequency='daily',
initialize=initialize,
handle_data=handle_data,
analyze=analyze,
exchange_name='binance',
quote_currency='usdt',
start=pd.to_datetime('2019-01-01', utc=True),
end=pd.to_datetime('2019-12-01', utc=True)
)
相关文章:
开源量化交易平台zipline初探
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)