Zipline 3.0 中文文档(二)(4)https://developer.aliyun.com/article/1523979
交易控制
Zipline 提供交易控制以确保算法按预期执行。这些函数有助于保护算法免受意外行为的不良后果,尤其是在使用真实资金进行交易时。
zipline.api.set_do_not_order_list(self, restricted_list, on_error='fail')
对可以下单的资产设置限制。
参数:
restricted_list (container**[Asset*]**,* SecurityList) – 不能下单的资产。
zipline.api.set_long_only(self, on_error='fail')
设置规则,指定此算法不能采取空头头寸。
zipline.api.set_max_leverage(self, max_leverage)
为算法的最大杠杆设置限制。
参数:
最大杠杆 (float) – 算法的最大杠杆。如果未提供,则没有最大值。
zipline.api.set_max_order_count(self, max_count, on_error='fail')
为一天内可以下订单的数量设置限制。
参数:
最大订单数 (int) – 任何单个交易日可以下订单的最大数量。
zipline.api.set_max_order_size(self, asset=None, max_shares=None, max_notional=None, on_error='fail')
为 sid 的任何单个订单设置股份数量和/或美元价值的限制。这些限制被视为绝对值,并在算法尝试为 sid 下订单时执行。
如果算法尝试下订单,这将导致超过这些限制之一,则引发 TradingControlException。
参数:
- 资产 (Asset*,* 可选) – 如果提供,这仅在给定资产的持仓上设置守卫。
- 最大股份 (int, 可选) – 一次可以下订单的最大股份数量。
- 最大名义价值 (float, 可选) – 一次可以下订单的最大价值。
zipline.api.set_max_position_size(self, asset=None, max_shares=None, max_notional=None, on_error='fail')
为给定 sid 设置持有的股份数量和/或美元价值的限制。这些限制被视为绝对值,并在算法尝试为 sid 下订单时执行。这意味着由于拆分/股息,可能会持有超过最大股份数量,由于价格改善,可能会持有超过最大名义价值。
如果算法尝试下订单,这将导致股份/美元价值的绝对值增加超过这些限制之一,则引发 TradingControlException。
参数:
- 资产 (Asset*,* 可选) – 如果提供,这仅在给定资产的持仓上设置守卫。
- 最大股份 (int, 可选) – 持有资产的最大股份数量。
- 最大名义价值 (float, 可选) – 持有资产的最大价值。
模拟参数
zipline.api.set_benchmark(self, benchmark)
设置基准资产。
参数:
基准 (zipline.assets.Asset) – 设置为新基准的资产。
注意
对于新基准资产支付的任何股息将自动再投资。
佣金模型
zipline.api.set_commission(self, us_equities=None, us_futures=None)
设置模拟的佣金模型。
参数:
- 美国股票 (EquityCommissionModel) – 用于交易美国股票的佣金模型。
- 美国期货 (FutureCommissionModel) – 用于交易美国期货的佣金模型。
注意
此函数只能在initialize()期间调用。
另请参阅
zipline.finance.commission.PerShare, zipline.finance.commission.PerTrade, zipline.finance.commission.PerDollar
class zipline.finance.commission.CommissionModel
佣金模型的抽象基类。
佣金模型负责接受订单/交易对,并计算在每次交易中应向算法账户收取多少佣金。
要实现一个新的佣金模型,创建一个CommissionModel的子类,并实现calculate()方法。
abstract calculate(order, transaction)
计算由于transaction而对order收取的佣金金额。
参数:
- 订单 (zipline.finance.order.Order) –
正在处理中的订单。order的commission字段是一个浮点数,表示该订单上已收取的佣金金额。 - 交易 (zipline.finance.transaction.Transaction) – 正在处理的交易。如果某个 bar 中没有足够的成交量来满足订单中请求的全部数量,单个订单可能会产生多次交易。
返回:
已收取金额 – 我们应该归因于该订单的额外佣金,以美元计。
返回类型:
class zipline.finance.commission.PerShare(cost=0.001, min_trade_cost=0.0)
根据每股的成本计算交易佣金,可选择每笔交易的最小成本。
参数:
注意
这是 zipline 默认的股票佣金模型。
class zipline.finance.commission.PerTrade(cost=0.0)
根据每笔交易的成本计算交易佣金。
对于需要多次成交的订单,全额佣金将计入首次成交。
参数:
成本 (浮点数, 可选) – 每笔股票交易支付的佣金固定金额。
class zipline.finance.commission.PerDollar(cost=0.0015)
通过应用每笔交易固定成本来模拟佣金。
参数:
成本 (浮点数, 可选) – 每笔股票交易支付的佣金固定金额。默认是每笔交易 0.0015 美元的佣金。
滑点模型
zipline.api.set_slippage(self, us_equities=None, us_futures=None)
设置模拟的滑点模型。
参数:
- us_equities (EquitySlippageModel) – 用于交易美国股票的滑点模型。
- us_futures (FutureSlippageModel) – 用于交易美国期货的滑点模型。
注意
该函数只能在initialize()期间调用。
另请参阅
zipline.finance.slippage.SlippageModel
class zipline.finance.slippage.SlippageModel
滑点模型的抽象基础类。
滑点模型负责模拟中订单成交的比率和价格。
要实现一个新的滑点模型,创建一个SlippageModel的子类并实现process_order()。
process_order(data, order)
volume_for_bar
当前分钟内已经为正在成交的资产成交的股数。该属性由基础类自动维护。如果一个资产有多个开放订单,子类可以使用它来跟踪总成交数量。
类型:
注意
定义自己构造函数的子类应该在执行其他初始化之前调用super(, self).__init__()。
abstract process_order(data, order)
计算当前分钟内为order成交的股数和价格。
参数:
- data (zipline.protocol.BarData) – 给定 bar 的数据。
- order (zipline.finance.order.Order) – 要模拟的订单。
返回:
- execution_price (float) – 成交价格。
- execution_volume (int) – 应该成交的股数。必须在
0和order.amount - order.filled之间。如果成交的数量少于剩余数量,order将保持开放状态,并在下一分钟再次传递给此方法。
引发:
zipline.finance.slippage.LiquidityExceeded – 如果在当前 bar 期间不应该再处理当前资产的订单,可能会引发此异常。
注意
在调用此方法之前,volume_for_bar将被设置为当前分钟内已经为order.asset成交的股数。
process_order() 基础类不会在历史成交量为零的 bar 上调用。
class zipline.finance.slippage.FixedSlippage(spread=0.0)
假设所有资产具有固定大小价差的简单模型。
参数:
spread (float, optional) – 所有资产假设的价差大小。买单将在close + (spread / 2)时成交。卖单将在close - (spread / 2)时成交。
注意
该模型不对填充的大小设置限制。对于资产的订单,只要在订单的资产中发生任何交易活动,订单就会立即被填充,即使订单的大小大于历史交易量。
class zipline.finance.slippage.VolumeShareSlippage(volume_limit=0.025, price_impact=0.1)
将模型滑点视为历史交易量百分比的二次函数。
买入的订单将以以下价格填充:
price * (1 + price_impact * (volume_share ** 2))
卖出的订单将以以下价格填充:
price * (1 - price_impact * (volume_share ** 2))
其中价格是条形的收盘价,volume_share是填充的每分钟交易量的百分比,最多不超过volume_limit。
参数:
- volume_limit (float, 可选) – 每个条形中可以填充的历史交易量的最大百分比。0.5 表示历史交易量的 50%。1.0 表示 100%。默认值为 0.025(即,2.5%)。
- price_impact (float, 可选) – 价格影响的缩放系数。较大的值将导致更多的模拟价格影响。较小的值将导致较少的模拟价格影响。默认值为 0.1。
Pipeline
有关更多信息,请参阅 Pipeline API
zipline.api.attach_pipeline(self, pipeline, name, chunks=None, eager=True)
注册一个管道,以便在每天开始时进行计算。
参数:
- pipeline (Pipeline) – 要计算的管道。
- 名称 (str) – 管道的名称。
- chunks (int 或 迭代器*,* 可选) – 要计算管道结果的天数。增加此数字将使获取第一个结果的时间更长,但可能会改善模拟的总运行时间。如果传递了迭代器,我们将根据迭代器的值运行分块。默认值为 True。
- eager (bool, 可选) – 是否在 before_trading_start 之前计算此管道。
返回:
pipeline – 返回未更改的附加管道。
返回类型:
Pipeline
另请参阅
zipline.api.pipeline_output()
zipline.api.pipeline_output(self, name)
获取通过名称名称附加的管道的结果。
参数:
名称 (str) – 用于获取结果的管道的名称。
返回:
结果 – 包含当前模拟日期请求的管道结果的 DataFrame。
返回类型:
pd.DataFrame
引发:
NoSuchPipeline – 当未注册具有名称名称的管道时引发。
另请参阅
zipline.api.attach_pipeline(), zipline.pipeline.engine.PipelineEngine.run_pipeline()
杂项
zipline.api.record(self, *args, **kwargs)
每天跟踪和记录值。
参数:
**kwargs – 要记录的名称和值。
注释
这些值将出现在性能数据包和传递给analyze并从run_algorithm()返回的性能数据框中。
zipline.api.get_environment(self, field='platform')
查询执行环境。
参数:
- field ({‘platform’**, ‘arena’**, ‘data_frequency’**, ‘start’**, ‘end’**,) –
- ‘capital_base’ –
- ‘platform’ –
- ‘*’ –
- meanings (要查询的字段。选项具有以下) –
- arena (-) – 模拟参数中的竞技场。这通常将是
'backtest',但某些系统可能使用它来区分回测和实时交易。 - 数据频率 (-) – 数据频率告诉算法它是使用日数据还是分钟数据运行。
- 开始 (-) – 模拟的开始日期。
- 结束 (-) – 模拟的结束日期。
- capital_base (-) – 模拟的起始资本。
- -平台 (str) – 代码运行的平台。默认情况下,这将是字符串‘zipline’。这可以让算法知道它们是否在 Quantopian 平台上运行。
- ***** (-) – 返回字典中的所有字段。
返回:
val – 查询字段的值。有关更多信息,请参见上文。
返回类型:
任何
引发:
ValueError – 当field不是有效选项时引发。
zipline.api.fetch_csv(self, url, pre_func=None, post_func=None, date_column='date', date_format=None, timezone='UTC', symbol=None, mask=True, symbol_column=None, special_params_checker=None, country_code=None, **kwargs)
从远程 URL 获取 CSV 文件并注册数据,以便可以从data对象查询数据。
参数:
- url (str) – 要加载的 CSV 文件的 URL。
- pre_func (callable*[pd.DataFrame -> pd.DataFrame]**,* 可选) – 允许在日期解析或符号映射之前对从 fetch_csv 返回的原始数据进行预处理的回调。
- post_func (callable*[pd.DataFrame -> pd.DataFrame]**,* 可选) – 在日期和符号映射后允许对数据进行后处理的回调。
- date_column (str, 可选) – 预处理数据框中包含日期时间信息的列的名称,用于映射数据。
- 日期格式 (str, 可选) –
date_column中日期的格式。如果未提供,fetch_csv将尝试推断格式。有关此字符串格式的信息,请参阅pandas.read_csv()。 - 时区 (tzinfo 或 str, 可选) – 用于
date_column中日期时间的时区。 - 符号 (str, 可选) – 如果数据是关于新资产或指数的,则此字符串将用于在
data中标识值的名称。例如,可以使用fetch_csv加载 VIX 的数据,那么这个字段可以是字符串'VIX'。 - 掩码 (bool, 可选) – 删除无法进行符号映射的任何行。
- 符号列 (str) – 如果数据正在为每个资产附加一些新属性,则此参数是预处理数据框中包含符号的列的名称。这将连同日期信息一起用于在资产查找器中映射 sid。
- 国家代码 (str, 可选) – 用于消除符号查找歧义的国家代码。
- **kwargs – 转发到
pandas.read_csv()。
返回值:
csv_ 数据源 – 将从指定 URL 拉取数据的请求源。
返回类型:
zipline.sources.requests_csv.PandasRequestsCSV
数据对象
class zipline.protocol.BarData
提供从算法 API 函数访问每分钟和每日价格/成交量数据的方法。
还提供了实用方法来确定资产是否存活,以及它是否有最近的交易数据。
此对象的实例作为data传递给handle_data()和before_trading_start()。
参数:
- 数据门户 (DataPortal) – 提供条形定价数据。
- simulation_dt_func (可调用) – 返回当前模拟时间的函数。这通常绑定到 TradingSimulation 的方法。
- 数据频率 ({‘minute’**, ‘daily’}) – 条形数据的频率;即数据是每日还是分钟条形
- 限制 (zipline.finance.asset_restrictions.Restrictions) – 结合并返回来自多个来源的限制列表信息的对象
can_trade()
对于给定资产或资产的可迭代对象,如果以下所有条件都为真,则返回 True:
- 资产在当前模拟时间的会话期间存活(如果当前模拟时间不是市场分钟,我们使用下一个会话)。
- 资产的交易所当前模拟时间或模拟日历的下一个市场分钟是开放的。
- 该资产有一个已知的最后价格。
参数:
资产 (zipline.assets.Asset 或 可迭代 的 zipline.assets.Asset) – 应确定可交易性的资产。
注释
上述第二个条件需要进一步解释:
- 如果资产的交易所日历与模拟日历相同,则此条件始终返回 True。
- 如果模拟日历中有市场分钟不在该资产的交易所交易时间内(例如,如果模拟运行在 CMES 日历上,但资产是 MSFT,它在 NYSE 交易),在这些分钟内,此条件将返回 False(例如,东部时间工作日早上 3:15,此时 CMES 开放但 NYSE 关闭)。
返回值:
可交易 – 布尔值或布尔序列,指示在当前分钟内请求的资产是否可交易。
返回类型:
current()
返回在当前模拟时间给定资产的给定字段的“当前”值。
参数:
- 资产 (zipline.assets.Asset 或 可迭代 的 zipline.assets.Asset) – 请求数据的资产。
- 字段 (str 或 可迭代*[str]**.*) – 请求的数据字段。有效字段名称包括:“价格”、“最后交易”、“开盘”、“最高”、“最低”、“收盘”和“成交量”。
返回值:
当前值 – 参见下面的注释。
返回类型:
标量、pandas Series 或 pandas DataFrame。
注释
此函数的返回类型取决于其输入的类型:
- 如果请求单个资产和一个字段,返回值是一个标量(根据字段不同,可能是浮点数或
pd.Timestamp)。 - 如果请求单个资产和一组字段,返回值是一个
pd.Series,其索引是请求的字段。 - 如果请求一组资产和一个字段,返回值是一个
pd.Series,其索引是资产。 - 如果请求一组资产和一组字段,返回值是一个
pd.DataFrame。返回的框架的列将是请求的字段,框架的索引将是请求的资产。
为fields生成的值如下:
- 请求“价格”会得到该资产的最新收盘价,如果该分钟没有交易,则向前填充更早一分钟的价格。如果没有最新值(可能是因为该资产从未交易过,或者已经退市),则返回 NaN。如果找到值,并且我们必须跨越调整边界(拆分、股息等)才能得到它,则在返回之前将值调整为当前模拟时间。
- 请求“开盘”、“最高”、“最低”或“收盘”会得到当前分钟的开盘、最高、最低或收盘价。如果该分钟没有交易发生,则返回
NaN。 - 请求“成交量”会得到当前分钟的成交量。如果该分钟没有交易发生,则返回 0。
- 请求“last_traded”会得到该资产最后一次交易的分钟时间,即使该资产已经停止交易。如果没有最新值,则返回
pd.NaT。
如果当前模拟时间对于某个资产不是有效的市场时间,我们将使用最近的市场收盘价代替。
history()
返回给定资产、字段和频率的长度为bar_count的尾随窗口数据,根据当前模拟时间调整拆分、股息和合并。
缺失数据的语义与current()的注释中描述的相同。
参数:
- assets (zipline.assets.Asset 或 iterable 的 zipline.assets.Asset) – 请求数据的资产。
- fields (字符串 或 iterable 的 字符串) – 请求的数据字段。有效字段名称包括:“价格”、“last_traded”、“开盘”、“最高”、“最低”、“收盘”和“成交量”。
- bar_count (int) – 请求的数据观测值数量。
- frequency (str) – 字符串,指示是否加载每日或每分钟数据观测值。传递‘1m’表示每分钟数据,‘1d’表示每日数据。
返回:
history – 请参阅下面的注释。
返回类型:
pd.Series 或 pd.DataFrame 或 pd.Panel
注意
此函数的返回类型取决于assets和fields的类型:
- 如果请求了单个资产和一个字段,返回值是一个长度为
bar_count的pd.Series,其索引是pd.DatetimeIndex。 - 如果请求了单个资产和多个字段,返回值是一个具有形状
(bar_count, len(fields))的pd.DataFrame。该数据框的索引将是一个pd.DatetimeIndex,其列将是fields。 - 如果请求了多个资产和一个字段,返回值是一个具有形状
(bar_count, len(assets))的pd.DataFrame。该数据框的索引将是一个pd.DatetimeIndex,其列将是assets。 - 如果请求了多个资产和多个字段,则返回值是一个
pd.DataFrame,其中包含一个包含pd.DatetimeIndex和assets对的 pd.MultiIndex,而列将包含字段(s)。它具有形状(bar_count * len(assets), len(fields))。pd.MultiIndex 的名称是
date如果频率 == ‘1d’或 `date_time` 如果频率 == ‘1m, 和资产
如果当前模拟时间不是有效的市场时间,我们使用上次市场收盘价代替。
is_stale()
对于给定的资产或资产的可迭代对象,如果资产存活且当前模拟时间没有交易数据,则返回 True。
如果资产从未交易过,则返回 False。
如果当前模拟时间不是有效的市场时间,我们使用当前时间来检查资产是否存活,但我们使用最后一个市场分钟/日来进行交易数据检查。
参数:
assets (zipline.assets.Asset 或 iterable of zipline.assets.Asset) – 应确定其陈旧性的资产(s)。
返回:
is_stale – 布尔值或布尔序列,指示请求的资产(s)是否陈旧。
返回类型:
调度函数
zipline.api.schedule_function(self, func, date_rule=None, time_rule=None, half_days=True, calendar=None)
安排一个函数在未来重复调用。
参数:
- func (可调用) – 当规则触发时要执行的函数。
func应该与handle_data具有相同的签名。 - date_rule (zipline.utils.events.EventRule, 可选) – 执行
func的日期规则。如果未传递,则该函数将每天运行。 - time_rule (zipline.utils.events.EventRule, 可选) – 执行
func的时间规则。如果未传递,则该函数将在一天的第一个市场分钟的末尾执行。 - 半天交易日 (bool, 可选) – 此规则是否应在半天交易日触发?默认值为 True。
- 日历 (Sentinel, 可选) – 用于计算依赖于交易日历的规则的日历。
另请参阅
zipline.api.date_rules, zipline.api.time_rules
class zipline.api.date_rules
基于日期的 schedule_function() 规则的工厂。
另请参阅
schedule_function()
static every_day()
创建一个每天触发的规则。
返回:
rule
返回类型:
zipline.utils.events.EventRule
static month_end(days_offset=0)
创建一个规则,该规则在每个月底之前固定数量的交易日触发。
参数:
days_offset (int, 可选) – 在月结束前触发的交易天数。默认值为 0,即在月的最后一天触发。
返回:
规则
返回类型:
zipline.utils.events.EventRule
static month_start(days_offset=0)
创建一条规则,该规则在每月开始后的固定交易日内触发。
参数:
days_offset (int, 可选) – 在每月触发前等待的交易天数。默认值为 0,即在每月的第一个交易日触发。
返回:
规则
返回类型:
zipline.utils.events.EventRule
static week_end(days_offset=0)
创建一条规则,该规则在每周结束前的固定交易日内触发。
参数:
days_offset (int, 可选) – 在周结束前触发的交易天数。默认值为 0,即在周的最后一个交易日触发。
static week_start(days_offset=0)
创建一条规则,该规则在每周开始后的固定交易日内触发。
参数:
days_offset (int, 可选) – 在每周触发前等待的交易天数。默认值为 0,即在每周的第一个交易日触发。
class zipline.api.time_rules
用于时间基础的schedule_function()规则的工厂。
另请参阅
schedule_function()
every_minute
alias of Always
static market_close(offset=None, hours=None, minutes=None)
创建一条规则,该规则在市场收盘后的固定偏移量触发。
偏移量可以指定为datetime.timedelta,或者指定为小时和分钟数。
参数:
- 偏移量 (datetime.timedelta, 可选) – 如果传递,则从市场收盘时触发的时间偏移。必须至少为 1 分钟。
- 小时 (int, 可选) – 如果传递,则在收盘前等待的小时数。
- 分钟 (int, 可选) – 如果传递,则在收盘前等待的分钟数。
返回:
规则
返回类型:
zipline.utils.events.EventRule
注释
如果没有传递参数,则默认偏移量为市场收盘前一分钟。
如果传递了offset,则不能传递hours和minutes。相反,如果传递了hours或minutes,则不能传递offset。
static market_open(offset=None, hours=None, minutes=None)
创建一条规则,该规则在市场开盘后的固定偏移量触发。
偏移量可以指定为datetime.timedelta,或者指定为小时和分钟数。
参数:
- 偏移量 (datetime.timedelta, 可选) – 如果传递,表示触发时的市场开盘偏移量。必须至少为 1 分钟。
- 小时数 (int, 可选) – 如果传递,表示市场开盘后等待的小时数。
- 分钟数 (int, 可选) – 如果传递,表示市场开盘后等待的分钟数。
返回:
规则
返回类型:
zipline.utils.events.EventRule
注意
如果没有参数传递,默认的偏移量是市场开盘后一分钟。
如果传递了偏移量,则不能传递小时数和分钟数。相反,如果传递了小时数或分钟数,则不能传递偏移量。
订单
zipline.api.order(self, asset, amount, limit_price=None, stop_price=None, style=None)
下固定数量的股票订单。
参数:
- 资产 (Asset) – 要订购的资产。
- 数量 (int) – 要订购的股票数量。如果
数量为正数,则表示要购买或平仓的股票数量。如果数量为负数,则表示要出售或做空的股票数量。 - 限价 (float, 可选) – 订单的限价。
- 止损价 (float, 可选) – 订单的止损价。
- 风格 (ExecutionStyle*,* 可选) – 订单的执行风格。
返回:
订单 ID – 此订单的唯一标识符,如果没有下订单,则为 None。
返回类型:
str 或 None
注意
限价和止损价参数提供了传递常见执行风格的简写方式。传递限价=N等同于风格=限价订单(N)。类似地,传递止损价=M等同于风格=止损订单(M),传递限价=N和止损价=M等同于风格=止损限价订单(N, M)。同时传递风格和限价或止损价是错误的。
另请参阅
zipline.finance.execution.ExecutionStyle, zipline.api.order_value(), zipline.api.order_percent()
zipline.api.order_value(self, asset, value, limit_price=None, stop_price=None, style=None)
下固定金额的订单。
等同于order(asset, value / data.current(asset, 'price'))。
参数:
- 资产 (Asset) – 要订购的资产。
- value (float) – 要交易的
asset的价值量。买入或卖出的股数将等于value / current_price。 - limit_price (float, optional) – 订单的限价。
- stop_price (float, optional) – 订单的止损价。
- style (ExecutionStyle) – 订单的执行风格。
返回:
order_id – 该订单的唯一标识符。
返回类型:
注释
参见zipline.api.order()以获取关于limit_price、stop_price和style的更多信息
另请参阅
zipline.finance.execution.ExecutionStyle, zipline.api.order(), zipline.api.order_percent()
zipline.api.order_percent(self, asset, percent, limit_price=None, stop_price=None, style=None)
在指定的资产中下订单,对应于当前资产组合价值的给定百分比。
参数:
- asset (Asset) – 该订单所针对的资产。
- percent (float) – 分配给
asset的资产组合价值的百分比。以小数形式指定,例如:0.50 表示 50%。 - limit_price (float, optional) – 订单的限价。
- stop_price (float, optional) – 订单的止损价。
- style (ExecutionStyle) – 订单的执行风格。
返回:
order_id – 该订单的唯一标识符。
返回类型:
注释
参见zipline.api.order()以获取关于limit_price、stop_price和style的更多信息
另请参阅
zipline.finance.execution.ExecutionStyle, zipline.api.order(), zipline.api.order_value()
zipline.api.order_target(self, asset, target, limit_price=None, stop_price=None, style=None)
下订单以调整仓位至目标股数。如果仓位不存在,这相当于下新订单。如果仓位已存在,这相当于为当前股数与目标股数之间的差额下订单。
参数:
- 资产 (资产) – 该订单所针对的资产。
- 目标 (int) –
资产的期望股数。 - 限价 (float, 可选) – 订单的限价。
- 止损价 (float, 可选) – 订单的止损价。
- 风格 (ExecutionStyle) – 订单的执行风格。
返回:
订单 ID – 该订单的唯一标识符。
返回类型:
注意
order_target不考虑任何未完成订单。例如:
order_target(sid(0), 10) order_target(sid(0), 10)
这段代码将导致sid(0)的 20 股,因为在第二次order_target调用时,第一次order_target调用尚未完成填充。
有关limit_price、stop_price和style的更多信息,请参阅zipline.api.order()
另请参阅
zipline.finance.execution.ExecutionStyle, zipline.api.order(), zipline.api.order_target_percent(), zipline.api.order_target_value()
zipline.api.order_target_value(self, asset, target, limit_price=None, stop_price=None, style=None)
下订单以调整仓位至目标值。如果仓位不存在,这相当于下新订单。如果仓位已存在,这相当于为当前值与目标值之间的差额下订单。如果所订购的资产是期货,则计算的“目标值”实际上是目标风险敞口,因为期货没有“价值”。
参数:
- 资产 (资产) – 该订单所针对的资产。
- 目标 (float) –
资产的期望总价值。 - 限价 (float, 可选) – 订单的限价。
- 止损价 (float, 可选) – 订单的止损价。
- style (ExecutionStyle) – 订单的执行风格。
返回:
order_id – 此订单的唯一标识符。
返回类型:
笔记
order_target_value不考虑任何未完成订单。例如:
order_target_value(sid(0), 10) order_target_value(sid(0), 10)
这段代码将导致sid(0)的 20 美元,因为在第二次调用order_target_value时,第一次调用order_target_value尚未完成。
有关limit_price、stop_price和style的更多信息,请参阅zipline.api.order()
另请参阅
zipline.finance.execution.ExecutionStyle, zipline.api.order(), zipline.api.order_target(), zipline.api.order_target_percent()
zipline.api.order_target_percent(self, asset, target, limit_price=None, stop_price=None, style=None)
下订单以调整持仓至当前投资组合价值的预定百分比。如果持仓不存在,这相当于下新订单。如果持仓已存在,这相当于下订单以达到目标百分比与当前百分比之间的差额。
参数:
- asset (Asset) – 此订单所针对的资产。
- target (float) – 希望分配给
asset的投资组合价值的百分比。这以小数形式指定,例如:0.50 表示 50%。 - limit_price (float, 可选) – 订单的限价。
- stop_price (float, 可选) – 订单的止损价。
- style (ExecutionStyle) – 订单的执行风格。
返回:
order_id – 此订单的唯一标识符。
返回类型:
笔记
order_target_value不考虑任何未完成订单。例如:
order_target_percent(sid(0), 10) order_target_percent(sid(0), 10)
这段代码将导致 20%的投资组合被分配给 sid(0),因为在第二次调用order_target_percent时,第一次调用order_target_percent尚未完成。
有关limit_price、stop_price和style的更多信息,请参阅zipline.api.order()
另请参阅
zipline.finance.execution.ExecutionStyle, zipline.api.order(), zipline.api.order_target(), zipline.api.order_target_value()
class zipline.finance.execution.ExecutionStyle
订单执行风格的基类。
property exchange
此订单应路由到的交易所。
abstract get_limit_price(is_buy)
获取此订单的限价。返回值为 None 或一个数值,该数值大于等于 0。
abstract get_stop_price(is_buy)
获取此订单的止损价。返回值为 None 或一个数值,该数值大于等于 0。
class zipline.finance.execution.MarketOrder(exchange=None)
以当前市场价格成交的订单执行风格。
这是使用order()放置订单时的默认设置。
class zipline.finance.execution.LimitOrder(limit_price, asset=None, exchange=None)
以等于或优于指定限价的价格成交的订单执行风格。
参数:
limit_price (float) – 买入时的最高价格,或卖出时的最低价格,订单应在此价格成交。
class zipline.finance.execution.StopOrder(stop_price, asset=None, exchange=None)
当市场价格达到某一阈值时,代表应放置市价单的执行风格。
参数:
stop_price (float) – 订单应放置的价格阈值。对于卖出,如果市场价格低于此值,则放置订单。对于买入,如果市场价格高于此值,则放置订单。
class zipline.finance.execution.StopLimitOrder(limit_price, stop_price, asset=None, exchange=None)
当市场价格达到某一阈值时,代表应放置限价单的执行风格。
参数:
- limit_price (float) – 买入时的最高价格,或卖出时的最低价格,订单应在此价格或更优价格成交。
- stop_price (float) – 订单应放置的价格阈值。对于卖出,如果市场价格低于此值,则放置订单。对于买入,如果市场价格高于此值,则放置订单。
zipline.api.get_order(self, order_id)
根据订单函数返回的订单 id 查找订单。
参数:
order_id (str) – 订单的唯一标识符。
返回:
订单 – 订单对象。
返回类型:
订单
zipline.api.get_open_orders(self, asset=None)
检索所有当前未成交的订单。
参数:
asset (Asset) – 如果传递且不为 None,则仅返回给定资产的未成交订单,而不是所有未成交订单。
返回:
open_orders – 如果没有传递资产,这将返回一个字典,将资产映射到资产的所有未成交订单列表。如果传递了资产,则这将返回该资产的未成交订单列表。
返回类型:
dict[list[Order]] 或 list[Order]
zipline.api.cancel_order(self, order_param)
取消未成交的订单。
参数:
order_param (str or Order) – 要取消的订单 ID 或订单对象。
订单取消策略
zipline.api.set_cancel_policy(self, cancel_policy)
设置模拟的订单取消策略。
参数:
cancel_policy (CancelPolicy) – 要使用的取消策略。
另请参阅
zipline.api.EODCancel, zipline.api.NeverCancel
class zipline.finance.cancel_policy.CancelPolicy
抽象取消策略接口。
abstract should_cancel(event)
是否应取消所有未成交的订单?
参数:
event (enum-value) –
事件类型之一:
zipline.gens.sim_engine.BARzipline.gens.sim_engine.DAY_STARTzipline.gens.sim_engine.DAY_ENDzipline.gens.sim_engine.MINUTE_END
返回:
should_cancel – 是否应取消所有未成交的订单?
返回类型:
zipline.api.EODCancel(warn_on_cancel=True)
该策略在交易日结束时取消未成交的订单。目前,Zipline 仅将此策略应用于分钟级别的模拟。
参数:
warn_on_cancel (bool, optional) – 如果这导致订单被取消,是否应发出警告?
zipline.api.NeverCancel()
订单永远不会自动取消。
订单取消策略
zipline.api.set_cancel_policy(self, cancel_policy)
设置模拟的订单取消策略。
参数:
cancel_policy (CancelPolicy) – 要使用的取消策略。
另请参阅
zipline.api.EODCancel, zipline.api.NeverCancel
class zipline.finance.cancel_policy.CancelPolicy
抽象取消策略接口。
abstract should_cancel(event)
是否应取消所有未成交的订单?
参数:
event (enum-value) –
事件类型之一:
zipline.gens.sim_engine.BARzipline.gens.sim_engine.DAY_STARTzipline.gens.sim_engine.DAY_ENDzipline.gens.sim_engine.MINUTE_END
返回:
should_cancel – 是否应取消所有未成交的订单?
返回类型:
zipline.api.EODCancel(warn_on_cancel=True)
该策略在交易日结束时取消未成交的订单。目前,Zipline 仅将此策略应用于分钟级别的模拟。
参数:
warn_on_cancel (bool, optional) – 如果这导致订单被取消,是否应发出警告?
zipline.api.NeverCancel()
订单永远不会自动取消。
资产
zipline.api.symbol(self, symbol_str, country_code=None)
通过股票代码查找股票。
参数:
返回值:
equity – 在当前符号查找日期持有该股票代码的股票。
返回类型:
zipline.assets.Equity
引发:
SymbolNotFound – 当在当前查找日期未持有该符号时引发。
另请参阅
zipline.api.set_symbol_lookup_date()
zipline.api.symbols(self, *args, **kwargs)
查找多个股票作为列表。
参数:
返回值:
equities – 在当前符号查找日期持有给定股票代码的股票。
返回类型:
list[zipline.assets.Equity]
引发:
SymbolNotFound – 当在当前查找日期未持有其中一个符号时引发。
另请参阅
zipline.api.set_symbol_lookup_date()
zipline.api.future_symbol(self, symbol)
通过给定的符号查找期货合约。
参数:
symbol (str) – 所需合约的符号。
返回值:
future – 以名称symbol交易的期货。
返回类型:
zipline.assets.Future
引发:
SymbolNotFound – 当未找到名为‘symbol’的合约时引发。
zipline.api.set_symbol_lookup_date(self, dt)
设置符号解析为其资产的日期(符号可能在不同时间映射到不同的公司或底层资产)
参数:
dt (datetime) – 新的符号查找日期。
zipline.api.sid(self, sid)
通过其唯一的资产标识符查找资产。
参数:
sid (int) – 标识资产的唯一整数。
返回值:
asset – 具有给定sid的资产。
返回类型:
zipline.assets.Asset
引发:
SidsNotFound – 当请求的sid未映射到任何资产时。
交易控制
Zipline 提供交易控制以确保算法按预期执行。这些函数有助于保护算法免受意外行为的不良后果,尤其是在使用真实资金进行交易时。
zipline.api.set_do_not_order_list(self, restricted_list, on_error='fail')
设置对可以下单的资产的限制。
参数:
restricted_list (container[Asset], SecurityList) – 不能订购的资产。
zipline.api.set_long_only(self, on_error='fail')
设置规则,指定此算法不能持有空头仓位。
zipline.api.set_max_leverage(self, max_leverage)
设置算法最大杠杆的限制。
参数:
max_leverage (float) – 算法的最大杠杆。如果不提供,则没有最大值。
zipline.api.set_max_order_count(self, max_count, on_error='fail')
对单日内可以下达的订单数量设置限制。
参数:
max_count (int) – 任何单日内可以下达的最大订单数量。
zipline.api.set_max_order_size(self, asset=None, max_shares=None, max_notional=None, on_error='fail')
对为 sid 下达的单个订单的股份数和/或美元价值设置限制。限制被视为绝对值,并在算法尝试为 sid 下订单时执行。
如果算法尝试下达的订单会导致超过这些限制之一,则引发 TradingControlException。
参数:
- asset (
Asset, 可选) – 如果提供,则仅对给定资产的仓位设置保护。 - max_shares (
int, 可选) – 一次可以订购的最大股份数。 - max_notional (
float, 可选) – 一次可以订购的最大价值。
zipline.api.set_max_position_size(self, asset=None, max_shares=None, max_notional=None, on_error='fail')
对给定 sid 的股份数和/或美元价值设置限制。限制被视为绝对值,并在算法尝试为 sid 下订单时执行。这意味着由于拆分/股息,可能会持有超过最大股份数,由于价格改善,可能会持有超过最大名义价值。
如果算法尝试下达的订单会导致股份/美元价值的绝对值超过这些限制之一,则引发 TradingControlException。
参数:
- asset (
Asset, 可选) – 如果提供,则仅对给定资产的仓位设置保护。 - max_shares (
int, 可选) – 对某资产持有的最大股份数。 - max_notional (
float, 可选) – 对某资产持有的最大价值。
模拟参数
zipline.api.set_benchmark(self, benchmark)
设置基准资产。
参数:
benchmark (zipline.assets.Asset) – 设置为新基准的资产。
注意
对于新的基准资产,任何支付的股息将自动再投资。
佣金模型
zipline.api.set_commission(self, us_equities=None, us_futures=None)
为模拟设置佣金模型。
参数:
- us_equities (EquityCommissionModel) – 用于交易美国股票的佣金模型。
- us_futures (FutureCommissionModel) – 用于交易美国期货的佣金模型。
注释
此函数只能在 initialize() 期间调用。
另请参见
zipline.finance.commission.PerShare, zipline.finance.commission.PerTrade, zipline.finance.commission.PerDollar
class zipline.finance.commission.CommissionModel
佣金模型的抽象基类。
佣金模型负责接受订单/交易对,并计算每笔交易应向算法账户收取多少佣金。
要实现新的佣金模型,请创建 CommissionModel 的子类并实现 calculate()。
abstract calculate(order, transaction)
根据 transaction 计算 order 上应收取的佣金金额。
参数:
- order (zipline.finance.order.Order) –
(订单被处理,省略)order的commission字段是一个浮点数,表示该订单已收取的佣金金额。 - transaction (zipline.finance.transaction.Transaction) – 正在处理的交易所。如果某个订单在给定的条形图中没有足够的成交量来填充所请求的全部数量,则单个订单可能会产生多个交易。
返回:
amount_charged – 我们应该归因于该订单的额外佣金,以美元计。
返回类型:
class zipline.finance.commission.PerShare(cost=0.001, min_trade_cost=0.0)
根据每股的成本计算交易佣金,可选择每笔交易的最小成本。
(参数重复,省略)
- cost (float, optional) – 每交易一股支付的佣金金额。默认值为每股一美分的一成。
- min_trade_cost (float, optional) – 每笔交易支付的佣金最小金额。默认值为无最小值。
注释
这是 zipline 默认的股票佣金模型。
class zipline.finance.commission.PerTrade(cost=0.0)
根据每笔交易的成本计算交易佣金。
对于需要多次成交的订单,全额佣金将收取给首次成交。
(参数重复,省略)
cost (float, optional) – 每笔股票交易支付的佣金固定金额。
class zipline.finance.commission.PerDollar(cost=0.0015)
通过应用每美元交易的固定成本来计算佣金。
参数:
成本 (float, 可选) – 每美元股票交易支付的固定佣金金额。默认是每美元交易 0.0015 美元的佣金。
滑点模型
zipline.api.set_slippage(self, us_equities=None, us_futures=None)
设置模拟的滑点模型。
参数:
- us_equities (EquitySlippageModel) – 用于交易美国股票的滑点模型。
- us_futures (FutureSlippageModel) – 用于交易美国期货的滑点模型。
注释
该函数只能在initialize()期间调用。
另请参阅
zipline.finance.slippage.SlippageModel
class zipline.finance.slippage.SlippageModel
滑点模型的抽象基类。
滑点模型负责模拟中订单成交的费率和价格。
要实现一个新的滑点模型,请创建一个SlippageModel的子类,并实现process_order()方法。
process_order(data, order)
volume_for_bar
在当前分钟内,对于当前正在成交的资产,已经成交的股数。该属性由基类自动维护。子类可以使用它来跟踪单个资产的多个开放订单的总成交数量。
类型:
注释
定义自己构造函数的子类应在执行其他初始化之前调用super(, self).__init__()。
abstract process_order(data, order)
计算在当前分钟内为order成交的股数和价格。
参数:
- data (zipline.protocol.BarData) – 给定 bar 的数据。
- order (zipline.finance.order.Order) – 要模拟的订单。
返回:
- 执行价格 (float) – 成交价格。
- 执行量 (int) – 应成交的股数。必须在
0和order.amount - order.filled之间。如果成交的数量少于剩余数量,order将保持开放状态,并在下一分钟再次传递给此方法。
引发:
zipline.finance.slippage.LiquidityExceeded – 如果在当前 bar 期间不应再处理当前资产的更多订单,则可能会引发此异常。
注释
在调用此方法之前,volume_for_bar将被设置为order.asset在当前分钟内已经成交的股数。
process_order()方法在历史成交量为零的 bar 上不会被基类调用。
class zipline.finance.slippage.FixedSlippage(spread=0.0)
假设所有资产的固定大小价差的简单模型。
参数:
价差 (浮点数, 可选) – 所有资产假设的价差大小。买入订单将以close + (spread / 2)成交。卖出订单将以close - (spread / 2)成交。
注意
该模型不对成交大小设置限制。只要在订单资产中发生任何交易活动,资产的订单就会立即成交,即使订单的大小超过了历史成交量。
class zipline.finance.slippage.VolumeShareSlippage(volume_limit=0.025, price_impact=0.1)
将模型滑点作为历史成交量的百分比的二次函数。
买入订单将以以下价格成交:
price * (1 + price_impact * (volume_share ** 2))
卖出订单将以以下价格成交:
price * (1 - price_impact * (volume_share ** 2))
其中price是该时段的收盘价,volume_share是填充的每分钟成交量的百分比,最多可达volume_limit。
参数:
- 成交量限制 (浮点数, 可选) – 每个时段可以成交的历史成交量的最大百分比。0.5 表示历史成交量的 50%。1.0 表示 100%。默认值为 0.025(即,2.5%)。
- 价格影响 (浮点数, 可选) – 价格影响的缩放系数。较大的值将导致更多的模拟价格影响。较小的值将导致较少的模拟价格影响。默认值为 0.1。
佣金模型
zipline.api.set_commission(self, us_equities=None, us_futures=None)
设置模拟的佣金模型。
参数:
- 美国股票 (EquityCommissionModel) – 用于交易美国股票的佣金模型。
- 美国期货 (FutureCommissionModel) – 用于交易美国期货的佣金模型。
注意
此函数只能在initialize()期间调用。
另请参见
zipline.finance.commission.PerShare,zipline.finance.commission.PerTrade,zipline.finance.commission.PerDollar
class zipline.finance.commission.CommissionModel
佣金模型的抽象基类。
佣金模型负责接受订单/交易对,并计算在每次交易中应向算法账户收取多少佣金。
要实现新的佣金模型,请创建一个CommissionModel的子类,并实现calculate()。
abstract calculate(order, transaction)
计算由于transaction而对order收取的佣金金额。
参数:
- 订单 (zipline.finance.order.Order) –
正在处理的订单。order的commission字段是一个浮点数,表示已经对该订单收取的佣金金额。 - transaction (zipline.finance.transaction.Transaction) – 正在处理的交易所。如果某个时段内没有足够的交易量来满足订单中请求的全部数量,则单个订单可能会产生多个交易所。
返回:
amount_charged – 我们应该归因于该订单的额外佣金,以美元计。
返回类型:
class zipline.finance.commission.PerShare(cost=0.001, min_trade_cost=0.0)
根据每股成本计算交易佣金,并可选择每笔交易的最小成本。
参数:
- cost (float, optional) – 每交易一股支付的佣金金额。默认是每股一美分的十分之一。
- min_trade_cost (float, optional) – 每笔交易支付的最低佣金金额。默认没有最低限制。
注意
这是 zipline 默认的股票佣金模型。
class zipline.finance.commission.PerTrade(cost=0.0)
根据每笔交易的成本计算交易佣金。
对于需要多次成交的订单,全额佣金将计入首次成交。
参数:
cost (float, optional) – 每笔股票交易支付的固定佣金金额。
class zipline.finance.commission.PerDollar(cost=0.0015)
通过应用每美元交易固定成本来模拟佣金。
参数:
cost (float, optional) – 每交易一美元股票支付的固定佣金金额。默认是每交易一美元支付 0.0015 美元的佣金。
滑点模型
zipline.api.set_slippage(self, us_equities=None, us_futures=None)
设置模拟的滑点模型。
参数:
- us_equities (EquitySlippageModel) – 用于交易美国股票的滑点模型。
- us_futures (FutureSlippageModel) – 用于交易美国期货的滑点模型。
注意
此函数只能在 initialize() 期间调用。
另请参阅
zipline.finance.slippage.SlippageModel
class zipline.finance.slippage.SlippageModel
滑点模型的抽象基类。
滑点模型负责模拟中订单成交的费率和价格。
要实现一个新的滑点模型,创建一个 SlippageModel 的子类,并实现 process_order()。
process_order(data, order)
volume_for_bar
当前分钟内已为当前填充资产填充的股份数量。此属性由基类自动维护。如果单个资产有多个未完成订单,子类可以使用它来跟踪已填充的总量。
类型:
注意
定义自己的构造函数的子类应在执行其他初始化之前调用super(, self).__init__()。
abstract process_order(data, order)
计算当前分钟内order的成交股数和价格。
参数:
- 数据 (zipline.protocol.BarData) – 给定柱的数据。
- 订单 (zipline.finance.order.Order) – 要模拟的订单。
返回:
- 执行价格 (float) – 成交价格。
- 执行量 (int) – 应成交的股数。必须在
0和order.amount - order.filled之间。如果已成交的数量少于剩余数量,order将保持开放状态,并在下一分钟再次传递给此方法。
引发:
zipline.finance.slippage.LiquidityExceeded – 如果在当前资产的当前柱上不应再处理更多订单,则可能会引发此异常。
注释
在调用此方法之前,volume_for_bar 将设置为当前分钟内已为 order.asset 成交的股数。
process_order() 在历史成交量为零的柱上不会被基类调用。
class zipline.finance.slippage.FixedSlippage(spread=0.0)
假设所有资产具有固定大小的点差简单模型。
参数:
点差 (float, 可选) – 假设所有资产的点差大小。买单将按close + (spread / 2)成交。卖单将按close - (spread / 2)成交。
注释
该模型不对成交大小设置限制。只要在订单资产中发生任何交易活动,资产的订单总是会立即成交,即使订单的大小大于历史成交量。
class zipline.finance.slippage.VolumeShareSlippage(volume_limit=0.025, price_impact=0.1)
将点差建模为历史成交量百分比的二次函数。
买单将按以下方式成交:
price * (1 + price_impact * (volume_share ** 2))
卖单将按以下方式成交:
price * (1 - price_impact * (volume_share ** 2))
其中 price 是柱的收盘价,volume_share 是已成交的每分钟成交量的百分比,最多可达 volume_limit 的最大值。
参数:
- 成交量限制 (float, 可选) – 每个柱上可以成交的历史成交量的最大百分比。0.5 表示 50% 的历史成交量。1.0 表示 100%。默认值为 0.025(即,2.5%)。
- 价格影响 (float, 可选) – 价格影响的缩放系数。较大的值将导致更多的模拟价格影响。较小的值将导致较少的模拟价格影响。默认值为 0.1。
管道
有关更多信息,请参阅 Pipeline API
zipline.api.attach_pipeline(self, pipeline, name, chunks=None, eager=True)
注册一个管道,以便在每天开始时计算。
参数:
- pipeline (Pipeline) – 要计算的管道。
- name (str) – 管道的名称。
- chunks (int 或 迭代器*,* 可选) – 要计算管道结果的天数。增加此数字将使获取第一个结果的时间更长,但可能会提高模拟的总运行时间。如果传递了迭代器,我们将根据迭代器的值以块的形式运行。默认值为 True。
- eager (bool, 可选) – 是否在 before_trading_start 之前计算此管道。
返回:
pipeline – 返回未更改的附加管道。
返回类型:
Pipeline
(另请参见)
`zipline.api.pipe