Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB交易工具箱:为什么IB代码卡在for循环中?_Matlab_For Loop_Algorithmic Trading - Fatal编程技术网

MATLAB交易工具箱:为什么IB代码卡在for循环中?

MATLAB交易工具箱:为什么IB代码卡在for循环中?,matlab,for-loop,algorithmic-trading,Matlab,For Loop,Algorithmic Trading,我正在使用交易工具箱与IB TWS建立连接。通常,API工作正常,我的代码执行我的意图,如检索实时数据和执行命令 我现在想做的是在for-循环中执行我的代码块(通过多种策略运行),但一旦我尝试在for循环中执行代码,代码似乎卡在无限循环中,我只能通过关闭MATLAB(在这种情况下,即使是CTRL+c,也不会起作用) 然后,“我的命令”窗口会快速显示IB错误消息,如 无法注销“xxx”,其中xxx是多种IB功能,如tickPrice,tickData等 奇怪的是,当我手动突出显示代码并运行它(使用

我正在使用交易工具箱与IB TWS建立连接。通常,API工作正常,我的代码执行我的意图,如检索实时数据和执行命令

我现在想做的是在
for
-循环中执行我的代码块(通过多种策略运行),但一旦我尝试在
for
循环中执行代码,代码似乎卡在无限循环中,我只能通过关闭
MATLAB
(在这种情况下,即使是
CTRL
+
c
,也不会起作用)

然后,“我的命令”窗口会快速显示
IB
错误消息,如

无法注销“xxx”

其中xxx是多种
IB
功能,如
tickPrice
tickData

奇怪的是,当我手动突出显示代码并运行它(使用F9)时,一切都像一个符咒

根据我的研究,它似乎与
ib
连接的处理方式有关。我在
for
循环的开头(在循环内部)打开
ib
连接,然后关闭它和循环的结尾(也在循环内部)

我已经尝试在“close”命令后暂停执行1-2秒,以确保有足够的时间正确关闭连接,但没有效果


有谁能帮我解决这个问题,或者对如何解决这个问题有什么想法吗?

交易工具箱中的大多数问题都是Matlab内置事件处理程序的产品。要解决您的问题,您需要为每个检索数据的函数定义一个自定义事件处理程序。同时避免最小化ib as sta的打开和关闭如果您正在运行各种GUI、类或脚本,则最多可以有10个连接

ib=ibtws('1',7496),ib2=ibtws('2',7496)

我建议将ibtws控件包装到类中,这似乎比将它们存储在基本工作区中效果更好

在关闭GUI或包装器之前取消所有相关数据请求 ib.Handle.cancelMktData(请求ID); ib.Handle.cancelMktDepth(请求ID);…等


不幸的是,Mathworks构建了一个随机数生成器(1:10000)来为其大多数功能种子ReqID。这通常会导致将重复的请求ID发送到IB,并可能导致致命错误。(这可能是他们希望您经常打开和关闭控件的原因)除非你想重写他们的一些代码,否则你对此无能为力。

交易工具箱的大多数问题都是Matlab内置事件处理程序的产品。要解决你的问题,你需要为每个检索数据的函数定义一个自定义事件处理程序。同时避免最小化ib的打开和关闭如果您正在运行各种GUI、类或脚本,则最多可以有10个连接

ib=ibtws('1',7496),ib2=ibtws('2',7496)

我建议将ibtws控件包装到类中,这似乎比将它们存储在基本工作区中效果更好

在关闭GUI或包装器之前取消所有相关数据请求 ib.Handle.cancelMktData(请求ID); ib.Handle.cancelMktDepth(请求ID);…等


不幸的是,Mathworks构建了一个随机数生成器(1:10000)来为其大多数功能种子ReqID。这通常会导致将重复的请求ID发送到IB,并可能导致致命错误。(这可能是他们希望您经常打开和关闭控件的原因)除非您想重写他们的一些代码,否则您对此无能为力。

您可能已经注意到,StackOverflow鼓励使用基于MCVE的问题。您的问题需要重新生成代码,以确认问题的根本原因。很难“找到”air提供的任何答案,没有MCVE,反之亦然问题隔离和回归代码单元测试只会导致结果。希望您能很快找到针对您观察到的问题的好建议。MCVE在这两个方面都有很大帮助。无论如何,请享受成为这一伟大知识社区的积极贡献者的乐趣!事实上,互动经纪人条款和条件可能会对阻止“密集型”交易构成政策限制重新连接。通常,代理端连接通信网关把关人不喜欢频繁设置/关闭/重新建立连接,因为这可能会在通信网关上引入较高的处理开销,也可能表明客户端软件组件的某些错误行为。简单地说,“不要光着脚拍蛇”(为什么会有人“走进狮子窝”,不是吗?)你可能已经注意到,StackOverflow鼓励使用基于MCVE的问题。你的问题需要复制一个代码,以确认问题的根本原因。很难“找到”air提供的任何答案,没有MCVE,反之亦然问题隔离和回归代码单元测试只会导致结果。希望您能很快找到针对您观察到的问题的好建议。MCVE在这两个方面都有很大帮助。无论如何,请享受成为这一伟大知识社区的积极贡献者的乐趣!事实上,互动经纪人条款和条件可能会对阻止“密集型”交易构成政策限制重新连接。通常,代理端连接通信网关把关人不喜欢频繁设置/关闭/重新建立连接,因为这可能会在通信网关上引入较高的处理开销,也可能表明客户端软件组件的某些错误行为。简单地说,“不要光着脚轻拍一条蛇”(为什么