定制交互式经纪人';reqIds()和reqMktData()Java方法
我试图在InteractiveBrokers的JavaAPI中编写定制代码。有许多方法通过eClientSocket对象发送到TWS。两个示例是reqIds()和reqMktData()。这两个都是void方法,因此它们不返回任何内容。相反,它们“激活”在调用它们的类中编写的方法(在本例中为SampleFrame)。这些方法也是无效的,因为它们不返回任何数据。相反,在这些方法中编写代码(分别是nextvalido()和tickPrice())来处理从TWS(交易员工作站)发回的数据 我在创建nextvalidd()和tickPrice()方法的修改版本时遇到了问题,因为reqIds()和reqMktData()实际上没有在它们自己的代码中指定这些方法名称。因此,我无法编写一个名为“tickPriceBlackBox()”的方法,该方法是从reqMktData()中调用的,或者从reqMktDataBlackBox()的副本中调用的。同样,reqMktData()中没有可以修改为调用特定tickPriceBlackBox()方法的特定代码。这就好像TWS本身中的代码是硬连接的,可以调用tickPrice()方法,这使得我无法创建一个新的方法来返回价格信息 有人能解释发生了什么,或者如何创建解决方案吗 下面是一些代码: //下面是reqMktData()方法 公共同步无效请求数据(int TICKRID、合同、, 字符串通用列表、布尔快照、列表mktDataOptions){ 如果(!m_已连接){ 错误(EClientErrors.NO\u有效\u ID,EClientErrors.NOT\u CONNECTED,“”); 返回; }定制交互式经纪人';reqIds()和reqMktData()Java方法,java,interactive-brokers,Java,Interactive Brokers,我试图在InteractiveBrokers的JavaAPI中编写定制代码。有许多方法通过eClientSocket对象发送到TWS。两个示例是reqIds()和reqMktData()。这两个都是void方法,因此它们不返回任何内容。相反,它们“激活”在调用它们的类中编写的方法(在本例中为SampleFrame)。这些方法也是无效的,因为它们不返回任何数据。相反,在这些方法中编写代码(分别是nextvalido()和tickPrice())来处理从TWS(交易员工作站)发回的数据 我在创建ne
public void tickPrice( int tickerId, int field, double price, int canAutoExecute) {
handleTick(tickerId,field,price);
}
if(m_服务器版本0){
错误(tickerId、EClientErrors.UPDATE_TWS、,
“它不支持圆锥曲线参数。”);
返回;
}
}
if(m_服务器版本<最小服务器版本>交易类){
如果(!IsEmpty(contract.m_tradingClass)){
错误(tickerId、EClientErrors.UPDATE_TWS、,
“它不支持reqMarketData中的tradingClass参数。”);
返回;
}
}
最终int版本=11;
试一试{
//发送请求mkt数据消息
发送(请求市场数据);
发送(版本);
发送(tickerId);
//发送合同字段
如果(m_服务器版本>=MIN_服务器版本请求数据){
发送(contract.m_conId);
}
发送(合同m_符号);
发送(contract.m_secttype);
发送(合同到期);
发送(合同m_罢工);
发送(合同,m_right);
如果(m_服务器版本>=15){
发送(合同m_乘数);
}
发送(合同m_交换);
如果(m_服务器版本>=14){
发送(合同m_primaryExch);
}
发送(合同货币);
如果(m_服务器版本>=2){
发送(contract.m_localSymbol);
}
如果(m_服务器版本>=最小服务器版本交易类){
send(contract.m_tradingClass);
}
如果(m_服务器版本>=8&&BAG_SEC_TYPE.equalsIgnoreCase(contract.m_secType)){
if(contract.m_=null){
发送(0);
}
否则{
send(contract.m_.size());
组合腿组合腿;
对于(int i=0;i=MIN_服务器版本){
如果(contract.m_underComp!=null){
UnderComp UnderComp=contract.m_UnderComp;
发送(真);
发送(欠压缩m_conId);
发送(欠压缩m_delta);
发送(底价);
}
否则{
发送(假);
}
}
如果(m_服务器版本>=31){
/*
*注意:即使仅支持可短记号类型
*如果启动服务器版本33,则相对而言
*在此公开此限制非常昂贵。
*
*因此,我们依赖TWS进行验证。
*/
发送(通用列表);
}
如果(m_服务器版本>=最小服务器版本快照数据){
发送(快照);
}
//发送mktDataOptions参数
如果(m_服务器版本>=最小服务器版本链接){
StringBuilder mktDataOptionsStr=新StringBuilder();
int mktDataOptions count=mktDataOptions==null?0:mktDataOptions.size();
如果(mktdataoptions计数>0){
对于(int i=0;i if (m_serverVersion < MIN_SERVER_VER_SNAPSHOT_MKT_DATA && snapshot) {
error(tickerId, EClientErrors.UPDATE_TWS,
" It does not support snapshot market data requests.");
return;
}
if (m_serverVersion < MIN_SERVER_VER_UNDER_COMP) {
if (contract.m_underComp != null) {
error(tickerId, EClientErrors.UPDATE_TWS,
" It does not support delta-neutral orders.");
return;
}
}
if (m_serverVersion < MIN_SERVER_VER_REQ_MKT_DATA_CONID) {
if (contract.m_conId > 0) {
error(tickerId, EClientErrors.UPDATE_TWS,
" It does not support conId parameter.");
return;
}
}
if (m_serverVersion < MIN_SERVER_VER_TRADING_CLASS) {
if (!IsEmpty(contract.m_tradingClass)) {
error(tickerId, EClientErrors.UPDATE_TWS,
" It does not support tradingClass parameter in reqMarketData.");
return;
}
}
final int VERSION = 11;
try {
// send req mkt data msg
send(REQ_MKT_DATA);
send(VERSION);
send(tickerId);
// send contract fields
if (m_serverVersion >= MIN_SERVER_VER_REQ_MKT_DATA_CONID) {
send(contract.m_conId);
}
send(contract.m_symbol);
send(contract.m_secType);
send(contract.m_expiry);
send(contract.m_strike);
send(contract.m_right);
if (m_serverVersion >= 15) {
send(contract.m_multiplier);
}
send(contract.m_exchange);
if (m_serverVersion >= 14) {
send(contract.m_primaryExch);
}
send(contract.m_currency);
if(m_serverVersion >= 2) {
send( contract.m_localSymbol);
}
if(m_serverVersion >= MIN_SERVER_VER_TRADING_CLASS) {
send( contract.m_tradingClass);
}
if(m_serverVersion >= 8 && BAG_SEC_TYPE.equalsIgnoreCase(contract.m_secType)) {
if ( contract.m_comboLegs == null ) {
send( 0);
}
else {
send( contract.m_comboLegs.size());
ComboLeg comboLeg;
for (int i=0; i < contract.m_comboLegs.size(); i ++) {
comboLeg = contract.m_comboLegs.get(i);
send( comboLeg.m_conId);
send( comboLeg.m_ratio);
send( comboLeg.m_action);
send( comboLeg.m_exchange);
}
}
}
if (m_serverVersion >= MIN_SERVER_VER_UNDER_COMP) {
if (contract.m_underComp != null) {
UnderComp underComp = contract.m_underComp;
send( true);
send( underComp.m_conId);
send( underComp.m_delta);
send( underComp.m_price);
}
else {
send( false);
}
}
if (m_serverVersion >= 31) {
/*
* Note: Even though SHORTABLE tick type supported only
* starting server version 33 it would be relatively
* expensive to expose this restriction here.
*
* Therefore we are relying on TWS doing validation.
*/
send( genericTickList);
}
if (m_serverVersion >= MIN_SERVER_VER_SNAPSHOT_MKT_DATA) {
send (snapshot);
}
// send mktDataOptions parameter
if(m_serverVersion >= MIN_SERVER_VER_LINKING) {
StringBuilder mktDataOptionsStr = new StringBuilder();
int mktDataOptionsCount = mktDataOptions == null ? 0 : mktDataOptions.size();
if( mktDataOptionsCount > 0) {
for( int i = 0; i < mktDataOptionsCount; ++i) {
TagValue tagValue = (TagValue)mktDataOptions.get(i);
mktDataOptionsStr.append( tagValue.m_tag);
mktDataOptionsStr.append( "=");
mktDataOptionsStr.append( tagValue.m_value);
mktDataOptionsStr.append( ";");
}
}
send( mktDataOptionsStr.toString());
}
}
catch( Exception e) {
error( tickerId, EClientErrors.FAIL_SEND_REQMKT, "" + e);
close();
}
}
public void tickPrice( int tickerId, int field, double price, int canAutoExecute) {
handleTick(tickerId,field,price);
}