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

请问回测时调用API获取的数据是基于哪个时间点的?

Author: guigui17f, Created: 2017-10-31 18:38:15, Updated: 2017-10-31 18:48:57

可否简单说明一下回测时GetTicker()和GetRecords()获取的数据是基于哪个时间点的? 比如遇到了这样一个非常奇怪的问题,下面这段代码: function main() {  while (true) {   var records = exchange.GetRecords();   records.pop();   Log(records.length);   Sleep(60000);  } } 最后输出records长度一直是0: img

但是如果注释掉pop()调用: function main() {  while (true) {   var records = exchange.GetRecords();   //records.pop();   Log(records.length);   Sleep(60000);  } } 最后输出就很正常: img

如果没有while循环,那么保留pop()调用就没问题: function main() {  var records = exchange.GetRecords();  records.pop();  Log(records.length);  Sleep(60000); } img

能否解答一下?


More

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文档里说明一下,防止误操作。