请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  数理科学 帖子:3365779 新帖:11

回测账户数据——context

外汇老法师发表于:9 月 17 日 16:00回复(1)

相信有些用户对context对象及其层层嵌套其他对象困惑不已,本文对context的结构及其用法进行了讲解,并给出了常见用法举例。希望会对大家有帮助。

回测运行数据——context对象¶

context是用来存储策略回测过程中的,以账户信息为主,比如,当前进行到什么时间,持有哪些股票,有多少现金等等。context的数据类型是对象,其特点是可自由定义存储结构,而且可以嵌套另一个对象,也因此新手往往不太会用。本文将专门介绍下context对象。

通过阅读各个对象的介绍,可见回测数据的存储是有层级关系的,如下图:(如果看不清,可以右键图片,在新标签页打开图片) Context对象.png

(随着平台更新,context的内容已经变化,但基本结构及取用方法大同小异)

各个对象的详细API介绍连接如下:

  1. Context对象
  2. SubPortfolio对象
  3. Portfolio对象
  4. Position对象

取用方法:¶

对象层与层之间用“.”隔开,从顶层写到底层。如获取回测的终止时间,写法为context.run_params.end_date。需要特别注意的是,portfolio(或者subportfolios)中的position(或者long_positions或者short_positions)是一个dict,而其value才是个Position对象。

dict是一种python的数据类型,其特点是每个数据(value)都有一个相对应的名字索引(key),取用某value方法是字典名[key],详情见数据类型之字典。

举例:¶

如要在回测日志中输出持有的某只股票(xxxxxx.xxxx)的开仓均价时,写法为:

print context.portfolio.positions['xxxxxx.xxxx'].avg_cost

常用回测数据取用举例:¶

  1. 当前时间 context.current_dt
  2. 当前时间的“年-月-日”的字符串格式 context.current_dt.strftime("%Y-%m-%d")
  3. 前一个交易日 context.previous_date
  4. 当前可用资金 context.portfolio.avaliable_cash
  5. 持仓价值 context.portfolio.positions_value
  6. 累计收益 context.portfolio.returns
  7. 当前持有股票 context.portfolio.positions.keys()
  8. 当前持有的某股票的开仓均价 context.portfolio.positions['xxxxxx.xxxx'].avg_cost
  9. 当前持有的某股票的可卖持仓量 context.portfolio.positions['xxxxxx.xxxx'].closeable_amount
  10. 当前持有的某股票的最新价格 context.portfolio.positions['xxxxxx.xxxx'].price

根据以上的举例,应该可以类比写出其他的。

答疑与延伸:

  • 为什么postions是dict,不应该是一个Position对象吗? postions是一个字典,字典的每个value才是一个Position对象。只是这个字典的名字和Position对象的名有点像而已。
  • subportfolios似乎没怎么提? 一般股票策略,并不会用到subportfolios。如果做期货,有分仓需求时会用到。相关API用法:账户分仓操作。
  • datetime 是什么? datetime 是python中的时间库,详情见:Python 中时间的用法
 

全部回复

0/140

量化课程

    移动端课程