quantopian系列—Algorithm( 三 )
许多滑点模型的行为取决于算法所捕获的总交易量的多少 。 你可以使用self.volume_for_bar()来查看当前证券在这一栏中到目前为止已经成交了多少股 。 如果你的算法在同一栏里对同一只股票有许多不同的订单 , 这对于确保你不会采取不切实际的大部分交易量是有用的 。
如果您的滑点模型没有对订单的全部金额进行交易 , 那么订单将以更新的金额值保持开放 , 并将在下一栏传递给process_order 。 限额未达到的订单将不会被传递给process_order 。 最后 , 如果你的交易只有0股或比原来的订单金额更多 , 将抛出一个异常 。
佣金
在Quantopian上 , 交易费用是通过佣金模式获取的 。 这个佣金模式会影响到回测中下单的成交率 。 美股订单的默认佣金模式是PerShare , 每股0.001美元 , 每个订单没有最低费用 。 第一次填单至少会产生最低佣金 , 后续填单会产生额外佣金 。
佣金从算法的可用现金中提取 。 无论您使用何种佣金模式 , 在任何补仓发生之前取消的订单都不会产生任何佣金 。
要覆盖默认的佣金模式 , 请使用set_commission()方法 , 并传入PerShare或PerTrade 。 像滑点模型一样 , set_commission()必须在initialize()方法中调用 。
您可以通过使用get_order()获取订单 , 然后查看它的佣金字段来查看与订单相关联的佣金数量 。
- 手动资产查询
当使用 symbol()时 , 你需要考虑你的模拟日期 , 以确保股票代码指的是正确的股票--有时 , 股票代码会随着时间的推移而被重复使用 , 因为公司退市和新公司开始交易 。 例如 , G曾经指的是吉列 , 但现在指的是Genpact 。 如果一个股票代码被多个公司重用 , 使用set_symbol_lookup_date()来指定解决冲突时使用的日期 。 这个日期需要在调用symbol()之前设置 。
另一个手动引用资产的选项是使用 sid() 函数 。 在我们的系统中 , 所有证券都有一个独特的证券标识符(SID) 。 由于股票代码可以在不同的交易所之间重复使用 , 使用SID可以防止任何混淆 , 并确保无论模拟日期如何 , 您都能调用所需的资产 。 你可以使用sid()方法通过其ID、符号或名称来查找证券 。
当你使用symbol()或sid()函数时 , IDE将自动填充SID和符号 。
Quantopian的回溯测试器会尝试自动调整回溯测试的开始或结束日期 , 以适应正在使用的资产 。 例如 , 如果你想在2004年运行一个特斯拉的回溯测试 , 回溯测试会建议你从2010年6月28日开始 , 即该证券交易的第一天 。 当使用symbol()而不是sid.()时 , 这种能力会大大降低 。
symbol()和symbols()方法只接受字符串文字作为参数 。 sid()方法只接受一个整数字面作为参数 。 为了快速检索回测所需的数据 , 会代码进行静态分析 。
使用数据在算法中 , 有两种访问数据的方式 。
- Pipeline 。 比较常见的访问数据的方式是在算法中附加一个Pipeline , 每天检索输出 。 一旦你在算法中拥有了因子数据(由附加的Pipeline生成) , 你就可以用它来进行交易和组合构建决策 。
- BarData查找 。 除了使用pipeline , 你还可以使用内置的BarData对象(在定期函数中通过数据变量提供)查询分钟级的价格和成交量数据 。 BarData提供的方法可以让你在算法中查询当前和历史分钟频率数据 。
- 算法中使用Pipeline
例如 , 下面的代码可以从以'my_pipeline'为名附加的Pipeline中获取输出 。
文章插图
pipeline_output()的返回值将是一个pd.DataFrame , 其列数与Pipeline定义中包含的列数相对应 , 并且每个资产在当天指定领域的支持交易所上市的资产为一行 。 此外 , 任何没有通过screen(如果提供了screen)的股票将从输出中省略 。
重要的是 , pipeline_output()返回的pd.DataFrame与Research中run_pipeline()返回的pd.DataFrame略有不同 。 研究中的Pipeline产生pd.MultiIndex数据帧 , 同时与第一级别指数对应模拟日期 , 第二级别指数对应股票对象 。 附属于算法的Pipeline有一个隐含的模拟日期等于当前最靠后的模拟日期 , 所以输出的数据帧有一个只包含股权对象的常规pd.Index 。
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 采用|消息称一加9系列将推出三款新机,新增一加9E
- 世代|Z星球——腾讯布局Z世代教育社交的新尝试
- 脉搏|把握时代发展脉搏,尽展巴蜀版权风采——2020年成都数字版权交易博览会成功举办
- 系列|首销300000台!红米Note 9系列,或许可以说恭喜你了?
- 系列|联想碰瓷Redmi后正式复活乐檬手机!乐檬K12系列即将到来
- 系列|Redmi Note9系列三剑客来袭,差别到底有多大?该如何选择?
- 超强|RedmiNote9系列发布!天玑800U赋予超强5G性能
- 回顾|华为P系列回顾
- 情况|刚发布就卖出30万台:红米Note9系列稳了,销售情况追赶前代