取用方法:¶
对象层与层之间用“.”隔开,从顶层写到底层。如获取回测的终止时间,写法为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
。
常用回测数据取用举例:¶
- 当前时间
context.current_dt
- 当前时间的“年-月-日”的字符串格式
context.current_dt.strftime("%Y-%m-%d")
- 前一个交易日
context.previous_date
- 当前可用资金
context.portfolio.avaliable_cash
- 持仓价值
context.portfolio.positions_value
- 累计收益
context.portfolio.returns
- 当前持有股票
context.portfolio.positions.keys()
- 当前持有的某股票的开仓均价
context.portfolio.positions['xxxxxx.xxxx'].avg_cost
- 当前持有的某股票的可卖持仓量
context.portfolio.positions['xxxxxx.xxxx'].closeable_amount
- 当前持有的某股票的最新价格
context.portfolio.positions['xxxxxx.xxxx'].price
根据以上的举例,应该可以类比写出其他的。
答疑与延伸:
- 为什么postions是dict,不应该是一个Position对象吗? postions是一个字典,字典的每个value才是一个Position对象。只是这个字典的名字和Position对象的名有点像而已。
- subportfolios似乎没怎么提? 一般股票策略,并不会用到subportfolios。如果做期货,有分仓需求时会用到。相关API用法:账户分仓操作。
- datetime 是什么? datetime 是python中的时间库,详情见:Python 中时间的用法