1

我正在使用 Matlab 的内置 Interactive Broker 库来连接和使用 TWS。我正在尝试请求实时数据,但是,过了一段时间它就卡在了相同的价格上。它会正常更新几分钟,然后停止更新并给出相同的价格。

我的代码有问题吗?

try
    close(ib);
    close(conn);
catch

end

clear all;

ibBuiltInRealtimeData = struct('id',0,'BID_PRICE',0,'BID_SIZE',0,'ASK_PRICE',0,'ASK_SIZE',0);

    ib = ibtws('',7496);
    f = '233';

    ibContract = ib.Handle.createContract;
    ibContract.symbol = 'EUR';
    ibContract.secType = 'CASH';
    ibContract.exchange = 'IDEALPRO';
    ibContract.primaryExchange = '';
    ibContract.currency = 'USD';

    ibContract2 = ib.Handle.createContract;
    ibContract2.symbol = 'M6E';
    ibContract2.secType = 'FUT';
    ibContract2.exchange = 'GLOBEX';
    ibContract2.primaryExchange = '';
    ibContract2.currency = 'USD';
    ibContract2.expiry = '201609';

    contracts = {ibContract;ibContract2};

    tickerid = realtime(ib,contracts,f);

while true

    d2 = ibBuiltInRealtimeData
    tickerid
    pause(1)
end
4

2 回答 2

2

这可能是由于网络问题导致 Matlab 的连接器卡在无效状态,或者 IB 的服务器可能已卡住。您可以尝试断开与 IB 的连接,然后重新连接并重新请求实时数据 - 也许这会重置连接问题并从那时起向您发送良好的数据。

或者,尝试使用 IB-Matlab 连接器 ( http://UndocumentedMatlab.com/IB-Matlab ),据报道它更健壮。

于 2016-06-22T06:06:53.097 回答
0

如果您使用自定义事件处理程序,您通常可以绕过导致此功能挂起的交易者工具箱中的有问题的代码。

try
close(ib);
close(conn);
catch

end

clear all;

global simpleStructure
simpleStructure=struct;

ib = ibtws('',7496);
f = '233';

ibContract = ib.Handle.createContract;
ibContract.symbol = 'EUR';
ibContract.secType = 'CASH';
ibContract.exchange = 'IDEALPRO';
ibContract.primaryExchange = '';
ibContract.currency = 'USD';

ibContract2 = ib.Handle.createContract;
ibContract2.symbol = 'M6E';
ibContract2.secType = 'FUT';
ibContract2.exchange = 'GLOBEX';
ibContract2.primaryExchange = '';
ibContract2.currency = 'USD';
ibContract2.expiry = '201609';

contracts = {ibContract;ibContract2};

tickerid = realtime(ib,contracts,f, @yourEventHandler);

function yourEventHandler(varargin)

global simpleStructure;
id=num2str(varargin{3});

switch varargin{4}
    case 0; simpleStructure.(['i' id]).BID_SIZE=varargin{5};
    case 1; simpleStructure.(['i' id]).BID_PRICE=varargin{5};
    case 2; simpleStructure.(['i'  id]).ASK_PRICE=varargin{5};
    case 3; simpleStructure.(['i'  id]).ASK_SIZE=varargin{5};
end

end

不需要使用全局变量,只是为了简单起见。我经常使用静态方法作为事件处理程序并将其他所有内容包装在一个类中。除非你是多线程的,否则这并不重要。(如果您使用多线程,只需使用 java 或 c# 并为您节省数小时的头痛)

于 2016-12-21T01:38:36.343 回答