【全网唯一中文】bt回测框架中文文档,不是backtrader!是bt
先复制一段官方的,中文文档在下面,也不说那么多了,要用到bt,肯定也知道他是干嘛的,,给博主点点关注点点赞!!!这样博主才能更新更多免费的教程,不然就直接丢付费专栏里了
前言
bt 是一个灵活的 Python 回测框架,用于测试定量 交易策略。回溯测试是在给定的 数据集。此框架允许您轻松创建混合和匹配的策略 不同的 Algos。它旨在促进创建易于测试、可重用和 灵活的策略逻辑区块,促进复杂 交易策略。
目标:让量化分析师免于重新发明轮子,让他们专注于 工作的重要组成部分 - 战略制定。
bt 使用 Python 编码,并加入了一个充满活力和丰富的数据分析生态系统。 存在许多用于机器学习、信号处理和统计的库,可以利用这些库来避免 重新发明轮子 - 使用其他轮子时经常发生的事情 没有同样丰富的高质量开源项目的语言。
bt 构建在 ffn 之上 - 一个用于 Python 的金融函数库。一探究竟!
特征
-
树形结构 树形结构有利于复杂算法交易的构建和组成 模块化和可重用的策略。此外,每个树节点都有自己的 价格指数,Algos 可以使用它来确定节点的分配。
-
算法堆栈 Algos 和 AlgoStacks 是 另一个有助于创建模块化和可重用策略的核心功能 逻辑。由于它们的模块化,这些逻辑块也更容易测试 - 这是构建稳健金融解决方案的重要一步。
-
Charting and Reporting bt 还提供了许多有用的图表功能,有助于可视化回测 结果。我们还计划在未来添加更多的图表、表格和报告格式, 例如自动生成的 PDF 报告。
-
详细统计数据此外,bt 会计算一系列与回溯测试相关的统计数据,并提供一种快速的比较方法 通过 Results 显示方法进行许多不同的回测的这些不同的统计数据。
路线图
未来的开发工作将集中在:
-
速度由于 bt 的灵活性,必须在 可用性和性能。可用性永远是重中之重,但我们确实如此 希望尽可能提高性能。
-
算法随着时间的推移,我们还将开发更多算法。我们还 鼓励任何人也贡献自己的 ALGO。
-
图表和报告这是我们希望不断改进的另一个领域 因为报告是工作的一个重要方面。图表和报告 有助于在 Strategy Logic 中查找 bug。
安装 bt
最简单的安装方法是使用 Python Package Index :bt
pip
pip install bt
由于 bt 有很多依赖项,我们强烈建议安装 Anaconda Scientific Python 分发,尤其是在 Windows 上。此发行版 预装了许多必需的软件包,包括 pip。安装 Anaconda 后,上述 命令应完成安装。
推荐设置
我们相信使用 bt 进行开发的最佳环境是 IPython Notebook。 从他们的主页上看,IPython Notebook 是:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>"[...] a web-based interactive computational environment
where you can combine code execution, text, mathematics, plots and rich
media into a single document [...]"
</code></span></span></span></span>
此环境允许您内联绘制图表,还允许您 使用 Markdown 轻松添加周围的文本。您可以轻松创建具有以下特点的 Notebook 您可以与同事共享,也可以将它们另存为 PDF。如果你不是 但被说服了,请前往他们的网站。
正文
以下是 bt 库中 algos 模块的类的翻译说明。这个模块包含了用于创建策略逻辑的各种算法(Algos)。
bt.algos.CapitalFlow(amount)
继承自:Algo
用于模拟资金流动。资金流动可以是流入或流出。
此算法可用于模拟资金流动。例如,一个养老金基金可能每月或每年都会有因缴款而产生的资金流入。此算法会影响目标节点的资本,但不会影响该节点的收益。
因为这是作为调整来建模的,因此在重新分配/再平衡之前,资本将保留在策略中。
参数:
- amount (float):调整的金额。
bt.algos.CloseDead
继承自:Algo
关闭所有价格为零的头寸(我们假设这些股票已经不存在),并将它们从 temp['weights'] 中移除(如果它们碰巧进入了 temp['weights'])。应该在 Rebalance() 之前调用。
在正常工作流程中,这不是必需的,因为这些证券不会被 SelectAll(include_no_data=False) 或类似方法选择,并且 Rebalance() 会关闭 temp['weights'] 中不存在的头寸。但是,在某些情况下,当 include_no_data=False 无法使用或使用了一些修改过的加权方法时,CloseDead() 可以避免错误。
要求:
- weights
bt.algos.ClosePositionsAfterDates(close_dates)
继承自:Algo
在给定日期之后关闭证券头寸。这可以确保在到期/赎回的证券头寸被关闭。它还可以作为策略的一部分,例如确保策略不持有到期时间少于一年的证券。
注意,如果在堆栈中放置在 RunPeriod 算法之后,实际关闭头寸的时间将发生在提供的日期之后。要使其正常工作,即使已到期,证券的“价格”也必须存在到该日期为止。或者,使用 @run_always 装饰器立即关闭头寸。
此外,该算法不使用 temp['weights'] 和 Rebalance 进行操作,这样对冲(不包含在该工作流中)也会根据需要关闭。
参数:
- close_dates (str):一个以证券名称为索引的数据框名称,列为“date”:我们希望尽快关闭头寸的日期。
设置:
- target.perm['closed']:用于跟踪已经关闭的证券。
bt.algos.Debug(name=None)
继承自:Algo
调试工具算法,在触发时调用 pdb.set_trace。
在调试会话中,target 可用,可以通过 StrategyBase 接口进行检查。
bt.algos.HedgeRisks(measures, pseudo=False, strategy=None, throw_nan=True)
继承自:Algo
使用选定的工具对风险测度进行对冲。
确保事先调用了 UpdateRisk 算法。
参数:
- measures (list):要对冲的风险测度的名称。
- pseudo (bool):是否使用伪逆来计算逆雅可比矩阵。如果为 False,则如果所选工具的数量不等于测度的数量,或如果雅可比矩阵是奇异的,则会失败。
- strategy (StrategyBase):如果提供,将对冲该策略的风险以及目标的风险。这允许单独跟踪对冲和未对冲的性能。注意,risk_strategy 必须在对根的子树的深度优先遍历中早于 target 出现,否则对冲将在 risk_strategy 的头寸更新之前发生。
- throw_nan (bool):是否在对冲数量为 nan 时抛出异常,而不是简单地不进行对冲。
要求:
- selected
bt.algos.LimitDeltas(limit=0.1)
继承自:Algo
基于权重增量限制修改 temp['weights']。
基本上,如果我们希望限制某个证券的目标权重从一天到另一天下降多少,这个算法非常有用。当我们希望对某一天的实际交易量更加保守而不影响市场时,也可以使用它。
例如,如果我们有一个策略目前持有 100% 的一个证券,而加权算法将新权重设为 0%,但我们使用此算法并将限制设置为 0.1,则新目标权重将为 90% 而不是 0%。
参数:
- limit (float, dict):权重增量限制。如果为浮点数,则将是所有证券的全局限制。如果为字典,可以按股票代码指定限制。
设置:
- weights
要求:
- weights
bt.algos.LimitWeights(limit=0.1)
继承自:Algo
基于权重限制修改 temp['weights']。
这个算法是 ffn 的 limit_weights 的一个封装。这个算法的目的是限制任何一个特定资产的权重。例如,有些算法会设置一些相当极端的权重,这可能不可接受。因此,我们可以使用此算法来限制极端权重。然后将超出权重按当前权重成比例重新分配给其他资产。
更多信息请参见 ffn 的 limit_weights。
参数:
- limit (float):权重限制。
设置:
- weights
要求:
- weights
bt.algos.Not(algo)
继承自:Algo
流程控制算法。
它对其他流程控制算法进行“反转”。例如 Not(RunAfterDate(...))、Not(RunAfterDays(...)) 等。
参数:
- list_of_algos (Algo):要运行并反转其返回值的算法。
bt.algos.Or(list_of_algos)
继承自:Algo
流程控制算法。
它对于将多个信号组合为一个信号非常有用。例如,我们可能希望两个不同的再平衡信号共同起作用:
python
复制代码
runOnDateAlgo = bt.algos.RunOnDate(pdf.index[0]) # 其中 pdf.index[0] 是我们的时间序列的第一个日期
runMonthlyAlgo = bt.algos.RunMonthly()
orAlgo = Or([runMonthlyAlgo,runOnDateAlgo])
orAlgo 将在是第一个日期或者是月初时返回 True。
参数:
- list_of_algos:算法的可迭代列表。运行每个算法,如果任何算法返回 true,则返回 true。
bt.algos.SelectHasData
基类:Algo
根据符合数据要求的所有宇宙中的项目设置 temp['selected']。
这是 SelectAll 的更高级版本。用于选择需要一定数据量的股票,以便未来算法正常运行。例如,如果我们需要至少有3个月数据的股票,可以使用这个算法,设置一个3个月的回溯期。
提供回溯期时,建议也提供 min_count 参数,这个参数表示在回溯期内需要的最小数据点数。比如对于3个月的回溯期,可以设定 min_count 为57(假设每月有大约20个交易日)。
参数:
- lookback (DateOffset):确定回溯期的时间偏移。
- min_count (int):在回溯期内需要的最少天数数据。如果不提供,ffn 的 get_num_days_required 函数会估计需要的点数。
- include_no_data (bool):是否包含没有数据的证券?
- include_negative (bool):是否包含价格为负数或零的证券?
设置:
- selected
bt.algos.SelectMomentum
基类:AlgoStack
基于简单的动量过滤器设置 temp['selected']。
根据给定回溯期的总回报率选择前 n 个证券。这是一个包含两个算法(StatTotalReturn 和 SelectN)的 AlgoStack 的包装器。
注意,SelectAll() 或类似方法应在 SelectMomentum() 之前调用,因为 StatTotalReturn 使用 temp['selected'] 的值。
参数:
- n (int):选择前 n 个元素。
- lookback (DateOffset):用于计算总回报率的回溯期。
- lag (DateOffset):计算总回报率的滞后时间。
- sort_descending (bool):是否按降序排序(回报率最高者为最佳)。
- all_or_none (bool):如果为真,只有在有 n 个项目时才填充 temp['selected'],否则 temp['selected'] = []。
设置:
- selected
bt.algos.SelectN
基类:Algo
根据 temp['stat'] 的排名设置 temp['selected']。
根据 temp['stat'] 选择前 n 或后 n 个项目。通常在前一个算法中计算某种指标,供排名使用。可以根据 sort_descending 参数选择前 n 或后 n 个项目。
参数:
- n (int):选择前 n 个项目。
- sort_descending (bool):选择前 n 个项目时,是否按降序排序?
- all_or_none (bool):如果为真,只有在有 n 个项目时才填充 temp['selected'],否则 temp['selected'] = []。
- filter_selected (bool):如果为真,则只从现有的 selected 列表中选择。
设置:
- selected
需求:
- stat
bt.algos.SelectRandomly
基类:AlgoStack
基于 temp['selected'] 中项目的随机子集设置 temp['selected']。
从存储在 temp['selected'] 列表中的项目中随机选择 n 个元素。这在对比某个策略与随机选择证券时很有用。
参数:
- n (int):随机选择 n 个元素。
- include_no_data (bool):是否包含没有数据的证券?
- include_negative (bool):是否包含价格为负数或零的证券?
设置:
- selected
需求:
- selected
bt.algos.SelectRegex
基类:Algo
根据名称的正则表达式设置 temp['selected']。在处理大量不同类型证券的宇宙时很有用。
参数:
- regex (str):名称上的正则表达式。
设置:
- selected
需求:
- selected
bt.algos.SelectThese
基类:Algo
使用一组指定的 tickers 设置 temp['selected']。
参数:
- ticker (list):要选择的证券代码列表。
- include_no_data (bool):是否包含没有数据的证券?
- include_negative (bool):是否包含价格为负数或零的证券?
设置:
- selected
bt.algos.SelectTypes
基类:Algo
根据节点类型设置 temp['selected']。如果 temp['selected'] 已设置,它将过滤现有选择。
参数:
- include_types (list):要包含的节点类型。
- exclude_types (list):要排除的节点类型。
设置:
- selected
bt.algos.SelectWhere
基类:Algo
基于指标数据框选择证券。
根据当前日期(target.now)的值为 True 时选择证券,前提是 signal 数据框中存在当前日期。
参数:
- signal (str|DataFrame):包含选择逻辑的布尔型数据框。如果传入字符串,则通过 target.get_data 访问数据框。
设置:
- selected
bt.algos.SetNotional
基类:Algo
设置用作固定收益策略目标再平衡基数的 notional_value。
参数:
- notional_value (str):包含策略目标名义值的 pd.Series 对象的名称。
设置:
- notional_value
bt.algos.SetStat
基类:Algo
为下游算法(如 SelectN)设置 temp['stat']。
参数:
- stat (str|DataFrame):与 target.universe 维度相同的数据框。如果传入字符串,则通过 target.get_data 访问数据框。
设置:
- stat
bt.algos.SimulateRFQTransactions
基类:Algo
使用决定交易及其价格的“模型”模拟 RFQ(请求报价)的结果。可以从 RFQ 发送方或接收方的角度使用此算法。
参数:
- rfqs (str):一个包含列(Date,Security | quantity,*模型要求的其他列)的数据框名称。
- model (object):具有以下参数的函数/可调用对象:
- rfqs:要响应的 RFQ 数据框。
- target:策略对象,用于访问仓位和价值数据。
bt.algos.StatTotalReturn
基类:Algo
使用给定时期的总回报率设置 temp['stat']。
参数:
- lookback (DateOffset):回溯期。
- lag (DateOffset):滞后期。总回报率在 [now - lookback - lag, now - lag] 区间内计算。
设置:
- stat
需求:
- selected
bt.algos.TargetVol
基类:Algo
根据目标年化波动率更新 temp['weights']。
参数:
- target_volatility:目标年化波动率。
- lookback (DateOffset):用于估计波动率的回溯期。
- lag (DateOffset):计算协方差的滞后时间。
- covar_method:计算波动率的方法。
- annualization_factor:年化的期间数。假定目标波动率已经按该系数年化。
bt.algos.UpdateRisk
基类:Algo
在策略的所有节点上跟踪风险指标。
参数:
- name (str):风险指标的名称(如 IR01,PVBP,IsIndustrials 等)。名称必须与传递给 additional_data 作为 unit_risk 参数的字典的键一致。
- history (int):树中跟踪风险数值时间序列的深度级别。0=不跟踪,1=仅第一层,依此类推。更多级别的跟踪消耗更多计算资源。
bt.algos.WeighERC
基类:Algo
根据等风险贡献算法设置 temp['weights']。
参数:
- lookback (DateOffset):用于估计协方差的回溯期。
- initial_weights (list):初始资产权重(默认为逆波动率)。
- risk_weights (list):风险目标权重(默认为等权重)。
- covar_method (str):用于估计协方差的方法。
- risk_parity_method (str):风险平价估计方法。
- maximum_iterations (int):迭代求解中的最大迭代次数(默认100次)。
- tolerance (float):迭代
bt.algos.WeighSpecified 类
基类:Algo
功能:根据提供的 ticker:weights 字典设置 temp['weights']。使用预设的目标权重。
参数:
- weights (dict):目标权重字典,格式为 ticker: weight。
设置:
- weights
bt.algos.WeighTarget 类
基类:Algo
功能:基于目标权重 DataFrame 设置目标权重。如果目标权重 DataFrame 与 target.universe 的维度相同,则会在每个周期进行再平衡。例如,如果数据是每日数据且目标 DataFrame 维度相同,则会进行每日再平衡。
如果提供的目标权重 DataFrame 只有月末日期,则仅在每月再平衡。
参数:
- weights (str|DataFrame):包含目标权重的 DataFrame。如果传入字符串,则使用 target.get_data 访问 DataFrame,这是一种推荐的使用方式。
设置:
- weights
bt.algos.run_always 函数
功能:运行装饰器,用于确保堆栈在每次传递时都运行装饰的 Algo,无论堆栈中的其他 Algo 是否失败。
bt.backtest.Backtest 类
基类:object
功能:将策略与数据组合以生成结果。回测本质上是测试策略在数据集上的表现。
参数:
- strategy (Strategy, Node, StrategyBase):要测试的策略。
- data (DataFrame):包含回测数据的 DataFrame。这将是策略的“投资组合”。
- name (str):回测名称,默认为策略名称。
- initial_capital (float):传递给策略的初始资本。
- commissions (fn(quantity, price)):用于计算佣金的函数。例如:commissions=lambda q, p: max(1, abs(q) * 0.01)。
- integer_positions (bool):是否在回测中使用整数头寸。默认为 True。
- progress_bar (Bool):在运行回测时显示进度条。
- additional_data (dict):传递给 StrategyBase.setup 的额外数据,预处理后传递给策略本身,例如:bidoffer(用于交易成本建模的 DataFrame),coupons(用于确定现金流的 DataFrame),cost_long/cost_short(用于计算长期或短期持有成本的 DataFrame)。
属性:
- strategy (Strategy):回测的策略。这将是传递的策略的深拷贝。
- data (DataFrame):传递的数据。
- dates (DateTimeIndex):数据的索引。
- initial_capital (float):初始资本。
- name (str):回测名称。
- stats (ffn.PerformanceStats):性能统计信息。
- has_run (bool):运行标志。
- weights (DataFrame):每个组件随时间的权重。
- security_weights (DataFrame):每个证券相对于整个投资组合的权重随时间的变化。
- additional_data (dict):在构造时传递的额外数据。
属性:
- herfindahl_index:计算投资组合的 Herfindahl-Hirschman 指数(HHI)。HHI 是每个证券权重的平方和,范围从 1/N 到 1。1/N 对应于等权重投资组合,1 对应于所有资金投资于单一资产的极端情况。
- positions:每个组件随时间的头寸的 DataFrame。
- turnover:计算回测的换手率。
- weights:每个组件随时间的权重的 DataFrame。
bt.backtest.RandomBenchmarkResult 类
基类:Result
功能:扩展了 Result,增加了与随机策略基准比较相关的方法。
参数:
- backtests (list):回测列表。
属性:
- base_name (str):被基准化的回测名称。
- r_stats (Result):随机策略的统计数据。
- b_stats (Result):基准策略的统计数据。
方法:
- plot_histogram(statistic='monthly_sharpe', figsize=(15, 5), title=None, bins=20, **kwargs):绘制给定统计数据的分布直方图。直方图表示随机策略的统计数据分布,垂直线是基准策略的统计数据值。这有助于判断你的策略是否比随机策略更好。
bt.backtest.RenormalizedFixedIncomeResult 类
基类:Result
功能:帮助比较由 FixedIncomeStrategy 生成的结果。提供了一种用不同的分母值或系列(例如最大或平均名义暴露)“再标准化”结果的方法。
参数:
- normalizing_value:pd.Series、float 或 dict(按策略名称)。
- backtests (list):回测列表(即来自 Result.backtest_list)。
bt.backtest.Result 类
基类:GroupStats
功能:基于 ffn 的 GroupStats,增加了一些额外的帮助方法。
参数:
- backtests (list):回测列表。
属性:
- backtest_list (list):按提供顺序的回测列表。
- backtests (dict):按名称的回测字典。
方法:
- display_monthly_returns(backtest=0):显示特定回测的每月回报。
- get_security_weights(backtest=0, filter=None):获取特定回测的证券权重。
- get_transactions(strategy_name=None):获取交易记录,格式为:日期、证券 | 数量、价格。
- get_weights(backtest=0, filter=None):获取特定回测的权重。
- plot_histogram(backtest=0, **kwds):绘制特定回测的收益直方图。
- plot_security_weights(backtest=0, filter=None, figsize=(15, 5), **kwds):绘制特定回测的证券权重图。
- plot_weights(backtest=0, filter=None, figsize=(15, 5), **kwds):绘制特定回测的权重图。
bt.backtest.benchmark_random 函数
功能:给定回测和随机策略,比较回测与若干随机投资组合。这个过程帮助你确定你的策略是否优于随机挑选权重或随机挑选选定证券的策略。
参数:
- backtest (Backtest):你想要基准化的回测。
- random_strategy (Strategy):你想要基准化的策略。策略应该有一个随机组件来模拟无技能行为。
- nsim (int):要创建的随机策略数量。
返回:
- RandomBenchmarkResult
bt.backtest.run 函数
功能:运行一系列回测并返回一个包含回测结果的 Result 对象。
参数:
- backtest (*list):回测列表。
返回:
- Result
bt.core.Algo 类
基类:object
功能:Algo 用于模块化策略逻辑,使策略逻辑模块化、可组合、更易测试且更少出错。Algo 应该遵循 Unix 原则——做好一件事。
参数:
- name (str):Algo 名称。
属性:
- name (str):Algo 名称。
bt.core.AlgoStack 类
基类:Algo
功能:AlgoStack 从多个 Algos 运行,直到遇到失败为止。目的是将一组 Algos 组合在一起。每个 Algo 都会运行。如果一个 Algo 返回 False,则停止执行。
参数:
- algos (list):Algo 列表。
bt.core.CouponPayingHedgeSecurity 类
基类:CouponPayingSecurity
功能:CouponPayingHedgeSecurity 是一种 CouponPayingSecurity,其中名义价值设置为零,因此不会计入策略的名义价值。它旨在用于固定收益策略中。
参数:
- name (str):证券名称。
- multiplier (float):证券乘数,通常用于衍生品。
- fixed_income (bool):控制名义价值是否仅基于数量或市场价值的标志。
- lazy_add (bool):控制证券是否懒加载到策略子集中。
方法:
- update(date, data=None, inow=None):用给定日期和数据更新证券。这将更新价格、价值、权重等。
bt.core.CouponPayingSecurity 类
基类:Security
功能:CouponPayingSecurity 是一种 Security,它会定期支付固定金额的现金流(即债券)。
参数:
- name (str):证券名称。
- multiplier (float):证券乘数,通常用于衍生品。
- fixed_income (bool):控制名义价值是否仅基于数量或市场价值的标志。
- lazy_add (bool):控制证券是否懒加载到策略子集中。
方法:
- update(date, data=None, inow=None):用给定日期和数据更新证券。这将更新价格、价值、权重等。
bt.core.Strategy 类
基类:object
功能:策略类的基类。包含一个或多个策略节点,并在每个周期运行它们。策略的结果可以包含由一个或多个 Algo 生成的回测结果。
参数:
- name (str):策略名称。
- algos (list):用于策略的 Algos 列表。
- print_info (bool):是否打印策略信息。
- cache (bool):是否缓存策略结果。默认情况下缓存为 False。
属性:
- name (str):策略名称。
- algos (list):策略的 Algos 列表。
- cache (bool):策略的缓存设置。
- print_info (bool):策略的打印设置。
- backtest_list (list):策略的回测列表。
- results (dict):策略的结果字典。
方法:
- run(data=None):运行策略。这会在传递的数据上运行策略,并返回结果。
bt.core.Security 类
基类:SecurityBase
功能:标准证券,没有特殊功能,其名义价值基于市场价值(名义价值乘以价格)。它用于通过 isinstance 识别标准证券和非标准证券。例如,isinstance(sec, Security) 只会对标准证券返回 True,而 SecurityBase 会对所有证券返回 True。
参数:
- name (str):证券名称。
- multiplier (float):证券乘数 - 通常用于衍生品或以批量交易。证券的数量总是乘以这个值来确定基础金额。
- lazy_add (bool):控制是否在策略的子集中懒加载该证券,即仅在对该证券进行交易时才加载。这可以提高在稀疏子集上进行交易的策略的性能。
bt.core.SecurityBase 类
基类:Node
功能:证券节点。在树中定义一个证券。证券没有子节点,它仅建模一个可以买卖的资产。
参数:
- name (str):证券名称。
- multiplier (float):证券乘数 - 通常用于衍生品或批量交易。证券的数量总是乘以这个值来确定基础金额。
- lazy_add (bool):控制是否在策略的子集中懒加载该证券,即仅在对该证券进行交易时才加载。这可以提高在稀疏子集上进行交易的策略的性能。
属性:
- name (str):证券名称。
- parent (Security):证券的父节点。
- root (Security):树的根节点(最上层节点)。
- now (datetime):用于回测时存储当前日期。
- stale (bool):标志,指示证券是否陈旧需要更新。
- prices (TimeSeries):证券价格。
- price (float):最后价格。
- outlays (TimeSeries):支出序列。正支出表示资本分配给证券且证券消耗了该金额。负支出则相反。这对于计算策略层的换手率很有用。
- value (float):最后价值 - 基本上是头寸 * 价格 * 乘数。
- weight (float):在父节点中的权重。
- full_name (str):包括父节点名称的完整名称。
- members (list):当前证券 + 策略的子节点。
- position (float):当前头寸(数量)。
- bidoffer (float):当前买卖价差。
- bidoffers (TimeSeries):买卖价差序列。
- bidoffer_paid (TimeSeries):交易中支付的买卖价差序列。
方法:
- allocate(amount, update=True):向证券分配资本。根据当前价格确定一定数量的股份,计算佣金,并将剩余资本作为调整传回父节点。
- commission(q, p):根据数量和价格计算佣金(交易费用)。使用父节点的佣金函数。
- outlay(q, p=None):确定给定数量 q 所需的完整现金支出(包括佣金)。第二个返回参数是佣金本身。
- transact(q, update=True, update_self=True, price=None):进行交易。此方法用于以给定数量买卖证券。明确提供股份数量,计算佣金,并将剩余资本作为调整传回父节点。
- update(date, data=None, inow=None):使用给定日期和可选数据更新证券。这将更新价格、价值、权重等。
- setup(universe, **kwargs):使用宇宙数据集设置证券。这将加速未来的运行。参数包括价格 DataFrame 和其他额外信息。
- run():不执行任何操作 - 证券在运行时没有操作。
bt.core.Strategy 类
基类:StrategyBase
功能:策略类扩展了 StrategyBase 并包含了 Algos。策略通过传入一组 Algos 来构建,这些 Algos 将放置在 Algo 栈中,run 方法将调用这个栈。此外,创建了两个类属性 perm 和 temp 用于在 Algos 之间传递数据。
参数:
- name (str):策略名称。
- algos (list):传递给 AlgoStack 的 Algos 列表。
- children (dict, list):子节点 - 在创建策略时非常有用。子节点可以是任何类型的节点或字符串。字符串值表示将懒加载的子节点名称。
- parent (Node):父节点。
属性:
- stack (AlgoStack):Algo 栈。
- temp (dict):包含临时数据的字典 - 每次调用 run 时会清空。这可以用于向其他 Algos 传递信息。
- perm (dict):用于从一个 algo 传递信息到另一个 algo 的永久数据。不会在每次传递时清空。
方法:
- run():这是主要的逻辑方法。重写此方法以提供在每个日期变更时执行的算法。此方法由回测器调用。
bt.core.StrategyBase 类
基类:Node
功能:策略节点。在树中定义策略逻辑。策略的作用是根据函数将资本分配给它的子节点。
参数:
- name (str):策略名称。
- children (dict, list):子节点集合。如果是字典,则格式为 {name: child};如果是列表,则为子节点列表。子节点可以是任何类型的节点或字符串。字符串值表示将懒加载的子节点名称。
- parent (Node):父节点。
属性:
- name (str):策略名称。
- parent (Strategy):策略的父节点。
- root (Strategy):树的根节点(最上层节点)。
- children (dict):策略的子节点。
- now (datetime):用于回测时存储当前日期。
- stale (bool):标志,指示策略是否陈旧需要更新。
- prices (TimeSeries):策略的价格 - 基本上是一个反映策略随时间变化的值的指数。
- outlays (DataFrame):每个 SecurityBase 子节点的支出。
- price (float):最后价格。
- value (float):最后价值。
- notional_value (float):最后名义价值。
- weight (float):在父节点中的权重。
- full_name (str):包括父节点名称的完整名称。
- members (list):当前策略 + 策略的子节点。
- securities (list):策略的子节点列表,类型为 SecurityBase。
- commission_fn (fn(quantity, price)):用于确定佣金(交易费用)金额的函数。可用于建模滑点(实现缺口)。注意,费用通常对买入和卖出是对称的,应使用数量的绝对值进行计算。
- capital (float):策略中的资本 - 现金。
- universe (DataFrame):当前时间可用的数据宇宙。宇宙包含在创建回测时传递的数据。使用这些数据来确定策略逻辑。
方法:
- adjust(amount, update=True, flow=True, fee=0.0):调整资本 - 用于向策略注入资本。资本注入不会影响子节点。
- allocate(amount, child=None, update=True):向策略分配资本。默认情况下,资本按比例分配到子节点中。如果指定了子节点,资本将分配给该特定子节点。
- close(child, update=True):关闭子节点头寸 - 等同于 rebalance(0, child)。这也会平整(关闭所有)子节点的子节点。
- flatten():关闭所有子节点头寸。
- get_data(key):返回通过 kwargs 传递给 setup 函数的额外数据,供 algos 使用。这允许 algos 按名称引用数据源,其中数据的绑定发生在回测创建时而不是策略定义时,从而更容易在不同数据集上运行相同的策略。
- get_transactions():返回交易记录,格式为:日期、证券 | 数量、价格。结果是 MultiIndex DataFrame。
- rebalance(weight, child, base=nan, update=True):将子节点再平衡到给定权重。这是一个辅助方法,用于简化代码逻辑。它根据当前权重计算适当的分配。对于固定收益策略,它使用 transact 根据名义价值再平衡,而不是资本。
- set_commissions(fn):设置佣金(交易费用)函数。
- setup(universe, **kwargs):使用数据宇宙设置策略。这将加速未来的计算和更新。
- setup_from_parent(**kwargs):从父节点设置策略。当动态创建子策略时使用。
- transact(q, child=None, update=True):在策略中交易名义金额 q。默认情况下,按比例递归分配到子节点中。如果指定了子节点,名义金额将分配给该特定子节点。
bt.core.is_zero(x) 函数
功能:测试零值,对浮点数精度错误具有鲁棒性。