Skip to main content

Version CI Status Code Coverage Downloads License Style

zillionare-backtest

zillionare-backtest是大富翁的回测服务器,它跟zillionare-omega, zillionare-omicron, zillionare-alpha, zillionare-trader-client共同构成回测框架。

zillionare-backtest的功能是提供账户管理、交易撮合和策略评估。zillionare-backtest使用omicron来提供撮合数据,但您也可以自写开发撮合数据的提供器1

与普通的回测框架不同,大富翁回测框架并非是侵入式的。在您的策略中,只需要接入我们的trader-client,并在策略发出交易信号时,向backtest server发出对应的交易指令,即可完成回测。当回测完成,转向实盘时,不需要修改策略代码,仅需要指回测服务器url指向zillionare-trader-server即可。zillionare-backtest与zillionare-trader-server的API绝大多数地方是完全兼容的。

这种设计意味着,您的策略可以不使用大富翁数据框架,甚至可以不使用zillionare-trader-client(您可以自定义一套接口并实现,使之能同时适配您的交易接口和backtest接口)。因此,您的策略可以在任何时候,切换到最适合的量化框架。

功能

账户管理

当您开始回测时,先通过[start_backtest][backtest.web.interfaces.start_backtest]来创建一个账户。在知道该账户的nametoken的情况下,您可以在随后通过[delete_accounts][backtest.web.interfaces.delete_accounts]来删除账户。

在回测完成时,请记得调用stop_backtest。

在回测完成时,stop_backtest会将资产表更新到回测结束日(否则,只更新到最后一次交易当天,因为服务器完全由客户端来驱动,自己没有时间概念)。但并不会对当前持仓进行卖出操作,原因是:

  1. 卖出操作将修改transactions表。而新增的transaction并不是策略触发的

  2. 不利于评估策略的真实情况。如果在回测期出现仅有一笔真实交易,其它都是被终末强平的话,那么此次回测实际上可能在时间上、或者策略周期上没有选好。如果回测系统进行强平,就可能掩盖这种事实。

  3. 在回测终末期,可能存在股票因跌停而无法卖出的情况;或者股票停牌中,无法卖出。这些情况下,模拟卖出也有难度。

交易撮合

您可以通过[buy][backtest.web.interfaces.buy], [market_buy][backtest.web.interfaces.market_buy], [sell][backtest.web.interfaces.sell], [market_sell][backtest.web.interfaces.market_sell]和[sell_percent][backtest.web.interfaces.sell_percent]来进行交易。

状态跟踪

您可以通过[info][backtest.web.interfaces.info]来查看账户的基本信息,比如当前总资产、持仓、本金、盈利等。您还可以通过[positions][backtest.web.interfaces.positions]、[bills][backtest.web.interfaces.bills]来查看账户的持仓、交易历史记录。

策略评估

[metrics][backtest.web.interfaces.metrics]方法将返回策略的各项指标,比如sharpe, sortino, calmar, win rate, max drawdown等。您还可以传入一个参考标的,backtest将对参考标的也同样计算上述指标。

关键概念

复权处理

您的策略在发出买卖信号时,应该使用与order_time一致的现价,而不是任何复权价。如果您的持仓在持有期间,发生了分红送股,回测服务器会自动将分红送股转换成股数加到您的持仓中。当您最终清空持仓时,可以通过bills接口查询到分红送股的成交情况(记录为XDXR类型的委托)。

撮合机制

在撮合时,backtest首先从data feeder中获取order_time以后(含)的行情数据。接下来去掉处在涨跌停中的那些bar(如果是委买,则去掉已处在涨停期间的bar,反之亦然)。在剩下的bar中,backtest会选择价格低于委托价的那些bar(如果是委卖,则选择价格高于委托价的那些bar),依顺序匹配委托量,直到委托量全部被匹配为止。最后,backtest将匹配到的bar的量和价格进行加权平均,得到成交均价。

