Skip to content

installation

以docker容器运行

docker run -d --name bt -v /host/config:/config -v /var/log/backtest:/var/log/backtest -e PORT=3180 -p 3180:3180 backtest

上述命令中,将本地配置文件目录/host/config映射到容器中的/config目录,将本地的/var/log/backtest映射到容器的/var/log/backtest,并且指定环境变量PORT=3180,并且将容器的3180端口映射到本地的3180端口。这里本地配置文件目录映射是必须的,否则服务器无法启动。如果指定了/var/log/backtest的映射,则容器的日志将输出到宿主机的/var/log/backtest目录中。

如果不指定PORT,则默认为7080,此时端口映射也应该相应修改为 -p 7080:7080。

Info

这里-e PORT 3180的作用是,让容器内部的backtest服务器监听在3180端口,而-p 3180:3180则是让容器的3180端口映射到本地的3180端口,从而使得外部程序可以访问容器里的服务。

在/host/config目录(这是一个host主机上的目录),创建一个名为defaults.yaml的文件,其内容见配置文件

注意backtest并不支持https。如果https对您而言比较重要,请在backtest server之前增加nginx一类的服务来实现。

本地安装运行

To install zillionare-backtest, run this command in your terminal:

1
$ pip install zillionare-backtest

安装完成后,通过命令启动服务:

1
bt start

终止服务:

1
bt stop

查看服务状态:

1
bt status

配置文件

运行backtest之前,必须要给其配置数据源等一些关键信息。该文件为yaml文件,其位置和解析请参考cfg4py的规范。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#auto generated by Cfg4Py: https://github.com/jieyu-tech/cfg4py
logging:
  version: 1
  disable_existing_loggers: false
  formatters:
    default:
      format: '%(asctime)s %(levelname)-1.1s %(process)d %(name)s:%(funcName)s:%(lineno)s | %(message)s'
    bare:
      format: '%(message)s'
  handlers:
    console:
      class: logging.StreamHandler
      formatter: default
    file:
      class: logging.handlers.RotatingFileHandler
      formatter: default
      filename: /var/log/backtest/backtest.log
      maxBytes: 10485760
      backupCount: 10
      encoding: utf-8
    entrust:
      class: logging.handlers.RotatingFileHandler
      formatter: bare
      filename: /var/log/backtest/entrust.log
      maxBytes: 10485760
      backupCount: 10
      encoding: utf-8
    trade:
      class: logging.handlers.RotatingFileHandler
      formatter: bare
      filename: /var/log/backtest/trade.log
      maxBytes: 10485760
      backupCount: 10
      encoding: utf-8
  loggers:
    apscheduler:
      level: INFO
    sanic:
      level: WARNING
    cfg4py:
      level: WARNING
    entrust:
      level: INFO
      handlers: [entrust]
      propagate: false
    trade:
      level: INFO
      handlers: [trade]
      propagate: false
  root:
    handlers:
      - file
    level: INFO
metrics:
  risk_free_rate: 0.03
  annual_days: 252
server:
  prefix: /backtest/api/trade/
auth:
  admin: bGZJGEZ
feed:
  # the only type currently supported
  type: zillionare

redis:
  dsn: redis://${REDIS_HOST}:${REDIS_PORT}
influxdb:
  url: http://${INFLUXDB_HOST}:${INFLUXDB_PORT}
  token: ${INFLUXDB_TOKEN}
  org: ${INFLUXDB_ORG}
  bucket_name: ${INFLUXDB_BUCKET_NAME}
  enable_compress: true

Important

注意通过容器来使用backtest时,请确保日志文件使用默认位置,即/var/log/backtest,只有这样,您才能将其映射到宿主机上的某个文件夹,因为在容器里,我们为日志文件指定的卷(VOLUME)固定为/var/log/backtest.

Important

注意配置文件中的/backtest/api/trade/,它用来指定backtest server监听端点的前缀,以便您在多组服务间进行区分。而最终的监听端点,则是prefix + version + command。比如,假设您的服务器地址为192.168.1.1,而端口设置为3180,当前版本为0.3,则您的traderclient应该指向http://192.168.1.1:3180/backtest/api/trade/v0.3/。您也可以通过访问http://192.168.1.1:3180/来得到这个监听端点地址。

第一部分是告诉backtest如何输出日志。注意这里除了配置一般日志外,还配置了entrust和trade两个事务日志,这两个日志是供数据校验使用的。

然后是关于计算metrics时的参数配置。risk_free_rate是无风险收益率,annual_days是一年的天数,这些都是在计算一些指标,比如sharpe率等时需要的。

auth字段用于验证管理员身份。 feed字段目前用于配置数据源。当前只支持一种数据源即zillionare数据源。它要求您的系统中安装有omega服务。 随后出现的redisinfluxdb字段正是omega服务中,缓存和持久化数据所需要的数据库配置。