コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        public static IBSocket SendIncludeExpired(this IBSocket socket, DateTimeOffset?expiryDate)
        {
            if (socket.ServerVersion < ServerVersions.V31)
            {
                return(socket);
            }

            return(socket.Send((expiryDate != null && !(expiryDate < DateTimeOffset.Now))));
        }
コード例 #8
0
        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"));
        }
コード例 #9
0
        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();
            }
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
        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();
            }
        }
コード例 #12
0
        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));
            }
        }
コード例 #13
0
        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();
            }
        }
コード例 #14
0
        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));
        }
コード例 #15
0
        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));
            }
        }
コード例 #16
0
        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));
            }
        }
コード例 #17
0
        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));
            }
        }
コード例 #18
0
 public static IBSocket SendBoardCode(this IBSocket socket, string boardCode)
 {
     return(socket.Send(boardCode));
 }
コード例 #19
0
 public static IBSocket SendOptionType(this IBSocket socket, OptionTypes?type)
 {
     return(socket.Send(type == null
                                     ? string.Empty
                                                 : type == OptionTypes.Call ? "C" : "P"));
 }
コード例 #20
0
 public static IBSocket SendQuantity(this IBSocket socket, decimal volume)
 {
     return(socket.ServerVersion >= ServerVersions.V101 ? socket.Send(volume) : socket.Send((int)volume));
 }
コード例 #21
0
 public static IBSocket SendContractId(this IBSocket socket, SecurityId security)
 {
     return(socket.Send(security.InteractiveBrokers));
 }
コード例 #22
0
        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);
            }
        }
コード例 #23
0
        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));
            }
        }
コード例 #24
0
 public static IBSocket SendCurrency(this IBSocket socket, CurrencyTypes?currency)
 {
     return(socket.Send((currency ?? CurrencyTypes.USD).ToString()));
 }
コード例 #25
0
		/// <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;
				}
			}
		}
コード例 #26
0
 public static IBSocket SendSecurityCode(this IBSocket socket, string code)
 {
     return(socket.ServerVersion < ServerVersions.V2 ? socket : socket.Send(code));
 }