定制交互式经纪人';reqIds()和reqMktData()Java方法

定制交互式经纪人';reqIds()和reqMktData()Java方法,java,interactive-brokers,Java,Interactive Brokers,我试图在InteractiveBrokers的JavaAPI中编写定制代码。有许多方法通过eClientSocket对象发送到TWS。两个示例是reqIds()和reqMktData()。这两个都是void方法,因此它们不返回任何内容。相反,它们“激活”在调用它们的类中编写的方法(在本例中为SampleFrame)。这些方法也是无效的,因为它们不返回任何数据。相反,在这些方法中编写代码(分别是nextvalido()和tickPrice())来处理从TWS(交易员工作站)发回的数据 我在创建ne

我试图在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,“”); 返回; }

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);
}