[![Version](http://img.shields.io/pypi/v/zillionare-backtest?color=brightgreen)](https://pypi.python.org/pypi/zillionare-backtest)
[![CI Status](https://github.com/zillionare/backtesting/actions/workflows/release.yml/badge.svg)](https://github.com/zillionare/backtesting)
[![Code Coverage](https://img.shields.io/codecov/c/github/zillionare/backtesting)](https://app.codecov.io/gh/zillionare/backtesting)
[![Downloads](https://pepy.tech/badge/zillionare-backtest)](https://pepy.tech/project/zillionare-backtest)
[![License](https://img.shields.io/badge/License-MIT.svg)](https://opensource.org/licenses/MIT)
[![Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
# zillionare-backtest
zillionare-backtest是大富翁的回测服务器,它跟[zillionare-omega](https://zillionare.github.io/omega/), [zillionare-omicron](https://zillionare.github.io/omicron), [zillionare-alpha](https://zillionare.github.io/alpha), [zillionare-trader-client](https://zillionare.github.io/traderclient)共同构成回测框架。
zillionare-backtest的功能是提供账户管理、交易撮合和策略评估。zillionare-backtest使用omicron来提供撮合数据,但您也可以自写开发撮合数据的提供器[^1]。
与普通的回测框架不同,大富翁回测框架并非是侵入式的。在您的策略中,只需要接入我们的trader-client,并在策略发出交易信号时,向backtest server发出对应的交易指令,即可完成回测。当回测完成,转向实盘时,不需要修改策略代码,仅需要指回测服务器url指向[zillionare-trader-server](https://zillionare.github.io/traderserver/)即可。zillionare-backtest与zillionare-trader-server的API绝大多数地方是完全兼容的。
这种设计意味着,您的策略可以不使用大富翁数据框架,甚至可以不使用zillionare-trader-client(您可以自定义一套接口并实现,使之能同时适配您的交易接口和backtest接口)。因此,您的策略可以在任何时候,切换到最适合的量化框架。
# 功能
## 账户管理
当您开始回测时,先通过[start_backtest][backtest.web.interfaces.start_backtest]来创建一个账户。在知道该账户的`name`与`token`的情况下,您可以在随后通过[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个交易日,则系统将放弃继续向前搜索停牌前的收盘价,改用买入时的成交均价来代替。这种情况应该相当罕见。
# 版本历史
关于版本历史,请查阅[版本历史](history)
# Credits
Zillionare-backtest项目是通过[Python Project Wizard](zillionare.github.io/python-project-wizard)创建的。
[^1]:此功能在0.5.x版本中尚不可用。
Raw data
{
"_id": null,
"home_page": "https://github.com/zillionare/backtest",
"name": "zillionare-backtest",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<3.9",
"maintainer_email": "",
"keywords": "",
"author": "Aaron Yang",
"author_email": "aaron_yang@jieyu.ai",
"download_url": "https://files.pythonhosted.org/packages/b3/85/5248bd32c0e21b185201b66c915257bcfeb1954e1c740c0e17d0518b7a00/zillionare_backtest-0.5.0.tar.gz",
"platform": null,
"description": "[![Version](http://img.shields.io/pypi/v/zillionare-backtest?color=brightgreen)](https://pypi.python.org/pypi/zillionare-backtest)\n[![CI Status](https://github.com/zillionare/backtesting/actions/workflows/release.yml/badge.svg)](https://github.com/zillionare/backtesting)\n[![Code Coverage](https://img.shields.io/codecov/c/github/zillionare/backtesting)](https://app.codecov.io/gh/zillionare/backtesting)\n[![Downloads](https://pepy.tech/badge/zillionare-backtest)](https://pepy.tech/project/zillionare-backtest)\n[![License](https://img.shields.io/badge/License-MIT.svg)](https://opensource.org/licenses/MIT)\n[![Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n# zillionare-backtest\n\nzillionare-backtest\u662f\u5927\u5bcc\u7fc1\u7684\u56de\u6d4b\u670d\u52a1\u5668\uff0c\u5b83\u8ddf[zillionare-omega](https://zillionare.github.io/omega/), [zillionare-omicron](https://zillionare.github.io/omicron), [zillionare-alpha](https://zillionare.github.io/alpha), [zillionare-trader-client](https://zillionare.github.io/traderclient)\u5171\u540c\u6784\u6210\u56de\u6d4b\u6846\u67b6\u3002\n\nzillionare-backtest\u7684\u529f\u80fd\u662f\u63d0\u4f9b\u8d26\u6237\u7ba1\u7406\u3001\u4ea4\u6613\u64ae\u5408\u548c\u7b56\u7565\u8bc4\u4f30\u3002zillionare-backtest\u4f7f\u7528omicron\u6765\u63d0\u4f9b\u64ae\u5408\u6570\u636e\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u81ea\u5199\u5f00\u53d1\u64ae\u5408\u6570\u636e\u7684\u63d0\u4f9b\u5668[^1]\u3002\n\n\u4e0e\u666e\u901a\u7684\u56de\u6d4b\u6846\u67b6\u4e0d\u540c\uff0c\u5927\u5bcc\u7fc1\u56de\u6d4b\u6846\u67b6\u5e76\u975e\u662f\u4fb5\u5165\u5f0f\u7684\u3002\u5728\u60a8\u7684\u7b56\u7565\u4e2d\uff0c\u53ea\u9700\u8981\u63a5\u5165\u6211\u4eec\u7684trader-client,\u5e76\u5728\u7b56\u7565\u53d1\u51fa\u4ea4\u6613\u4fe1\u53f7\u65f6\uff0c\u5411backtest server\u53d1\u51fa\u5bf9\u5e94\u7684\u4ea4\u6613\u6307\u4ee4\uff0c\u5373\u53ef\u5b8c\u6210\u56de\u6d4b\u3002\u5f53\u56de\u6d4b\u5b8c\u6210\uff0c\u8f6c\u5411\u5b9e\u76d8\u65f6\uff0c\u4e0d\u9700\u8981\u4fee\u6539\u7b56\u7565\u4ee3\u7801\uff0c\u4ec5\u9700\u8981\u6307\u56de\u6d4b\u670d\u52a1\u5668url\u6307\u5411[zillionare-trader-server](https://zillionare.github.io/traderserver/)\u5373\u53ef\u3002zillionare-backtest\u4e0ezillionare-trader-server\u7684API\u7edd\u5927\u591a\u6570\u5730\u65b9\u662f\u5b8c\u5168\u517c\u5bb9\u7684\u3002\n\n\u8fd9\u79cd\u8bbe\u8ba1\u610f\u5473\u7740\uff0c\u60a8\u7684\u7b56\u7565\u53ef\u4ee5\u4e0d\u4f7f\u7528\u5927\u5bcc\u7fc1\u6570\u636e\u6846\u67b6\uff0c\u751a\u81f3\u53ef\u4ee5\u4e0d\u4f7f\u7528zillionare-trader-client\uff08\u60a8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u4e00\u5957\u63a5\u53e3\u5e76\u5b9e\u73b0\uff0c\u4f7f\u4e4b\u80fd\u540c\u65f6\u9002\u914d\u60a8\u7684\u4ea4\u6613\u63a5\u53e3\u548cbacktest\u63a5\u53e3\uff09\u3002\u56e0\u6b64\uff0c\u60a8\u7684\u7b56\u7565\u53ef\u4ee5\u5728\u4efb\u4f55\u65f6\u5019\uff0c\u5207\u6362\u5230\u6700\u9002\u5408\u7684\u91cf\u5316\u6846\u67b6\u3002\n\n# \u529f\u80fd\n## \u8d26\u6237\u7ba1\u7406\n\u5f53\u60a8\u5f00\u59cb\u56de\u6d4b\u65f6\uff0c\u5148\u901a\u8fc7[start_backtest][backtest.web.interfaces.start_backtest]\u6765\u521b\u5efa\u4e00\u4e2a\u8d26\u6237\u3002\u5728\u77e5\u9053\u8be5\u8d26\u6237\u7684`name`\u4e0e`token`\u7684\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u5728\u968f\u540e\u901a\u8fc7[delete_accounts][backtest.web.interfaces.delete_accounts]\u6765\u5220\u9664\u8d26\u6237\u3002\n\n\u5728\u56de\u6d4b\u5b8c\u6210\u65f6\uff0c\u8bf7\u8bb0\u5f97\u8c03\u7528stop_backtest\u3002\n\n\u5728\u56de\u6d4b\u5b8c\u6210\u65f6\uff0cstop_backtest\u4f1a\u5c06\u8d44\u4ea7\u8868\u66f4\u65b0\u5230\u56de\u6d4b\u7ed3\u675f\u65e5\uff08\u5426\u5219\uff0c\u53ea\u66f4\u65b0\u5230\u6700\u540e\u4e00\u6b21\u4ea4\u6613\u5f53\u5929\uff0c\u56e0\u4e3a\u670d\u52a1\u5668\u5b8c\u5168\u7531\u5ba2\u6237\u7aef\u6765\u9a71\u52a8\uff0c\u81ea\u5df1\u6ca1\u6709\u65f6\u95f4\u6982\u5ff5\uff09\u3002\u4f46\u5e76\u4e0d\u4f1a\u5bf9\u5f53\u524d\u6301\u4ed3\u8fdb\u884c\u5356\u51fa\u64cd\u4f5c\uff0c\u539f\u56e0\u662f\uff1a\n\n1. \u5356\u51fa\u64cd\u4f5c\u5c06\u4fee\u6539transactions\u8868\u3002\u800c\u65b0\u589e\u7684transaction\u5e76\u4e0d\u662f\u7b56\u7565\u89e6\u53d1\u7684\n \n2. \u4e0d\u5229\u4e8e\u8bc4\u4f30\u7b56\u7565\u7684\u771f\u5b9e\u60c5\u51b5\u3002\u5982\u679c\u5728\u56de\u6d4b\u671f\u51fa\u73b0\u4ec5\u6709\u4e00\u7b14\u771f\u5b9e\u4ea4\u6613\uff0c\u5176\u5b83\u90fd\u662f\u88ab\u7ec8\u672b\u5f3a\u5e73\u7684\u8bdd\uff0c\u90a3\u4e48\u6b64\u6b21\u56de\u6d4b\u5b9e\u9645\u4e0a\u53ef\u80fd\u5728\u65f6\u95f4\u4e0a\u3001\u6216\u8005\u7b56\u7565\u5468\u671f\u4e0a\u6ca1\u6709\u9009\u597d\u3002\u5982\u679c\u56de\u6d4b\u7cfb\u7edf\u8fdb\u884c\u5f3a\u5e73\uff0c\u5c31\u53ef\u80fd\u63a9\u76d6\u8fd9\u79cd\u4e8b\u5b9e\u3002\n \n3. \u5728\u56de\u6d4b\u7ec8\u672b\u671f\uff0c\u53ef\u80fd\u5b58\u5728\u80a1\u7968\u56e0\u8dcc\u505c\u800c\u65e0\u6cd5\u5356\u51fa\u7684\u60c5\u51b5\uff1b\u6216\u8005\u80a1\u7968\u505c\u724c\u4e2d\uff0c\u65e0\u6cd5\u5356\u51fa\u3002\u8fd9\u4e9b\u60c5\u51b5\u4e0b\uff0c\u6a21\u62df\u5356\u51fa\u4e5f\u6709\u96be\u5ea6\u3002\n\n## \u4ea4\u6613\u64ae\u5408\n\n\u60a8\u53ef\u4ee5\u901a\u8fc7[buy][backtest.web.interfaces.buy], [market_buy][backtest.web.interfaces.market_buy], [sell][backtest.web.interfaces.sell], [market_sell][backtest.web.interfaces.market_sell]\u548c[sell_percent][backtest.web.interfaces.sell_percent]\u6765\u8fdb\u884c\u4ea4\u6613\u3002\n\n## \u72b6\u6001\u8ddf\u8e2a\n\n\u60a8\u53ef\u4ee5\u901a\u8fc7[info][backtest.web.interfaces.info]\u6765\u67e5\u770b\u8d26\u6237\u7684\u57fa\u672c\u4fe1\u606f\uff0c\u6bd4\u5982\u5f53\u524d\u603b\u8d44\u4ea7\u3001\u6301\u4ed3\u3001\u672c\u91d1\u3001\u76c8\u5229\u7b49\u3002\u60a8\u8fd8\u53ef\u4ee5\u901a\u8fc7[positions][backtest.web.interfaces.positions]\u3001[bills][backtest.web.interfaces.bills]\u6765\u67e5\u770b\u8d26\u6237\u7684\u6301\u4ed3\u3001\u4ea4\u6613\u5386\u53f2\u8bb0\u5f55\u3002\n\n## \u7b56\u7565\u8bc4\u4f30\n\n[metrics][backtest.web.interfaces.metrics]\u65b9\u6cd5\u5c06\u8fd4\u56de\u7b56\u7565\u7684\u5404\u9879\u6307\u6807\uff0c\u6bd4\u5982sharpe, sortino, calmar, win rate, max drawdown\u7b49\u3002\u60a8\u8fd8\u53ef\u4ee5\u4f20\u5165\u4e00\u4e2a\u53c2\u8003\u6807\u7684\uff0cbacktest\u5c06\u5bf9\u53c2\u8003\u6807\u7684\u4e5f\u540c\u6837\u8ba1\u7b97\u4e0a\u8ff0\u6307\u6807\u3002\n\n# \u5173\u952e\u6982\u5ff5\n\n## \u590d\u6743\u5904\u7406\n\u60a8\u7684\u7b56\u7565\u5728\u53d1\u51fa\u4e70\u5356\u4fe1\u53f7\u65f6\uff0c\u5e94\u8be5\u4f7f\u7528\u4e0e`order_time`\u4e00\u81f4\u7684\u73b0\u4ef7\uff0c\u800c\u4e0d\u662f\u4efb\u4f55\u590d\u6743\u4ef7\u3002\u5982\u679c\u60a8\u7684\u6301\u4ed3\u5728\u6301\u6709\u671f\u95f4\uff0c\u53d1\u751f\u4e86\u5206\u7ea2\u9001\u80a1\uff0c\u56de\u6d4b\u670d\u52a1\u5668\u4f1a\u81ea\u52a8\u5c06\u5206\u7ea2\u9001\u80a1\u8f6c\u6362\u6210\u80a1\u6570\u52a0\u5230\u60a8\u7684\u6301\u4ed3\u4e2d\u3002\u5f53\u60a8\u6700\u7ec8\u6e05\u7a7a\u6301\u4ed3\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7`bills`\u63a5\u53e3\u67e5\u8be2\u5230\u5206\u7ea2\u9001\u80a1\u7684\u6210\u4ea4\u60c5\u51b5\uff08\u8bb0\u5f55\u4e3aXDXR\u7c7b\u578b\u7684\u59d4\u6258\uff09\u3002\n\n## \u64ae\u5408\u673a\u5236\n\u5728\u64ae\u5408\u65f6\uff0cbacktest\u9996\u5148\u4ecedata feeder\u4e2d\u83b7\u53d6`order_time`\u4ee5\u540e\uff08\u542b\uff09\u7684\u884c\u60c5\u6570\u636e\u3002\u63a5\u4e0b\u6765\u53bb\u6389\u5904\u5728\u6da8\u8dcc\u505c\u4e2d\u7684\u90a3\u4e9bbar\uff08\u5982\u679c\u662f\u59d4\u4e70\uff0c\u5219\u53bb\u6389\u5df2\u5904\u5728\u6da8\u505c\u671f\u95f4\u7684bar\uff0c\u53cd\u4e4b\u4ea6\u7136\uff09\u3002\u5728\u5269\u4e0b\u7684bar\u4e2d\uff0cbacktest\u4f1a\u9009\u62e9\u4ef7\u683c\u4f4e\u4e8e\u59d4\u6258\u4ef7\u7684\u90a3\u4e9bbar\uff08\u5982\u679c\u662f\u59d4\u5356\uff0c\u5219\u9009\u62e9\u4ef7\u683c\u9ad8\u4e8e\u59d4\u6258\u4ef7\u7684\u90a3\u4e9bbar\uff09,\u4f9d\u987a\u5e8f\u5339\u914d\u59d4\u6258\u91cf\uff0c\u76f4\u5230\u59d4\u6258\u91cf\u5168\u90e8\u88ab\u5339\u914d\u4e3a\u6b62\u3002\u6700\u540e\uff0cbacktest\u5c06\u5339\u914d\u5230\u7684bar\u7684\u91cf\u548c\u4ef7\u683c\u8fdb\u884c\u52a0\u6743\u5e73\u5747\uff0c\u5f97\u5230\u6210\u4ea4\u5747\u4ef7\u3002\n\n\u5f53backtest\u4f7f\u7528zillionare-feed\u6765\u63d0\u4f9b\u64ae\u5408\u6570\u636e\u65f6\uff0c\u7531\u4e8e\u7f3a\u5c11\u76d8\u53e3\u6570\u636e\uff0czillionare-feed\u4f7f\u7528\u5206\u949f\u7ea7\u884c\u60c5\u6570\u636e\u4e2d\u7684`close`\u4ef7\u683c\u548c`volume`\u6765\u8fdb\u884c\u64ae\u5408\u3002\u56e0\u6b64\uff0c\u53ef\u80fd\u51fa\u73b0\u67d0\u4e00\u5206\u949f\u7684\u6700\u9ad8\u4ef7\u6216\u8005\u6700\u4f4e\u4ef7\u53ef\u80fd\u6ee1\u8db3\u8fc7\u60a8\u7684\u59d4\u6258\u4ef7\u8981\u6c42\uff0c\u4f46backtest\u5e76\u672a\u6210\u4ea4\u64ae\u5408\u7684\u60c5\u51b5\u3002\u6211\u4eec\u8fd9\u6837\u8bbe\u8ba1\uff0c\u4e3b\u8981\u8003\u8651\u5230\u5f53\u80a1\u4ef7\u8fbe\u5230\u6700\u9ad8\u6216\u8005\u6700\u4f4e\u70b9\u65f6\uff0c\u5f53\u65f6\u7684\u6210\u4ea4\u91cf\u4e0d\u8db3\u4ee5\u6ee1\u8db3\u59d4\u6258\u91cf\u3002\u73b0\u5728backtest\u7684\u8bbe\u8ba1\uff0c\u53ef\u80fd\u7b56\u7565\u7684\u9c81\u68d2\u6027\u66f4\u597d\u3002\n\n\u4f5c\u4e3a\u4e00\u4e2a\u4f8b\u5916\uff0c\u5982\u679c\u59d4\u6258\u65f6\u7684`order_time`\u4e3a9:31\u5206\u4e4b\u524d\uff0cbacktest\u5c06\u4f1a\u4f7f\u75289:31\u5206\u949f\u7ebf\u7684\u5f00\u76d8\u4ef7\uff0c\u800c\u4e0d\u662f9:31\u5206\u7684\u6536\u76d8\u4ef7\u6765\u8fdb\u884c\u64ae\u5408\uff0c\u4ee5\u6ee1\u8db3\u90e8\u5206\u7b56\u7565\u9700\u8981\u4ee5**\u6b21\u65e5\u5f00\u76d8\u4ef7**\u4e70\u5165\u7684\u9700\u6c42\u3002\n\n\u53e6\u5916\uff0c\u60a8\u4e5f\u5e94\u8be5\u6ce8\u610f\u5230\uff0czillionare-feed\u4f7f\u7528\u5206\u949f\u7ebf\u6765\u66ff\u4ee3\u4e86\u76d8\u53e3\u6570\u636e\uff0c\u5c3d\u7ba1\u5728\u7edd\u5927\u591a\u6570\u60c5\u5f62\u4e0b\uff0c\u8fd9\u6837\u505a\u4e0d\u4f1a\u6709\u4ec0\u4e48\u5f71\u54cd\uff0c\u4f46\u4e24\u8005\u6bd5\u7adf\u662f\u4e0d\u540c\u7684\u3002\u4e00\u822c\u6765\u8bf4\uff0c\u6210\u4ea4\u91cf\u80af\u5b9a\u5c0f\u4e8e\u76d8\u53e3\u7684\u59d4\u4e70\u59d4\u5356\u91cf\u3002\u56e0\u6b64\uff0c\u5728\u56de\u6d4b\u4e2d\u51fa\u73b0\u4e70\u5356\u59d4\u6258\u91cf\u4e0d\u8db3\u7684\u60c5\u51b5\u65f6\uff0c\u5bf9\u5e94\u7684\u5b9e\u76d8\u5219\u4e0d\u4e00\u5b9a\u51fa\u73b0\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u9002\u5f53\u8c03\u4f4e\u7b56\u7565\u7684\u672c\u91d1\u8bbe\u7f6e\u3002\u53e6\u5916\u4e00\u4e2a\u5dee\u5f02\u662f\uff0c\u5206\u949f\u6210\u4ea4\u4ef7\u5fc5\u7136\u4e0d\u7b49\u540c\u4e8e\u76d8\u53e3\u6210\u4ea4\u4ef7\uff0c\u56e0\u6b64\u4f1a\u5f15\u5165\u4e00\u5b9a\u7684\u8bef\u5dee\u3002\u4e0d\u8fc7\u957f\u671f\u6765\u770b\uff0c\u8fd9\u79cd\u8bef\u5dee\u5e94\u8be5\u662f\u96f6\u5747\u503c\u7684\uff0c\u56e0\u6b64\u5bf9\u7edd\u5927\u591a\u6570\u7b56\u7565\u4e0d\u4f1a\u4ea7\u751f\u5b9e\u8d28\u5f71\u54cd\u3002\n\n!!!info\n \u4e86\u89e3backtest\u7684\u64ae\u5408\u673a\u5236\u540e\uff0c\u60a8\u5e94\u8be5\u5df2\u7ecf\u660e\u767d\uff0c\u6b63\u786e\u8bbe\u5b9a\u7b56\u7565\u7684\u672c\u91d1(`principal`)\u4f1a\u4f7f\u5f97\u56de\u6d4b\u7684\u7cfb\u7edf\u8bef\u5dee\u66f4\u5c0f\u3002\n\n## \u59d4\u4e70\u59d4\u5356\n\u59d4\u4e70\u65f6\uff0c\u59d4\u4e70\u91cf\u5fc5\u987b\u662f100\u80a1\u7684\u6574\u6570\u500d\u3002\u8fd9\u4e2a\u9650\u5236\u4e0e\u5b9e\u76d8\u662f\u4e00\u81f4\u7684\u3002\u540c\u6837\uff0c\u60a8\u7684\u5238\u5546\u5bf9\u59d4\u5356\u4ea4\u6613\u4e5f\u505a\u4e86\u9650\u5236\uff0c\u4f46\u56de\u6d4b\u670d\u52a1\u5668\u5e76\u672a\u5bf9\u6b64\u8fdb\u884c\u9650\u5236\u3002\u7ecf\u8bc4\u4f30\uff0c\u53bb\u6389\u8fd9\u4e2a\u9650\u5236\u5e76\u4e0d\u4f1a\u5bf9\u7b56\u7565\u7684\u6709\u6548\u6027\u4ea7\u751f\u4efb\u4f55\u5f71\u54cd\uff0c\u4f46\u4f1a\u7b80\u5316\u7b56\u7565\u7684\u7f16\u5199\u3002\n\n## \u4fdd\u5b58\u548c\u67e5\u8be2\u56de\u6d4b\u72b6\u6001\n\u5982\u679c\u67d0\u6b21\u56de\u6d4b\u6570\u636e\u6bd4\u8f83\u597d\uff0c\u60a8\u53ef\u4ee5`save_backtest`\u63a5\u53e3\u6765\u4fdd\u5b58\u56de\u6d4b\u72b6\u6001\uff08transaction, metrics, bills, positions\uff09\uff0c\u4ee5\u53ca\u7b56\u7565\u53c2\u6570\u548c\u63cf\u8ff0\u3002\u901a\u8fc7\u8c03\u7528`load_backtest`\u6765\u83b7\u53d6\n\n## \u505c\u724c\u5904\u7406\n\u5982\u679c\u67d0\u652f\u6301\u4ed3\u80a1\u5f53\u524d\u505c\u724c\uff0c\u5728\u8ba1\u7b97\u6301\u4ed3\u5e02\u503c\u65f6\uff0c\u7cfb\u7edf\u4f1a\u4f7f\u7528\u505c\u724c\u524d\u7684\u6536\u76d8\u4ef7\u6765\u8ba1\u7b97\u5e02\u503c\u3002\u4e3a\u6027\u80fd\u4f18\u5316\u8003\u9a8c\uff0c\u5982\u679c\u4e00\u652f\u80a1\u7968\u505c\u724c\u65f6\u95f4\u8d85\u8fc7500\u4e2a\u4ea4\u6613\u65e5\uff0c\u5219\u7cfb\u7edf\u5c06\u653e\u5f03\u7ee7\u7eed\u5411\u524d\u641c\u7d22\u505c\u724c\u524d\u7684\u6536\u76d8\u4ef7\uff0c\u6539\u7528\u4e70\u5165\u65f6\u7684\u6210\u4ea4\u5747\u4ef7\u6765\u4ee3\u66ff\u3002\u8fd9\u79cd\u60c5\u51b5\u5e94\u8be5\u76f8\u5f53\u7f55\u89c1\u3002\n# \u7248\u672c\u5386\u53f2\n\u5173\u4e8e\u7248\u672c\u5386\u53f2\uff0c\u8bf7\u67e5\u9605[\u7248\u672c\u5386\u53f2](history)\n# Credits\n\nZillionare-backtest\u9879\u76ee\u662f\u901a\u8fc7[Python Project Wizard](zillionare.github.io/python-project-wizard)\u521b\u5efa\u7684\u3002\n\n\n[^1]:\u6b64\u529f\u80fd\u57280.5.x\u7248\u672c\u4e2d\u5c1a\u4e0d\u53ef\u7528\u3002\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "zillionare backtest framework.",
"version": "0.5.0",
"project_urls": {
"Homepage": "https://github.com/zillionare/backtest"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f5930c658d82f57cb5fb3d7e242c9555012720d8fcde1b2456297b02bf12fa96",
"md5": "a906a34085406ce2a7c4fca972f2e4a5",
"sha256": "494905e67e44a2113928a67e5d85da401e6eed32e49c48dbb1ac12a468f3eff9"
},
"downloads": -1,
"filename": "zillionare_backtest-0.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a906a34085406ce2a7c4fca972f2e4a5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<3.9",
"size": 253068,
"upload_time": "2023-11-18T09:17:36",
"upload_time_iso_8601": "2023-11-18T09:17:36.676049Z",
"url": "https://files.pythonhosted.org/packages/f5/93/0c658d82f57cb5fb3d7e242c9555012720d8fcde1b2456297b02bf12fa96/zillionare_backtest-0.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b3855248bd32c0e21b185201b66c915257bcfeb1954e1c740c0e17d0518b7a00",
"md5": "b54775247eb9ec8d1c455803ee297692",
"sha256": "b7ce0ba537cfddfbd088473b7c482bba39c612aff0288e95c8e66d0f9aec0571"
},
"downloads": -1,
"filename": "zillionare_backtest-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "b54775247eb9ec8d1c455803ee297692",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<3.9",
"size": 239606,
"upload_time": "2023-11-18T09:17:39",
"upload_time_iso_8601": "2023-11-18T09:17:39.803771Z",
"url": "https://files.pythonhosted.org/packages/b3/85/5248bd32c0e21b185201b66c915257bcfeb1954e1c740c0e17d0518b7a00/zillionare_backtest-0.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-11-18 09:17:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "zillionare",
"github_project": "backtest",
"github_not_found": true,
"lcname": "zillionare-backtest"
}