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

量化交易吧 /  量化平台 帖子:3364736 新帖:0

关于( ***在position中不存在,为了保持兼容

爱汇小王子发表于:5 月 10 日 07:34回复(1)

有不少同学对的出现类似上述的warning表示疑惑,在这里统一回复一下:

Ⅰ.???在position中不存在,为了保持兼容我们返回空的position对象

1,为什么出现上述warning呢?
    这是因为当我们使用context.portfolio.positions(字典类型) 时查询了一个并不存在于于这个字典的标的持仓信息,为了兼容不报错才出现的警告。比如,我们的仓位中没有000001这只股票,当我们调用  context.portfolio.positions['000001.XSHE']  时,就会提示 :
Security(code=000001.XSHE) 在 positions 中不存在, 为了保持兼容, 我们返回空的 Position 对象, amount/price/*g_cost 都是 0
(当然其他查询仓位信息的方法也会导致上边的问题,这里只举了一个最简单的例子)
   这些警告对策略本身运行并没有影响,但如果策略中有用到上述数据的有可能会引发逻辑上的问题(很小的可能性哦,和策略有关,一般可选择忽略)。

2, 如何避免看到此类警告呢?(非处女座请忽略)
   在调用上述方法前 ,先判断标的是否存在于上述对象中

 if  stock in context.portfolio.positions.keys():       print  context.portfolio.positions[stock]

3,卖出仓位中的所有标的:

for stock in context.portfolio.positions.keys():       order_target(stock,0)

11*d94ee7321393493f4fc138de2cf.png

506ab32825549f98d6749*eee9729d.png

Ⅱ.下单数量为0,订单取消/目标数量已经满足, 没有提交委托

一般有以下几种原因,并会在日志中提醒:
1, 使用了order_target或者order_target_value进行下单,仓位中标的的数量已经等于预期的数量,所以订单取消。
2, 下单的手数或下单所用的资金不足一手,调整为0,订单取消
3,  累计成交量为0,停牌,退市,未上市等原因

全部回复

0/140

量化课程

    移动端课程