2013-08-13 10 views
6

Sto cercando di capire il pacchetto IBrokers e, leggendo il suo Real Time vignettes, alla fine della sezione 2.4.1, l'autore del pacchetto, Jeffrey A. Ryan, ha scritto:Numero di versione della richiesta specifica, pacchetto IBrokers per Interactive Brokers

[...] per richiedere l'ora corrente dal TWS, si ha la necessità di inviare il codice per "Current Time" (twsOutgoingMSG $ REQ oRA cORRENTE.): "49" e la versione corrente numero della richiesta specifica. Nel caso del tempo corrente, la versione è semplicemente il carattere "1".

scansione attraverso il codice sorgente del pacchetto IBrokers, ho notato che l'autore usa numero versione diverse per diverse richieste (ad esempio per reqMrktData Versione = 9). Chiunque, quando io, guardassi l'API Interactive Brokers document, per la funzione reqMktData(), vedo che la funzione non richiede un "numero di versione" come parametro.

Ho anche cercato di cercare una spiegazione generale su quale numero di versione di una richiesta specifica e quando/dove potremmo averne bisogno, ma non sono riuscito a trovarne.

Sarei grato se qualcuno possa fornirmi una spiegazione alla variabile "VERSION", a cosa si intende fare/ottenere e come/dove è possibile trovare un elenco di numeri di versione per varie richieste all'API di Interactive Brokers .

Grazie in anticipo

risposta

2

sarei grato se qualcuno mi può fornire una spiegazione a quella variabile "versione", quello che ha significato per fare/realizzare, e come/dove possiamo trovare un elenco di numero di versione per varie richieste all'API Interactive Brokers.

Problemi di evoluzione API.

Vedere class EClientSocket nel codice della libreria client API Java (o C++). Probabilmente Jeff Ryan ha raccolto/dovuto prendere i numeri VERSION da qui.

In sostanza, con l'evolversi delle capacità della piattaforma IB/server, esistevano versioni più vecchie e più recenti delle API client utilizzate dai clienti. Pertanto, il server IB è in grado di gestire le richieste provenienti da versioni precedenti dei client API IB e da quelli più recenti. La VERSIONE aiuta il server a distinguere la versione della chiamata API con cui ha a che fare.

Ad esempio, le versioni più recenti dell'API Client IB possono reqMktData() per interi Combo con più Gambe in un colpo, cosa che i vecchi client non potevano fare. Quindi, come hai notato, è 1 per l'API più semplice che non si è evoluta, come ad esempio cancelHistoricalData(), cancelScannerSubscription() ecc., Ma può arrivare fino a 7 o 9 per le API che tendono ad evolversi nel tempo, come ad esempio reqMktData() .

In termini più di basso livello, la VERSIONE indica al server quali parametri il client sta per passare sul socket immediatamente dopo send() -ing the VERSION. Di seguito è riportato un estratto di codice da reqScannerSubscription(). Si noti la send(VERSION); subito dopo la send(REQ_SCANNER_SUBSCRIPTION);

(Si noti che ci sono due altri tipi di numeri di versione: il lato server (IB Server/Piattaforma) numero di versione e il numero di versione Client API IB TWS Questi sono separati dal VERSIONE per-API di cui sei interessato.Se IB ha davvero bisogno di una chiamata API per la versione VERSION, che è separata dalla versione del client IB, non è immediatamente ovvio per me, ma è così che stanno andando in questo momento).

Scuse per una risposta vagante; uno sguardo su EClientSocket.java lo cancellerà! :-)

public synchronized void reqScannerSubscription(int tickerId, 
    ScannerSubscription subscription) { 
    // not connected? 
    if (!m_connected) { 
     error(EClientErrors.NO_VALID_ID, EClientErrors.NOT_CONNECTED, ""); 
     return; 
    } 

    if (m_serverVersion < 24) { 
     error(EClientErrors.NO_VALID_ID, EClientErrors.UPDATE_TWS, 
      " It does not support API scanner subscription."); 
     return; 
    } 

    final int VERSION = 3; 

    try { 
     send(REQ_SCANNER_SUBSCRIPTION); 
     send(VERSION); 
     send(tickerId); 
     sendMax(subscription.numberOfRows()); 
     send(subscription.instrument()); 
     send(subscription.locationCode()); 

Cronologia delle versioni client nella parte superiore di EClientSocket.

public class EClientSocket { 

    // Client version history 
    // 
    // 6 = Added parentId to orderStatus 
    // 7 = The new execDetails event returned for an order filled status and reqExecDetails 
    //  Also market depth is available. 
    // 8 = Added lastFillPrice to orderStatus() event and permId to execution details 
    // 9 = Added 'averageCost', 'unrealizedPNL', and 'unrealizedPNL' to updatePortfolio event 
    // 10 = Added 'serverId' to the 'open order' & 'order status' events. 
    //  We send back all the API open orders upon connection. 
    //  Added new methods reqAllOpenOrders, reqAutoOpenOrders() 
    //  Added FA support - reqExecution has filter. 
    //      - reqAccountUpdates takes acct code. 
    // 11 = Added permId to openOrder event. 
    // 12 = requsting open order attributes ignoreRth, hidden, and discretionary 
    // 13 = added goodAfterTime 
    // 14 = always send size on bid/ask/last tick 
    // 15 = send allocation description string on openOrder 
    // 16 = can receive account name in account and portfolio updates, and fa params in openOrder 
    // 17 = can receive liquidation field in exec reports, and notAutoAvailable field in mkt data 
    // 18 = can receive good till date field in open order messages, and request intraday backfill 
    // 19 = can receive rthOnly flag in ORDER_STATUS 
    // 20 = expects TWS time string on connection after server version >= 20. 
    // 21 = can receive bond contract details. 
    // 22 = can receive price magnifier in version 2 contract details message 
    // 23 = support for scanner 
    // 24 = can receive volatility order parameters in open order messages 
    // 25 = can receive HMDS query start and end times 
    // 26 = can receive option vols in option market data messages 
    // 27 = can receive delta neutral order type and delta neutral aux price in place order version 20: API 8.85 
    // 28 = can receive option model computation ticks: API 8.9 
    // 29 = can receive trail stop limit price in open order and can place them: API 8.91 
    // 30 = can receive extended bond contract def, new ticks, and trade count in bars 
    // 31 = can receive EFP extensions to scanner and market data, and combo legs on open orders 
    // ; can receive RT bars 
    // 32 = can receive TickType.LAST_TIMESTAMP 
    // ; can receive "whyHeld" in order status messages 
    // 33 = can receive ScaleNumComponents and ScaleComponentSize is open order messages 
    // 34 = can receive whatIf orders/order state 
    // 35 = can receive contId field for Contract objects 
    // 36 = can receive outsideRth field for Order objects 
    // 37 = can receive clearingAccount and clearingIntent for Order objects 

    private static final int CLIENT_VERSION = 37; 
    private static final int SERVER_VERSION = 38; 
    private static final byte[] EOL = {0}; 
    private static final String BAG_SEC_TYPE = "BAG"; 
Problemi correlati