可否简单说明一下回测时GetTicker()和GetRecords()获取的数据是基于哪个时间点的? 比如遇到了这样一个非常奇怪的问题,下面这段代码: function main() { while (true) { var records = exchange.GetRecords(); records.pop(); Log(records.length); Sleep(60000); } } 最后输出records长度一直是0:
但是如果注释掉pop()调用: function main() { while (true) { var records = exchange.GetRecords(); //records.pop(); Log(records.length); Sleep(60000); } } 最后输出就很正常:
如果没有while循环,那么保留pop()调用就没问题: function main() { var records = exchange.GetRecords(); records.pop(); Log(records.length); Sleep(60000); }
能否解答一下?
Zero GetRecords返回的数组, 其实是低层维护的同一个变量, 所以不能直接更改.
guigui17f 可能是js语言的特性导致的?我用slice()拷贝一次就没事了,不明白为什么……
发明者量化-小小梦 用这个 深拷贝函数试下, 每次 获取到的 records 深拷贝一下, 然后就可以随意修改 复制后的 变量了。 ``` var cloneObj = function(obj) { // 深拷贝 对象函数 var str, newobj = obj.constructor === Array ? [] : {}; if (typeof obj !== 'object') { return; } else if (JSON) { str = JSON.stringify(obj); //系列化对象 newobj = JSON.parse(str); //还原 } else { for (var i in obj) { newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; }; ```
发明者量化-小小梦 slice() 这个是 彻底的复制 , 并不是引用。引用的操作 其实是 同一个 变量,修改了 下次获取 就会有影响。
guigui17f 原来如此。建议在API文档里说明一下,防止误操作。