알고리즘 거래 및 IB API에 대한자가 학습 및 실험을하고 있습니다. Java를 사용하기로 결정했지만 C++로 전환 할 수 있습니다. 나는 아래의 코드를 살펴 보았으나 하나의 주식 만 지나치게 확장하는 것에 대해 궁금해하는 온라인 자습서를 살펴 보았습니다. 모든 SP500 주식을 살펴보고 티커 데이터를 확인하여이를 기반으로 의사 결정을 내리고 싶습니다.IB Java API : 여러 계약에 대한 티커 데이터 (실시간 바) 추출
아래 코드는 Microsoft의 계약을 만들고 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();
}
}
}
질문은 무엇인가에서인가? –
@JBNizet 모든 500에 대한 데이터를 얻는 방법을 모르고 각 반복에서 조건과 비교하면서 반복합니다. – jonnyd42
500 라인의 데이터 구독에 대해 지불 한 realTimeBars unle에서는이 작업을 수행 할 수 없습니다. 기본값은 100입니다. reqMarketData()에서만 수행 할 수 있으며 true로 설정하십시오. 스냅 샷이 암시 하듯이 스트리밍 데이터 구독이 아니라 일시적인 것입니다. IB는이 상황에 대한 훌륭한 데이터 제공 업체는 아니지만 먼저 스냅 샷을 시도 할 수 있습니다. – brian