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); } }
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); } }