我正在进行算法交易和IB API的自学和实验。我决定使用Java,但也可以考虑切换到C++。我通过一个在线教程走过了下面显示的代码,但想将其扩展到不止一个股票。我想查看所有SP500股票的股票数据,并根据此做出决策。
以下代码将创建一个Microsoft的合同并获取其数据,但我想获取所有500只股票的数据。在帖子中,EWrapper接口定义的所有其他方法都被省略以便更加易读。
我认为我需要将股票标志存储在文件中,解析它,并逐个将每个合约添加到向量中。但是,我不确定如何在此之后监视数据。如果我可以顺序循环遍历每个标记并请求数据,那就太好了,但我相信流会在异步线程上处理(如果我错了请纠正我)。
那么我如何遍历所有500支股票并检查它们的股票数据?
期待您提供代码片段和解释。谢谢!
以下代码将创建一个Microsoft的合同并获取其数据,但我想获取所有500只股票的数据。在帖子中,EWrapper接口定义的所有其他方法都被省略以便更加易读。
我认为我需要将股票标志存储在文件中,解析它,并逐个将每个合约添加到向量中。但是,我不确定如何在此之后监视数据。如果我可以顺序循环遍历每个标记并请求数据,那就太好了,但我相信流会在异步线程上处理(如果我错了请纠正我)。
那么我如何遍历所有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 ();
}
}
}