avatar of guigui17f guigui17f
关注 私信
0
关注
0
关注者

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

创建于: 2017-10-31 18:38:15, 更新于: 2017-10-31 18:48:57
comments   5
hits   1533

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

但是如果注释掉pop()调用: function main() {  while (true) {   var records = exchange.GetRecords();   //records.pop();   Log(records.length);   Sleep(60000);  } } 最后输出就很正常: 请问回测时调用API获取的数据是基于哪个时间点的?

如果没有while循环,那么保留pop()调用就没问题: function main() {  var records = exchange.GetRecords();  records.pop();  Log(records.length);  Sleep(60000); } 请问回测时调用API获取的数据是基于哪个时间点的?

能否解答一下?

相关推荐
全部留言
avatar of Zero
Zero
GetRecords返回的数组, 其实是低层维护的同一个变量, 所以不能直接更改.
2017-10-31 20:24:34
avatar of guigui17f
guigui17f
原来如此。建议在API文档里说明一下,防止误操作。
2017-10-31 20:43:29
avatar of guigui17f
guigui17f
可能是js语言的特性导致的?我用slice()拷贝一次就没事了,不明白为什么……
2017-10-31 19:48:36
avatar of 发明者量化-小小梦
发明者量化-小小梦
用这个 深拷贝函数试下, 每次 获取到的 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; }; ```
2017-11-01 09:09:10
avatar of 发明者量化-小小梦
发明者量化-小小梦
slice() 这个是 彻底的复制 , 并不是引用。引用的操作 其实是 同一个 变量,修改了 下次获取 就会有影响。
2017-11-01 09:04:57