public static IBSocket SendFinancialAdvisor(this IBSocket socket, IBOrderCondition.FinancialAdvisorAllocations?allocation) { if (allocation == null) { return(socket.Send(string.Empty)); } switch (allocation.Value) { case IBOrderCondition.FinancialAdvisorAllocations.PercentChange: return(socket.Send("PctChange")); case IBOrderCondition.FinancialAdvisorAllocations.AvailableEquity: return(socket.Send("AvailableEquity")); case IBOrderCondition.FinancialAdvisorAllocations.NetLiquidity: return(socket.Send("NetLiq")); case IBOrderCondition.FinancialAdvisorAllocations.EqualQuantity: return(socket.Send("EqualQuantity")); default: throw new ArgumentOutOfRangeException(); } }
public static IBSocket SendSecurity(this IBSocket socket, SecurityMessage security, bool sendPrimExchange = true, bool sendPrimExchange2 = true) { if (security == null) { throw new ArgumentNullException(nameof(security)); } var multiplier = security.Multiplier; socket .Send(security.Name) .SendSecurityType(security.SecurityType) .Send(security.ExpiryDate, _expiryFormat) .Send(security.Strike) .SendOptionType(security.OptionType) .SendIf(ServerVersions.V15, s => s.Send(multiplier == 1 ? string.Empty : multiplier.To <string>())) .SendBoardCode(security.SecurityId.BoardCode); if (sendPrimExchange2) { socket.Send(security.SecurityId.BoardCode); socket.Send(security.GetRoutingBoard()); } else if (sendPrimExchange) { socket.SendPrimaryExchange(security); } return(socket .SendCurrency(security.Currency) .SendSecurityCode(security.SecurityId.SecurityCode)); }
public static IBSocket SendCombo(this IBSocket socket, WeightedIndexSecurity security, IBOrderCondition condition = null) { if (security == null) { throw new ArgumentNullException(nameof(security)); } var innerSecurities = security.InnerSecurities.ToArray(); socket.Send(innerSecurities.Length); foreach (var innerSecurity in innerSecurities) { var weight = security.Weights[innerSecurity]; socket .SendContractId(innerSecurity.ToSecurityId()) .Send((int)weight.Abs()) .SendSide(weight >= 0 ? Sides.Buy : Sides.Sell) .SendBoardCode(innerSecurity.Board.Code); if (condition == null) { continue; } var shortSale = condition.Combo.ShortSales[innerSecurity.ToSecurityId()]; socket .Send(shortSale.IsOpenOrClose) .SendShortSale(shortSale, true); } return(socket); }
public static IBSocket SendSecurityId(this IBSocket socket, SecurityId id) { if (socket.ServerVersion < ServerVersions.V45) { return(socket); } if (!id.Cusip.IsEmpty()) { socket.Send("CUSIP"); socket.Send(id.Cusip); } else if (!id.Isin.IsEmpty()) { socket.Send("ISIN"); socket.Send(id.Isin); } else if (!id.Sedol.IsEmpty()) { socket.Send("SEDOL"); socket.Send(id.Sedol); } else if (!id.Ric.IsEmpty()) { socket.Send("RIC"); socket.Send(id.Ric); } else { socket.Send(string.Empty); socket.Send(string.Empty); } return(socket); }
public static IBSocket SendPortfolio(this IBSocket socket, string portfolioName, bool allowNull = true) { if (!portfolioName.IsEmpty()) { return(socket.ServerVersion < ServerVersions.V9 ? socket : socket.Send(portfolioName)); } if (allowNull) { return(socket.Send(string.Empty)); } throw new ArgumentNullException(nameof(portfolioName)); }
public static IBSocket SendShortSale(this IBSocket socket, IBOrderCondition.ShortSaleCondition shortSale, bool extendCode = false) { socket.Send((int)shortSale.Slot); socket.Send(shortSale.Location); if (extendCode) { if (socket.ServerVersion >= ServerVersions.V51) { socket.Send(shortSale.ExemptCode); } } return(socket); }
public static IBSocket SendIncludeExpired(this IBSocket socket, DateTimeOffset?expiryDate) { if (socket.ServerVersion < ServerVersions.V31) { return(socket); } return(socket.Send((expiryDate != null && !(expiryDate < DateTimeOffset.Now)))); }
public static IBSocket SendEndDate(this IBSocket socket, DateTimeOffset endDate) { if (socket.ServerVersion < ServerVersions.V20) { return(socket); } //yyyymmdd hh:mm:ss tmz return(socket.Send(endDate.ToUniversalTime().ToString("yyyyMMdd HH:mm:ss") + " GMT")); }
public static IBSocket SendSide(this IBSocket socket, Sides?side) { if (side == null) { return(socket.Send(string.Empty)); } switch (side.Value) { case Sides.Buy: return(socket.Send("BUY")); case Sides.Sell: return(socket.Send("SELL")); default: throw new ArgumentOutOfRangeException(); } }
public static IBSocket SendDeltaNeutral(this IBSocket socket, IBOrderCondition condition) { if (condition == null) { throw new ArgumentNullException(nameof(condition)); } var volatility = condition.Volatility; if (socket.ServerVersion < ServerVersions.V28) { return(socket.Send(volatility.OrderType == OrderTypes.Market)); } else { socket.SendOrderType(volatility.OrderType, volatility.ExtendedOrderType); socket.Send(volatility.StopPrice); if (volatility.ExtendedOrderType != IBOrderCondition.ExtendedOrderTypes.Empty) { if (socket.ServerVersion >= ServerVersions.V58) { socket .Send(volatility.ConId) .Send(volatility.SettlingFirm) .SendPortfolio(volatility.ClearingPortfolio) .Send(volatility.ClearingIntent); } if (socket.ServerVersion >= ServerVersions.V66) { socket .Send(volatility.ShortSale.IsOpenOrClose) .Send(volatility.IsShortSale) .SendShortSale(volatility.ShortSale); } } return(socket); } }
public static IBSocket SendAgent(this IBSocket socket, IBOrderCondition.AgentDescriptions?description) { if (description == null) { return(socket.Send(string.Empty)); } switch (description.Value) { case IBOrderCondition.AgentDescriptions.Individual: return(socket.Send("I")); case IBOrderCondition.AgentDescriptions.Agency: return(socket.Send("A")); case IBOrderCondition.AgentDescriptions.AgentOtherMember: return(socket.Send("W")); case IBOrderCondition.AgentDescriptions.IndividualPTIA: return(socket.Send("J")); case IBOrderCondition.AgentDescriptions.AgencyPTIA: return(socket.Send("U")); case IBOrderCondition.AgentDescriptions.AgentOtherMemberPTIA: return(socket.Send("M")); case IBOrderCondition.AgentDescriptions.IndividualPT: return(socket.Send("K")); case IBOrderCondition.AgentDescriptions.AgencyPT: return(socket.Send("Y")); case IBOrderCondition.AgentDescriptions.AgentOtherMemberPT: return(socket.Send("N")); default: throw new ArgumentOutOfRangeException(); } }
public static IBSocket SendFundamental(this IBSocket socket, FundamentalReports report) { switch (report) { case FundamentalReports.Overview: return(socket.Send("ReportSnapshot")); case FundamentalReports.Statements: return(socket.Send("ReportsFinStatements")); case FundamentalReports.Summary: return(socket.Send("ReportsFinSummary")); case FundamentalReports.Ratio: return(socket.Send("ReportRatios")); case FundamentalReports.Estimates: return(socket.Send("RESC")); case FundamentalReports.Calendar: return(socket.Send("CalendarReport")); default: throw new ArgumentOutOfRangeException(nameof(report)); } }
public static IBSocket SendIntent(this IBSocket socket, IBOrderCondition.ClearingIntents?intent) { if (intent == null) { return(socket); } switch (intent.Value) { case IBOrderCondition.ClearingIntents.Broker: return(socket.Send("IB")); case IBOrderCondition.ClearingIntents.Away: return(socket.Send("Away")); case IBOrderCondition.ClearingIntents.PostTradeAllocation: return(socket.Send("PTA")); default: throw new ArgumentOutOfRangeException(); } }
public static IBSocket SendTimeFrame(this IBSocket socket, IBTimeFrames timeFrame) { if (timeFrame == null) { throw new ArgumentNullException(nameof(timeFrame)); } if (socket.ServerVersion < ServerVersions.V20) { return(socket); } return(socket.Send(timeFrame.Interval)); }
public static IBSocket SendOrderExpiration(this IBSocket socket, OrderRegisterMessage msg) { if (msg == null) { throw new ArgumentNullException(nameof(msg)); } if (msg.OrderType != OrderTypes.Conditional) { switch (msg.TimeInForce) { case TimeInForce.PutInQueue: case null: { if (msg.TillDate == null || msg.TillDate == DateTimeOffset.MaxValue) { return(socket.Send("GTC")); } else if (msg.TillDate.Value.DateTime != DateTime.Today) { return(socket.Send("GTD")); } else { return(socket.Send("DAY")); } } case TimeInForce.MatchOrCancel: return(socket.Send("FOK")); case TimeInForce.CancelBalance: return(socket.Send("IOC")); default: throw new ArgumentOutOfRangeException(); } } else if (msg.OrderType == OrderTypes.Conditional) { var ibCon = (IBOrderCondition)msg.Condition; return(socket.Send(ibCon.IsMarketOnOpen ? "OPG" : "DAY")); } else { throw new ArgumentException(LocalizedStrings.Str2501Params.Put(msg.Type), nameof(msg)); } }
public static IBSocket SendSecurityType(this IBSocket socket, SecurityTypes?securityType) { if (securityType == null) { return(socket.Send(string.Empty)); } switch (securityType) { case SecurityTypes.Stock: return(socket.Send("STK")); case SecurityTypes.Future: return(socket.Send("FUT")); case SecurityTypes.Option: return(socket.Send("OPT")); case SecurityTypes.Index: return(socket.Send("IND")); case SecurityTypes.Currency: return(socket.Send("CASH")); case SecurityTypes.Bond: return(socket.Send("BOND")); case SecurityTypes.Warrant: return(socket.Send("WAR")); case SecurityTypes.Forward: case SecurityTypes.Swap: throw new NotSupportedException(LocalizedStrings.Str2499Params.Put(securityType)); default: throw new ArgumentOutOfRangeException(nameof(securityType)); } }
public static IBSocket SendHedge(this IBSocket socket, IBOrderCondition condition) { if (condition == null) { throw new ArgumentNullException(nameof(condition)); } if (socket.ServerVersion < ServerVersions.V54) { return(socket); } if (condition.Hedge.Type == null) { return(socket.Send(string.Empty)); } else { switch (condition.Hedge.Type.Value) { case IBOrderCondition.HedgeTypes.Delta: socket.Send("D"); break; case IBOrderCondition.HedgeTypes.Beta: socket.Send("B"); break; case IBOrderCondition.HedgeTypes.FX: socket.Send("F"); break; case IBOrderCondition.HedgeTypes.Pair: socket.Send("P"); break; default: throw new ArgumentOutOfRangeException(); } return(socket.Send(condition.Hedge.Param)); } }
public static IBSocket SendBoardCode(this IBSocket socket, string boardCode) { return(socket.Send(boardCode)); }
public static IBSocket SendOptionType(this IBSocket socket, OptionTypes?type) { return(socket.Send(type == null ? string.Empty : type == OptionTypes.Call ? "C" : "P")); }
public static IBSocket SendQuantity(this IBSocket socket, decimal volume) { return(socket.ServerVersion >= ServerVersions.V101 ? socket.Send(volume) : socket.Send((int)volume)); }
public static IBSocket SendContractId(this IBSocket socket, SecurityId security) { return(socket.Send(security.InteractiveBrokers)); }
public static IBSocket SendOrderType(this IBSocket socket, OrderTypes orderType, IBOrderCondition.ExtendedOrderTypes?extendedOrderType) { switch (orderType) { case OrderTypes.Limit: return(socket.Send("LMT")); case OrderTypes.Market: return(socket.Send("MKT")); case OrderTypes.Conditional: { if (extendedOrderType == null) { return(socket.Send("NONE")); } switch (extendedOrderType) { case IBOrderCondition.ExtendedOrderTypes.MarketOnClose: return(socket.Send("MOC")); case IBOrderCondition.ExtendedOrderTypes.LimitOnClose: return(socket.Send("LMTCLS")); case IBOrderCondition.ExtendedOrderTypes.PeggedToMarket: return(socket.Send("PEGMKT")); case IBOrderCondition.ExtendedOrderTypes.Stop: return(socket.Send("STP")); case IBOrderCondition.ExtendedOrderTypes.StopLimit: return(socket.Send("STP LMT")); case IBOrderCondition.ExtendedOrderTypes.TrailingStop: return(socket.Send("TRAIL")); case IBOrderCondition.ExtendedOrderTypes.Relative: return(socket.Send("REL")); case IBOrderCondition.ExtendedOrderTypes.VolumeWeightedAveragePrice: return(socket.Send("VWAP")); case IBOrderCondition.ExtendedOrderTypes.TrailingStopLimit: return(socket.Send("TRAILLIMIT")); case IBOrderCondition.ExtendedOrderTypes.Volatility: return(socket.Send("VOL")); case IBOrderCondition.ExtendedOrderTypes.Empty: return(socket.Send("")); case IBOrderCondition.ExtendedOrderTypes.Default: return(socket.Send("Default")); case IBOrderCondition.ExtendedOrderTypes.Scale: return(socket.Send("SCALE")); case IBOrderCondition.ExtendedOrderTypes.MarketIfTouched: return(socket.Send("MIT")); case IBOrderCondition.ExtendedOrderTypes.LimitIfTouched: return(socket.Send("LIT")); default: throw new ArgumentOutOfRangeException(nameof(extendedOrderType), extendedOrderType, LocalizedStrings.Str2500); } } default: throw new ArgumentOutOfRangeException(nameof(orderType), orderType, LocalizedStrings.Str1600); } }
public static IBSocket SendLevel1Field(this IBSocket socket, Level1Fields field) { switch (field) { case CandleDataTypes.Trades: return(socket.Send("TRADES")); case CandleDataTypes.Midpoint: return(socket.Send("MIDPOINT")); case CandleDataTypes.Bid: return(socket.Send("BID")); case CandleDataTypes.Ask: return(socket.Send("ASK")); case CandleDataTypes.BidAsk: return(socket.Send("BID_ASK")); case CandleDataTypes.HistoricalVolatility: return(socket.Send("HISTORICAL_VOLATILITY")); case CandleDataTypes.ImpliedVolatility: return(socket.Send("OPTION_IMPLIED_VOLATILITY")); case CandleDataTypes.YieldAsk: return(socket.Send("YIELD_ASK")); case CandleDataTypes.YieldBid: return(socket.Send("YIELD_BID")); case CandleDataTypes.YieldBidAsk: return(socket.Send("YIELD_BID_ASK")); case CandleDataTypes.YieldLast: return(socket.Send("YIELD_LAST")); default: throw new ArgumentOutOfRangeException(nameof(field)); } }
public static IBSocket SendCurrency(this IBSocket socket, CurrencyTypes?currency) { return(socket.Send((currency ?? CurrencyTypes.USD).ToString())); }
/// <summary> /// Send message. /// </summary> /// <param name="message">Message.</param> protected override void OnSendInMessage(Message message) { switch (message.Type) { case MessageTypes.Reset: { _depths.Clear(); _secIdByTradeIds.Clear(); if (_socket != null) { try { _socket.Dispose(); } catch (Exception ex) { SendOutError(ex); } _socket = null; } SendOutMessage(new ResetMessage()); break; } case MessageTypes.Connect: { if (_socket != null) throw new InvalidOperationException(LocalizedStrings.Str1619); _socket = new IBSocket { Parent = this }; _socket.ProcessResponse += OnProcessResponse; _socket.Connect(Address); _socket.Send((int)_clientVersion); _socket.ServerVersion = (ServerVersions)_socket.ReadInt(); if (_socket.ServerVersion >= ServerVersions.V20) { var str = _socket.ReadStr(); ConnectedTime = str.Substring(0, str.LastIndexOf(' ')).ToDateTime("yyyyMMdd HH:mm:ss"); } if (_socket.ServerVersion < _minimumServerVersion) { throw new InvalidOperationException(LocalizedStrings.Str2513Params .Put((int)_socket.ServerVersion, (int)_minimumServerVersion)); } if (_socket.ServerVersion >= ServerVersions.V3) { if (_socket.ServerVersion >= ServerVersions.V70) { if (!ExtraAuth) { _socket.Send((int)RequestMessages.StartApi); _socket.Send((int)ServerVersions.V2); _socket.Send(ClientId); if (_socket.ServerVersion >= ServerVersions.V72) { _socket.Send(OptionalCapabilities); } } } else _socket.Send(ClientId); } _socket.StartListening(error => SendOutMessage(new ConnectMessage { Error = error })); SendOutMessage(new ConnectMessage()); // отправляется автоматически //RequestIds(1); SetServerLogLevel(); SetMarketDataType(); RequestCurrentTime(); break; } case MessageTypes.Disconnect: { if (_socket == null) throw new InvalidOperationException(LocalizedStrings.Str1856); UnSubscribePosition(); UnSubscribeAccountSummary(_pfRequests.GetAndRemove("ALL")); _socket.Dispose(); _socket = null; SendOutMessage(new DisconnectMessage()); break; } case MessageTypes.OrderRegister: { RegisterOrder((OrderRegisterMessage)message); break; } case MessageTypes.OrderCancel: { var cancelMsg = (OrderCancelMessage)message; ProcessRequest(RequestMessages.CancelOrder, 0, ServerVersions.V1, socket => socket.Send((int)cancelMsg.OrderTransactionId)); break; } case MessageTypes.OrderGroupCancel: { RequestGlobalCancel(); break; } case MessageTypes.SecurityLookup: { RequestSecurityInfo((SecurityLookupMessage)message); break; } case MessageTypes.MarketData: { ProcessMarketDataMessage((MarketDataMessage)message); break; } case MessageTypes.PortfolioLookup: { var pfMsg = (PortfolioLookupMessage)message; // отправляется автоматически //RequestPortfolios(); SubscribePosition(); _pfRequests.Add("ALL", pfMsg.TransactionId); SubscribeAccountSummary(pfMsg.TransactionId, "ALL", Enumerator.GetValues<AccountSummaryTag>()); break; } case MessageTypes.Portfolio: { var pfMsg = (PortfolioMessage)message; SubscribePortfolio(pfMsg.PortfolioName, pfMsg.IsSubscribe); break; } case MessageTypes.OrderStatus: { var orderMsg = (OrderStatusMessage)message; RequestOpenOrders(); RequestAllOpenOrders(); //RequestAutoOpenOrders(ClientId == 0); ReqeustMyTrades(orderMsg.TransactionId, new MyTradeFilter()); break; } } }
public static IBSocket SendSecurityCode(this IBSocket socket, string code) { return(socket.ServerVersion < ServerVersions.V2 ? socket : socket.Send(code)); }