Esempio n. 1
0
        public bool SendNewOrderMultileg(INewOrderMultiLeg newOrder)
        {
            try
            {
                var tags = new List <Tuple <int, string> > {
                    new Tuple <int, string>(35, "E"),
                    new Tuple <int, string>(34, SequenceId.ToString(CultureInfo.InvariantCulture)),
                    new Tuple <int, string>(49, SenderId),
                    new Tuple <int, string>(56, TargetId),
                    new Tuple <int, string>(52, DateTime.Now.ToString("yyyyMMdd-HH:mm:ss.fff")),
                    new Tuple <int, string>(115, OnBehalfOf),
                    //new Tuple<int, string>(167, "FOR"),
                    //new Tuple<int, string>(21, "2"),
                    //new Tuple<int, string>(55, "MLEG"),
                    //new Tuple<int, string>(11, newOrder.ClientRequestId),
                    //new Tuple<int, string>(54, "B"), //"As Defined" (for use with multileg instruments)
                    //new Tuple<int, string>(60, DateTime.Now.ToString("yyyyMMdd-HH:mm:ss.fff")),
                    //new Tuple<int, string>(75, DateTime.Today.ToString("yyyyMMdd")),
                    new Tuple <int, string>(1385, newOrder.OrderType),       // Contingency type
                    new Tuple <int, string>(66, newOrder.ClientRequestId),
                    new Tuple <int, string>(394, "1"),
                    new Tuple <int, string>(59, newOrder.TIF),
                };

                // Expiration
                if (newOrder.ExpireTimeStamp != null && newOrder.ExpireTimeStamp != "")
                {
                    tags.Add(new Tuple <int, string>(6222, newOrder.ExpireTimeStamp));
                }
                if (newOrder.ExpireTimeZone != null && newOrder.ExpireTimeZone != "")
                {
                    tags.Add(new Tuple <int, string>(6223, newOrder.ExpireTimeZone));
                }

                // Activation
                if (newOrder.ActiveTimeStamp != null && newOrder.ActiveTimeStamp != "")
                {
                    tags.Add(new Tuple <int, string>(6220, newOrder.ActiveTimeStamp));
                }
                if (newOrder.ActiveTimeZone != null && newOrder.ActiveTimeZone != "")
                {
                    tags.Add(new Tuple <int, string>(6221, newOrder.ActiveTimeZone));
                }

                // Alert
                if (newOrder.AlertType > 0)
                {
                    tags.Add(new Tuple <int, string>(6224, newOrder.AlertType.ToString()));
                }

                tags.Add(new Tuple <int, string>(68, newOrder.Legs.Length.ToString()));
                tags.Add(new Tuple <int, string>(73, newOrder.Legs.Length.ToString()));

                int idx = 0;
                while (idx < newOrder.Legs.Length)
                {
                    INewOrderSingle leg = newOrder.Legs[idx];
                    if (leg != null)
                    {
                        int legId = idx + 1;
                        tags.Add(new Tuple <int, string>(11, leg.ClientRequestId.ToString()));
                        tags.Add(new Tuple <int, string>(67, legId.ToString()));
                        tags.Add(new Tuple <int, string>(55, leg.Symbol));
                        tags.Add(new Tuple <int, string>(54, leg.Side.ToString(CultureInfo.InvariantCulture)));
                        tags.Add(new Tuple <int, string>(38, leg.Amount.ToString(CultureInfo.InvariantCulture)));
                        tags.Add(new Tuple <int, string>(40, leg.OrderType));
                        tags.Add(new Tuple <int, string>(15, leg.Currency));
                        tags.Add(new Tuple <int, string>(64, leg.SettlementDate.ToString("yyyyMMdd")));
                        tags.Add(new Tuple <int, string>(59, leg.TIF));

                        if (leg.OrderType != "1") // Market
                        {
                            tags.Add(new Tuple <int, string>(44, leg.Price.ToString(CultureInfo.InvariantCulture)));
                        }

                        // Expiration
                        if (leg.ExpireTimeStamp != null && leg.ExpireTimeStamp != "")
                        {
                            tags.Add(new Tuple <int, string>(6222, leg.ExpireTimeStamp));
                        }
                        if (leg.ExpireTimeZone != null && leg.ExpireTimeZone != "")
                        {
                            tags.Add(new Tuple <int, string>(6223, leg.ExpireTimeZone));
                        }

                        // Activation
                        if (leg.ActiveTimeStamp != null && leg.ActiveTimeStamp != "")
                        {
                            tags.Add(new Tuple <int, string>(6220, leg.ActiveTimeStamp));
                        }
                        if (leg.ActiveTimeZone != null && leg.ActiveTimeZone != "")
                        {
                            tags.Add(new Tuple <int, string>(6221, leg.ActiveTimeZone));
                        }

                        if (leg.Account != null && leg.Account.Trim() != "")
                        {
                            tags.Add(new Tuple <int, string>(1, leg.Account));
                        }
                    }
                    idx++;
                }

                SendFixMessage(tags);
                return(true);
            }
            catch (Exception ex)
            {
                _logger.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff} - Send New Order Single failed, {1}", DateTime.Now, ex.Message);
                return(false);
            }
        }
