アルゴリズム取引と IB API について、自己学習と実験を行っています。Java を使用することにしましたが、C++ に切り替えることもできます。以下に示すコードを説明するオンライン チュートリアルを実行しましたが、1 つの株だけを超えてコードを拡張することに疑問を抱いていました。すべての SP500 株を調べてティッカー データをチェックし、それに基づいて決定を下したいと考えています。
以下のコードは Microsoft の契約を作成し、データを取得しますが、500 株すべてのデータを取得したいと考えています。EWrapper インターフェイスで定義されている他のすべてのメソッドは、読みやすくするために投稿から除外されました。
ティッカー シンボルをファイルに保存し、これを解析し、各コントラクトを 1 つずつベクターに追加する必要があると考えています。ただし、その後のデータの監視方法がわかりません。各ティッカーを順番にループしてデータを要求できればいいのですが、ストリームは非同期スレッドで処理されると思います (間違っている場合は修正してください)。
では、500 銘柄すべてを調べてティッカー データを確認するにはどうすればよいでしょうか。
コードの断片と説明をいただければ幸いです。ありがとう!
// Import Java utilities and Interactive Brokers API
import java.util.Vector;
import com.ib.client.Contract;
import com.ib.client.ContractDetails;
import com.ib.client.EClientSocket;
import com.ib.client.EWrapper;
import com.ib.client.Execution;
import com.ib.client.Order;
import com.ib.client.OrderState;
import com.ib.client.TagValue;
import com.ib.client.CommissionReport;
import com.ib.client.UnderComp;
// RealTimeBars Class is an implementation of the
// IB API EWrapper class
public class RealTimeBars implements EWrapper
{
// Keep track of the next ID
private int nextOrderID = 0;
// The IB API Client Socket object
private EClientSocket client = null;
public RealTimeBars ()
{
// Create a new EClientSocket object
client = new EClientSocket (this);
// Connect to the TWS or IB Gateway application
// Leave null for localhost
// Port Number (should match TWS/IB Gateway configuration
client.eConnect (null, 7496, 0);
// Pause here for connection to complete
try
{
// Thread.sleep (1000);
while (! (client.isConnected()));
} catch (Exception e) {
e.printStackTrace ();
};
// Create a new contract
Contract contract = new Contract ();
contract.m_symbol = "MSFT";
contract.m_exchange = "SMART";
contract.m_secType = "STK";
contract.m_primaryExch = "NASDAQ";
contract.m_currency = "USD";
// Create a TagValue list
Vector<TagValue> realTimeBarsOptions = new Vector<TagValue>();
// Make a call to start off data retrieval
client.reqRealTimeBars(0, contract,
5, // Bar Size 5 seconds
"TRADES", // whatToShow
false, // useRTH
realTimeBarsOptions);
// At this point our call is done and any market data events
// will be returned via the realtimeBar method
}
public static void main (String args[])
{
try
{
// Create an instance
// At this time a connection will be made
// and the request for market data will happen
RealTimeBars myData = new RealTimeBars();
}
catch (Exception e)
{
e.printStackTrace ();
}
}
}