4

アルゴリズム取引と 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 ();
        }
}    

}

4

1 に答える 1