Esempio n. 2
0
        public bool SendNewOrderSingle(INewOrderSingle newOrderSingle)
        {
            try {
                var tags = new List <Tuple <int, string> > {
                    new Tuple <int, string>(35, "D"),
                    new Tuple <int, string>(34, SequenceId.ToString(CultureInfo.InvariantCulture)),
                    new Tuple <int, string>(49, SenderId),
                    new Tuple <int, string>(56, TargetId),
                    new Tuple <int, string>(52, DateTime.Now.ToString("yyyyMMdd-HH:mm:ss.fff")),
                    new Tuple <int, string>(115, OnBehalfOf),
                    new Tuple <int, string>(167, "FOR"),
                    new Tuple <int, string>(21, "2"),
                    new Tuple <int, string>(117, newOrderSingle.QuoteId),
                    new Tuple <int, string>(11, newOrderSingle.ClientRequestId),
                    new Tuple <int, string>(55, newOrderSingle.Symbol),
                    new Tuple <int, string>(15, newOrderSingle.Currency),
                    new Tuple <int, string>(54, newOrderSingle.Side.ToString(CultureInfo.InvariantCulture)),
                    new Tuple <int, string>(38, newOrderSingle.Amount.ToString(CultureInfo.InvariantCulture)),
                    new Tuple <int, string>(60, DateTime.Now.ToString("yyyyMMdd-HH:mm:ss.fff")),
                    new Tuple <int, string>(75, DateTime.Today.ToString("yyyyMMdd")),
                    new Tuple <int, string>(6215, newOrderSingle.Tenor),
                };

                // Add tags that are appropriate for all auto-quotable order types
                if (newOrderSingle.GetType() == typeof(AutoSpotOrderSingle) || newOrderSingle.GetType() == typeof(AutoOutrightOrderSingle))
                {
                    tags.Add(new Tuple <int, string>(40, newOrderSingle.OrderType));
                }

                if (newOrderSingle.GetType() == typeof(AutoSwapOrderSingle))
                {
                    tags.Add(new Tuple <int, string>(40, "G"));
                }

                if (newOrderSingle.OrderType != "1") // Market
                {
                    tags.Add(new Tuple <int, string>(44, newOrderSingle.Price.ToString(CultureInfo.InvariantCulture)));
                }

                if (newOrderSingle.GetType() == typeof(AutoSpotOrderSingle))
                {
                    tags.Add(new Tuple <int, string>(64, newOrderSingle.SettlementDate.ToString("yyyyMMdd")));
                }

                // Add tags that are appropriate for auto-quotable forward outrights and swaps
                if (newOrderSingle.GetType() == typeof(AutoOutrightOrderSingle))
                {
                    var outrightOrder = (AutoOutrightOrderSingle)newOrderSingle;

                    tags.Add(new Tuple <int, string>(64, newOrderSingle.SettlementDate.ToString("yyyyMMdd")));
                    tags.Add(new Tuple <int, string>(194, outrightOrder.LastSpotRate.ToString(CultureInfo.InvariantCulture)));
                    tags.Add(new Tuple <int, string>(195, outrightOrder.LastForwardPoints.ToString(CultureInfo.InvariantCulture)));

                    // Spot quote ID (Forward orders)
                    if (newOrderSingle.SpotQuoteId != null && newOrderSingle.SpotQuoteId.Trim() != "")
                    {
                        tags.Add(new Tuple <int, string>(9222, newOrderSingle.SpotQuoteId));
                    }
                }

                // Add tags that are appropriate only for auto-quotable swaps
                if (newOrderSingle.GetType() == typeof(AutoSwapOrderSingle))
                {
                    var swapOrder = (AutoSwapOrderSingle)newOrderSingle;

                    tags.Add(new Tuple <int, string>(64, newOrderSingle.SettlementDate.ToString("yyyyMMdd")));
                    tags.Add(new Tuple <int, string>(194, swapOrder.LastSpotRate.ToString(CultureInfo.InvariantCulture)));
                    tags.Add(new Tuple <int, string>(195, swapOrder.LastForwardPoints.ToString(CultureInfo.InvariantCulture)));
                    tags.Add(new Tuple <int, string>(6160, swapOrder.Price2.ToString(CultureInfo.InvariantCulture)));
                    tags.Add(new Tuple <int, string>(192, swapOrder.Amount2.ToString(CultureInfo.InvariantCulture)));
                    tags.Add(new Tuple <int, string>(5191, swapOrder.LastForwardPoints2.ToString(CultureInfo.InvariantCulture)));
                    tags.Add(new Tuple <int, string>(193, swapOrder.SettlementDate2.ToString("yyyyMMdd")));
                    tags.Add(new Tuple <int, string>(6216, swapOrder.Tenor2));
                }

                // Benchmark orders
                if (newOrderSingle.OrderType == "X")
                {
                    tags.Add(new Tuple <int, string>(6219, newOrderSingle.BenchmarkType));
                }

                // TIF
                if (newOrderSingle.TIF != null && newOrderSingle.TIF != "")
                {
                    tags.Add(new Tuple <int, string>(59, newOrderSingle.TIF));
                }

                // Expiration
                if (newOrderSingle.ExpireTimeStamp != null && newOrderSingle.ExpireTimeStamp != "")
                {
                    tags.Add(new Tuple <int, string>(6222, newOrderSingle.ExpireTimeStamp));
                }
                if (newOrderSingle.ExpireTimeZone != null && newOrderSingle.ExpireTimeZone != "")
                {
                    tags.Add(new Tuple <int, string>(6223, newOrderSingle.ExpireTimeZone));
                }

                // Activation
                if (newOrderSingle.ActiveTimeStamp != null && newOrderSingle.ActiveTimeStamp != "")
                {
                    tags.Add(new Tuple <int, string>(6220, newOrderSingle.ActiveTimeStamp));
                }
                if (newOrderSingle.ActiveTimeZone != null && newOrderSingle.ActiveTimeZone != "")
                {
                    tags.Add(new Tuple <int, string>(6221, newOrderSingle.ActiveTimeZone));
                }

                // Pre-allocation
                if (newOrderSingle.Account != null && newOrderSingle.Account.Trim() != "")
                {
                    tags.Add(new Tuple <int, string>(1, newOrderSingle.Account));
                }

                // Alert
                if (newOrderSingle.AlertType > 0)
                {
                    tags.Add(new Tuple <int, string>(6224, newOrderSingle.AlertType.ToString()));
                }

                SendFixMessage(tags);
                return(true);
            }
            catch (Exception ex) {
                _logger.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff} - Send New Order Single failed, {1}", DateTime.Now, ex.Message);
                return(false);
            }
        }