이 문제를 어떻게 디버그할 수 있을까요?
계정에는 포지션이 없는 경우 아래의 코드를 사용하여 포지션 정보를 얻을 수 있습니다.
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 문장 안의 continuue를 실행해서 루크를 다시 시작하지만 실디 테스트는 여전히 오류가 발생합니다.
TypeError: cannot read property 'Type' of undefined at main (FILE:129)
만약 제가 만약의 조건을 바꾸려고 한다면,[0]==null 또는 typeof(position) ==undefined는 모두 작동하지 않습니다.[0].Type bar가 정책 오류를 발생시킵니다.
이 문제는 어떻게 해결될까요?
解决办法如下:
var position = _C(exchange.GetPosition);
if(position.length>0)
{
//请把代码放在这个大括号里. 原理如下: 先判断这个持仓函数返回的数组的长度, 长度大于0, 表示有持仓信息了, 直接用null, undefine判断都不行. 然后才能访问position[0]
}
遇到相同的问题了,感觉有必要针对exchange.GetPosition单独设置一个容错函数,否则在没有持仓的情况下,这个函数几乎完全无法使用
顺便请问下楼主,最后是如何解决的
看下了帖子 ,发现问题了, 在您调用 exchange.GetPosition() 的时候 如果 你没有持仓 , 会返回 [] , 一个空数组, 这个 空数组 并不等于 null , 就是你判断
position == null 的时候 ,是 false 的, 所以不会 触发 continue, 然后 你访问 position[0] 这个元素是 不存在的,所以是 undefine ,再调用 他的 Type 属性 就报错了。
- 1

