资源加载中... loading...

getposition 这个函数在没有仓位的情况下报错

Author: jiaozheng, Created: 2018-04-12 16:36:42, Updated:

请问这个问题要怎么debug呢? 在账号没有仓位的情况下 使用如下代码获取仓位信息 while(true){ var position=_C(exchange.GetPosition)

if(position==null){ continue } type=position[0].Type if(type==PD_LONG){ if(exsell!==sellPrice){ CancelPendingOrders() exchange.SetDirection(“closebuy”) exchange.Sell(sellPrice,position[0].Amount) exsell=sellPrice } } 在账号没有仓位的时候,getposition获取的应该是个空数组[],所以会执行if语句里面的continue 让循环重新开始,但是实盘测试还是报错 TypeError: cannot read property ‘Type’ of undefined at main (FILE:129)

我试过改变if中的条件,如position[0]==null 或者typeof(position)==undefined 都不行 还是会执行后面的“type=position[0].Type”使策略报错

这个问题该如何解决呢?


More

xionglonghui 解决办法如下: var position = _C(exchange.GetPosition); if(position.length>0) { //请把代码放在这个大括号里. 原理如下: 先判断这个持仓函数返回的数组的长度, 长度大于0, 表示有持仓信息了, 直接用null, undefine判断都不行. 然后才能访问position[0] }

yumount 遇到相同的问题了,感觉有必要针对exchange.GetPosition单独设置一个容错函数,否则在没有持仓的情况下,这个函数几乎完全无法使用 顺便请问下楼主,最后是如何解决的

发明者量化-小小梦 看下了帖子 ,发现问题了, 在您调用 exchange.GetPosition() 的时候 如果 你没有持仓 , 会返回 [] , 一个空数组, 这个 空数组 并不等于 null , 就是你判断 position == null 的时候 ,是 false 的, 所以不会 触发 continue, 然后 你访问 position[0] 这个元素是 不存在的,所以是 undefine ,再调用 他的 Type 属性 就报错了。