数字货币量化系统之策略回测和 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 文档。

官方文档:

安装

通过 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

file

file

虚拟环境创建好之后,再选在 虚拟环境作为pycharm运行路径:
file

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初探

为者常成,行者常至