/* * Finance::InteractiveBrokers::SWIG - IB API concrete class header * * Copyright (c) 2010-2014 Jason McManus */ #ifndef IB_API_VERSION # error IB_API_VERSION must be defined. #endif #ifndef IB_API_INTVER # error IB_API_INTVER must be defined. #endif #ifndef IBAPI_H #define IBAPI_H // Some needed types #include "Contract.h" #include "Order.h" #include "OrderState.h" #include "Execution.h" #include "ScannerSubscription.h" #if IB_API_INTVER >= 967 #include "CommissionReport.h" #endif // Better patch for RT#94880: gcc >4.7 stopped including #include #include // Our base class, from the IB API #include "EWrapper.h" #include #include class EPosixClientSocket; enum State { ST_DISCONNECTED, ST_CONNECTING, ST_IDLE, ST_PING /* ST_PLACEORDER, ST_PLACEORDER_ACK, ST_CANCELORDER, ST_CANCELORDER_ACK, ST_PING_ACK, */ }; class IBAPIClient : public EWrapper { public: // ctor, dtor IBAPIClient(); ~IBAPIClient(); public: //////////////////////////////////////////////////////////////////////// // OUR EXTENSIONS // loop message-receiver function void processMessages(); // set the select(2) timeout (integer) void setSelectTimeout(time_t timeout); // get the API version double version(); // get an integral API version int version_int(); // get the build time of this library int build_time(); public: //////////////////////////////////////////////////////////////////////// // METHODS // Connection and server bool eConnect( const char * host, unsigned int port, int clientId = 0 ); void eDisconnect(); bool isConnected(); void reqCurrentTime(); int serverVersion(); void setServerLogLevel( int logLevel ); void checkMessages(); IBString TwsConnectionTime(); // Market Data void reqMktData( TickerId id, const Contract &contract, const IBString& genericTicks, bool snapshot ); void cancelMktData( TickerId id ); void calculateImpliedVolatility( TickerId reqId, const Contract &contract, double optionPrice, double underPrice ); void cancelCalculateImpliedVolatility( TickerId reqId ); void calculateOptionPrice( TickerId reqId, const Contract &contract, double volatility, double underPrice ); void cancelCalculateOptionPrice( TickerId reqId ); #if IB_API_INTVER >= 966 void reqMarketDataType( int marketDataType ); #endif // Orders void placeOrder( OrderId id, const Contract &contract, const Order &order ); void cancelOrder( OrderId id ); void reqOpenOrders(); void reqAllOpenOrders(); void reqAutoOpenOrders( bool bAutoBind ); void reqIds( int numIds ); void exerciseOptions( TickerId id, const Contract &contract, int exerciseAction, int exerciseQuantity, const IBString &account, int override ); #if IB_API_INTVER >= 966 // UNDOCUMENTED void reqGlobalCancel(); #endif // Account void reqAccountUpdates( bool subscribe, const IBString& acctCode ); // Executions void reqExecutions( int reqId, const ExecutionFilter& filter ); // Contract Details void reqContractDetails( int reqId, const Contract &contract ); // Market Depth void reqMktDepth( TickerId id, const Contract &contract, int numRows ); void cancelMktDepth( TickerId id ); // News Bulletins void reqNewsBulletins( bool allMsgs ); void cancelNewsBulletins(); // Financial Advisors void reqManagedAccts(); void requestFA( faDataType pFaDataType ); void replaceFA( faDataType pFaDataType, const IBString& cxml ); // Historical Data void reqHistoricalData( TickerId id, const Contract &contract, const IBString &endDateTime, const IBString &durationStr, const IBString &barSizeSetting, const IBString &whatToShow, int useRTH, int formatDate ); void cancelHistoricalData( TickerId tickerId ); // Market Scanners void reqScannerParameters(); void reqScannerSubscription( int tickerId, const ScannerSubscription &subscription); void cancelScannerSubscription( int tickerId ); // Real Time Bars void reqRealTimeBars( TickerId id, const Contract &contract, int barSize, const IBString &whatToShow, bool useRTH ); void cancelRealTimeBars( TickerId tickerId ); // Fundamental Data void reqFundamentalData( TickerId reqId, const Contract& contract, const IBString& reportType ); void cancelFundamentalData( TickerId reqId ); public: //////////////////////////////////////////////////////////////////////// // EVENTS // meta-events void winError( const IBString &str, int lastError ); void error( const int id, const int errorCode, const IBString errorString ); void connectionClosed(); void currentTime( long time ); // Market Data events void tickPrice( TickerId tickerId, TickType field, double price, int canAutoExecute ); void tickSize( TickerId tickerId, TickType field, int size ); void tickOptionComputation( TickerId tickerId, TickType tickType, double impliedVol, double delta, double optPrice, double pvDividend, double gamma, double vega, double theta, double undPrice ); void tickGeneric( TickerId tickerId, TickType tickType, double value ); void tickString( TickerId tickerId, TickType tickType, const IBString& value ); void tickEFP( TickerId tickerId, TickType tickType, double basisPoints, const IBString& formattedBasisPoints, double totalDividends, int holdDays, const IBString& futureExpiry, double dividendImpact, double dividendsToExpiry ); void tickSnapshotEnd( int reqId ); #if IB_API_INTVER >= 966 void marketDataType( TickerId reqId, int marketDataType ); #endif // Order events void orderStatus( OrderId orderId, const IBString& status, int filled, int remaining, double avgFillPrice, int permId, int parentId, double lastFillPrice, int clientId, const IBString& whyHeld ); void openOrder( OrderId orderId, const Contract& contract, const Order& order, const OrderState& ostate ); void openOrderEnd(); // Account and Portfolio events void updateAccountValue( const IBString &key, const IBString& val, const IBString& currency, const IBString& accountName); void updatePortfolio( const Contract& contract, int position, double marketPrice, double marketValue, double averageCost, double unrealizedPNL, double realizedPNL, const IBString& accountName ); void updateAccountTime( const IBString& timeStamp ); // News Bulletin events void updateNewsBulletin( int msgId, int msgType, const IBString& newsMessage, const IBString& originExch ); // Contract Details events void contractDetails( int reqId, const ContractDetails& contractDetails ); void bondContractDetails( int reqId, const ContractDetails& contractDetails ); void contractDetailsEnd( int reqId ); // Execution events void execDetails( int reqId, const Contract& contract, const Execution& execution ); void execDetailsEnd( int reqId ); #if IB_API_INTVER >= 967 void commissionReport( const CommissionReport &commissionReport ); #endif // Market Depth events void updateMktDepth( TickerId id, int position, int operation, int side, double price, int size); void updateMktDepthL2( TickerId id, int position, IBString marketMaker, int operation, int side, double price, int size ); // Financial Advisors events void managedAccounts( const IBString& accountsList ); void receiveFA( faDataType pFaDataType, const IBString& cxml ); // Historical Data events void historicalData( TickerId reqId, const IBString& date, double open, double high, double low, double close, int volume, int barCount, double WAP, int hasGaps ); // Market Scanners events void scannerParameters( const IBString &xml ); void scannerData( int reqId, int rank, const ContractDetails &contractDetails, const IBString &distance, const IBString &benchmark, const IBString &projection, const IBString &legsStr ); void scannerDataEnd( int reqId ); // Real Time bars events void realtimeBar( TickerId reqId, long time, double open, double high, double low, double close, long volume, double wap, int count ); // Fundamental Data events void fundamentalData( TickerId reqId, const IBString& data ); // Undocumented events void deltaNeutralValidation( int reqId, const UnderComp& underComp ); void accountDownloadEnd( const IBString& accountName ); void nextValidId( OrderId orderId ); private: // member variables std::auto_ptr m_pClient; State m_state; time_t m_sleepDeadline; time_t m_selectTimeout; OrderId m_orderId; }; #endif // ifdef IBAPI_H /* END */