using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IBApi;
namespace TradeIdeas.TIProGUI
{
public delegate void DisplayGroupReceivedHandler(int displayGroup);
public delegate void ContractDetailsReceivedHandler(string symbol, int contractId);
public delegate void ConnectionRefusedHandler(string message);
public delegate void ConnectionAcknowledgedHandler();
///
/// First occurrence after connection has been established and actual requests can be submitted. If any requests are sent before
/// this first event fires there is no guarantee that they'll work and they could literally cause the connection to terminate.
///
public delegate void NextValidIdReceivedHandler();
public class ExternalLinkingIBClient : EWrapper
{
public event DisplayGroupReceivedHandler DisplayGroupReceived;
public event ContractDetailsReceivedHandler ContractDetailsReceived;
public event ConnectionRefusedHandler ConnectionRefused;
public event ConnectionAcknowledgedHandler ConnectionAcknowledged;
public event NextValidIdReceivedHandler NextValidIdReceived;
///
/// Keeps track of request ids for symbol details. Key is request id, value is symbol.
///
private Dictionary _requestIds = new Dictionary();
public ExternalLinkingIBClient() { }
public void accountDownloadEnd(string account)
{
}
public void accountSummary(int reqId, string account, string tag, string value, string currency)
{
}
public void accountSummaryEnd(int reqId)
{
}
public void bondContractDetails(int reqId, ContractDetails contract)
{
}
public void commissionReport(CommissionReport commissionReport)
{
}
public void connectionClosed()
{
}
public void contractDetails(int reqId, ContractDetails contractDetails)
{
if (null != ContractDetailsReceived)
ContractDetailsReceived(contractDetails.Contract.Symbol, contractDetails.Contract.ConId);
}
public void contractDetailsEnd(int reqId)
{
}
public void currentTime(long time)
{
}
public void deltaNeutralValidation(int reqId, DeltaNeutralContract deltaNeutralContract)
{
}
private int _groupId = 0;
public int GroupId
{
get { return _groupId; }
}
public void displayGroupList(int reqId, string groups)
{
string debugView = reqId + groups;
string[] groupIds = groups.Split('|');
if (groupIds.Length > 0)
{
int.TryParse(groupIds[0], out _groupId);
if (null != DisplayGroupReceived)
DisplayGroupReceived(_groupId);
}
}
public void displayGroupUpdated(int reqId, string contractInfo)
{
string debugView = reqId + contractInfo;
}
public void error(string str)
{
string debugView = str;
GuiEnvironment.LogMessage("[ExternalLinkingIBClient] Error String: " + debugView);
}
public void error(Exception e)
{
GuiEnvironment.LogMessage("[ExternalLinkingIBClient] Error Exception: " + e.Message);
if (e.Message.Contains("No connection could be made") && null != ConnectionRefused)
ConnectionRefused(e.Message);
}
public void error(int id, int errorCode, string errorMsg, string advancedOrderRejectJson)
{
string debugView = "id = " + id + ", errorCode = " + errorCode + ", errorMsg = " + errorMsg + ", advancedOrderRejectJson = " + advancedOrderRejectJson;
GuiEnvironment.LogMessage("[ExternalLinkingIBClient] Error with ID: " + debugView);
}
public void execDetails(int reqId, Contract contract, Execution execution)
{
}
public void execDetailsEnd(int reqId)
{
}
public void fundamentalData(int reqId, string data)
{
}
public void historicalData(int reqId, string date, double open, double high, double low, double close, int volume, int count, double WAP, bool hasGaps)
{
}
public void historicalDataEnd(int reqId, string start, string end)
{
}
public void managedAccounts(string accountsList)
{
}
public void marketDataType(int reqId, int marketDataType)
{
}
private int _nextValidId = 0;
public int NextValidId
{
get { return _nextValidId; }
}
public void nextValidId(int orderId)
{
if (null != NextValidIdReceived && orderId > 0)
NextValidIdReceived();
_nextValidId = orderId;
}
public void openOrder(int orderId, Contract contract, Order order, OrderState orderState)
{
}
public void openOrderEnd()
{
}
public void positionEnd()
{
}
public void realtimeBar(int reqId, long time, double open, double high, double low, double close, decimal volume, decimal WAP, int count)
{
}
public void receiveFA(int faDataType, string faXmlData)
{
}
public void scannerData(int reqId, int rank, ContractDetails contractDetails, string distance, string benchmark, string projection, string legsStr)
{
}
public void scannerDataEnd(int reqId)
{
}
public void scannerParameters(string xml)
{
}
public void tickEFP(int tickerId, int tickType, double basisPoints, string formattedBasisPoints, double impliedFuture, int holdDays, string futureExpiry, double dividendImpact, double dividendsToExpiry)
{
}
public void tickGeneric(int tickerId, int field, double value)
{
}
public void tickOptionComputation(int tickerId, int field, double impliedVolatility, double delta, double optPrice, double pvDividend, double gamma, double vega, double theta, double undPrice)
{
}
public void tickPrice(int tickerId, int field, double price, int canAutoExecute)
{
}
public void tickSize(int tickerId, int field, decimal size)
{
}
public void tickSnapshotEnd(int tickerId)
{
}
public void tickString(int tickerId, int field, string value)
{
}
public void updateAccountTime(string timestamp)
{
}
public void updateAccountValue(string key, string value, string currency, string accountName)
{
}
public void updateMktDepth(int tickerId, int position, int operation, int side, double price, decimal size)
{
}
public void updateMktDepthL2(int tickerId, int position, string marketMaker, int operation, int side, double price, decimal size, bool isSmartDepth)
{
}
public void updateNewsBulletin(int msgId, int msgType, string message, string origExchange)
{
}
public void verifyCompleted(bool isSuccessful, string errorText)
{
}
public void verifyMessageAPI(string apiData)
{
}
public void updatePortfolio(Contract contract, decimal position, double marketPrice, double marketValue, double averageCost, double unrealisedPNL, double realisedPNL, string accountName)
{
}
public void orderStatus(int orderId, string status, decimal filled, decimal remaining, double avgFillPrice, int permId, int parentId, double lastFillPrice, int clientId, string whyHeld, double mktCapPrice)
{
}
public void position(string account, Contract contract, decimal pos, double avgCost)
{
}
public void verifyAndAuthMessageAPI(string apiData, string xyzChallenge)
{
}
public void verifyAndAuthCompleted(bool isSuccessful, string errorText)
{
}
public void connectAck()
{
if (null != ConnectionAcknowledged)
ConnectionAcknowledged();
}
public void positionMulti(int requestId, string account, string modelCode, Contract contract, decimal pos, double avgCost)
{
}
public void positionMultiEnd(int requestId)
{
}
public void accountUpdateMulti(int requestId, string account, string modelCode, string key, string value, string currency)
{
}
public void accountUpdateMultiEnd(int requestId)
{
}
public void securityDefinitionOptionParameter(int reqId, string exchange, int underlyingConId, string tradingClass, string multiplier, HashSet expirations, HashSet strikes)
{
}
public void securityDefinitionOptionParameterEnd(int reqId)
{
}
public void softDollarTiers(int reqId, SoftDollarTier[] tiers)
{
}
public void tickPrice(int tickerId, int field, double price, TickAttrib attribs)
{
}
public void historicalData(int reqId, IBApi.Bar bar)
{
}
public void historicalDataUpdate(int reqId, IBApi.Bar bar)
{
}
public void familyCodes(FamilyCode[] familyCodes)
{
}
public void symbolSamples(int reqId, ContractDescription[] contractDescriptions)
{
}
public void mktDepthExchanges(DepthMktDataDescription[] depthMktDataDescriptions)
{
}
public void tickNews(int tickerId, long timeStamp, string providerCode, string articleId, string headline, string extraData)
{
}
public void smartComponents(int reqId, Dictionary> theMap)
{
}
public void tickReqParams(int tickerId, double minTick, string bboExchange, int snapshotPermissions)
{
}
public void newsProviders(NewsProvider[] newsProviders)
{
}
public void newsArticle(int requestId, int articleType, string articleText)
{
}
public void historicalNews(int requestId, string time, string providerCode, string articleId, string headline)
{
}
public void historicalNewsEnd(int requestId, bool hasMore)
{
}
public void headTimestamp(int reqId, string headTimestamp)
{
}
public void histogramData(int reqId, HistogramEntry[] data)
{
}
public void rerouteMktDataReq(int reqId, int conId, string exchange)
{
}
public void rerouteMktDepthReq(int reqId, int conId, string exchange)
{
}
public void marketRule(int marketRuleId, PriceIncrement[] priceIncrements)
{
}
public void pnl(int reqId, double dailyPnL, double unrealizedPnL, double realizedPnL)
{
}
public void pnlSingle(int reqId, decimal pos, double dailyPnL, double unrealizedPnL, double realizedPnL, double value)
{
}
public void historicalTicks(int reqId, HistoricalTick[] ticks, bool done)
{
}
public void historicalTicksBidAsk(int reqId, HistoricalTickBidAsk[] ticks, bool done)
{
}
public void historicalTicksLast(int reqId, HistoricalTickLast[] ticks, bool done)
{
}
public void tickByTickAllLast(int reqId, int tickType, long time, double price, decimal size, TickAttribLast attribs, string exchange, string specialConditions)
{
}
public void tickByTickBidAsk(int reqId, long time, double bidPrice, double askPrice, decimal bidSize, decimal askSize, TickAttribBidAsk attribs)
{
}
public void tickByTickMidPoint(int reqId, long time, double midPoint)
{
}
public void orderBound(long orderId, int apiClientId, int apiOrderId)
{
}
public void completedOrder(Contract contract, Order order, OrderState orderState)
{
}
public void completedOrdersEnd()
{
}
public void tickOptionComputation(int tickerId, int field, int tickAttrib, double impliedVolatility, double delta, double optPrice, double pvDividend, double gamma, double vega, double theta, double undPrice)
{
}
public void replaceFAEnd(int reqId, string text)
{
}
public void wshMetaData(int reqId, string dataJson)
{
}
public void wshEventData(int reqId, string dataJson)
{
}
public void historicalSchedule(int reqId, string startDateTime, string endDateTime, string timeZone, HistoricalSession[] sessions)
{
}
public void userInfo(int reqId, string whiteBrandingId)
{
}
}
}