当backtest使用zillionare-feed来提供撮合数据时,由于缺少盘口数据,zillionare-feed使用分钟级行情数据中的close价格和volume来进行撮合。因此,可能出现某一分钟的最高价或者最低价可能满足过您的委托价要求,但backtest并未成交撮合的情况。我们这样设计,主要考虑到当股价达到最高或者最低点时,当时的成交量不足以满足委托量。现在backtest的设计,可能策略的鲁棒性更好。

作为一个例外,如果委托时的order_time为9:31分之前,backtest将会使用9:31分钟线的开盘价,而不是9:31分的收盘价来进行撮合,以满足部分策略需要以次日开盘价买入的需求。

另外,您也应该注意到,zillionare-feed使用分钟线来替代了盘口数据,尽管在绝大多数情形下,这样做不会有什么影响,但两者毕竟是不同的。一般来说,成交量肯定小于盘口的委买委卖量。因此,在回测中出现买卖委托量不足的情况时,对应的实盘则不一定出现。在这种情况下,可以适当调低策略的本金设置。另外一个差异是,分钟成交价必然不等同于盘口成交价,因此会引入一定的误差。不过长期来看,这种误差应该是零均值的,因此对绝大多数策略不会产生实质影响。

!!!info 了解backtest的撮合机制后,您应该已经明白,正确设定策略的本金(principal)会使得回测的系统误差更小。

委买委卖

委买时,委买量必须是100股的整数倍。这个限制与实盘是一致的。同样,您的券商对委卖交易也做了限制,但回测服务器并未对此进行限制。经评估,去掉这个限制并不会对策略的有效性产生任何影响,但会简化策略的编写。

保存和查询回测状态

如果某次回测数据比较好,您可以save_backtest接口来保存回测状态(transaction, metrics, bills, positions),以及策略参数和描述。通过调用load_backtest来获取

停牌处理

如果某支持仓股当前停牌,在计算持仓市值时,系统会使用停牌前的收盘价来计算市值。为性能优化考验,如果一支股票停牌时间超过500个交易日,则系统将放弃继续向前搜索停牌前的收盘价,改用买入时的成交均价来代替。这种情况应该相当罕见。

版本历史

关于版本历史,请查阅版本历史

Credits

Zillionare-backtest项目是通过Python Project Wizard创建的。

  1. 此功能在0.5.x版本中尚不可用。

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zillionare_backtest-0.5.0.tar.gz (239.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zillionare_backtest-0.5.0-py3-none-any.whl (253.1 kB view details)

Uploaded Python 3

File details

Details for the file zillionare_backtest-0.5.0.tar.gz.

File metadata

  • Download URL: zillionare_backtest-0.5.0.tar.gz
  • Upload date:
  • Size: 239.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.8.16 Linux/5.4.0-166-generic

File hashes

Hashes for zillionare_backtest-0.5.0.tar.gz
Algorithm Hash digest
SHA256 b7ce0ba537cfddfbd088473b7c482bba39c612aff0288e95c8e66d0f9aec0571
MD5 b54775247eb9ec8d1c455803ee297692
BLAKE2b-256 b3855248bd32c0e21b185201b66c915257bcfeb1954e1c740c0e17d0518b7a00

See more details on using hashes here.

File details

Details for the file zillionare_backtest-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: zillionare_backtest-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 253.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.8.16 Linux/5.4.0-166-generic

File hashes

Hashes for zillionare_backtest-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 494905e67e44a2113928a67e5d85da401e6eed32e49c48dbb1ac12a468f3eff9
MD5 a906a34085406ce2a7c4fca972f2e4a5
BLAKE2b-256 f5930c658d82f57cb5fb3d7e242c9555012720d8fcde1b2456297b02bf12fa96

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 files

0.4.19

2 files

0.4.18

2 files

0.4.12

2 files

0.2.6

2 files

0.2.5

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page