2016-06-20 4 views
1

Matlabの組み込みのインタラクティブブローカライブラリを使用してTWSに接続して使用しています。しかし、私はリアルタイムデータを要求しようとしていますが、しばらくしてからは同じ価格で立ち往生してしまいます。それは通常数分更新され、その後、更新が止まり、同じ価格が与えられます。Matlab IBのリアルタイムデータはしばらく後にスタックします

私のコードに何か問題がありますか?

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 

答えて

2

これは、ネットワークのMatlabのコネクタが無効な状態で立ち往生していた問題、または立ち往生されている可能性がありIBのサーバーのいずれかであることができます。 IBとの接続を切断して、再接続してリアルタイムデータを再要求することができます。これにより、接続の問題がリセットされ、その時点から良好なデータが送信されます。

また、報告されているIB-Matlabコネクタ(http://UndocumentedMatlab.com/IB-Matlab)を使用してみてください。

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#を使用し、頭痛の時間を節約してください)

関連する問題