Beispiel #1
0
        public void TestStringTagConstructor()
        {
            var field = new Fix.Field("35", "D");

            Assert.AreEqual(35, field.Tag);
            Assert.AreEqual("D", field.Value);
        }
        public void TestMessageParserStripsValueDescription()
        {
            const string text = @"2014-08-26 10:20:56.0006|DEBUG|AwesomO.Execution.FixClient|Outgoing
                                {
                                         BeginString    (8) - FIXT.1.1
                                          BodyLength    (9) - 
                                             MsgType   (35) - 8 - ExecutionReport
                                        SenderCompID   (49) - QJ
                                        TargetCompID   (56) - FIX_CLIENT
                                           MsgSeqNum   (34) - 5019
                                         SendingTime   (52) - 20140826-00:20:55.998
                                           OrdStatus   (39) - 0 - New
                                             ClOrdID   (11) - 20
                                             OrderID   (37) - FIX_CLIENT-QJ-20
                                              ExecID   (17) - 1
                                            ExecType  (150) - 0 - New
                                           LeavesQty  (151) - 10000
                                          SecurityID   (48) - RIO.AX
                                    SecurityIDSource   (22) - 5 - RIC code
                                                Side   (54) - 1 - Buy
                                            OrderQty   (38) - 10000
                                               Price   (44) - 97.08
                                             LastQty   (32) - 0
                                              LastPx   (31) - 0
                                              CumQty   (14) - 0
                                               AvgPx    (6) - 0
                                             OrdType   (40) - 2 - Limit
                                }";

            Fix.Message message = Fix.Message.Parse(text);
            Assert.IsNotNull(message);
            Fix.Field msgType = message.Fields.Find(Fix.Dictionary.Fields.MsgType);
            Assert.IsNotNull(msgType);
            Assert.AreEqual(Fix.Dictionary.Messages.ExecutionReport.MsgType, msgType.Value);
        }
Beispiel #3
0
        public void TestOrdStatusConversion()
        {
            var field     = new Fix.Field(Fix.Dictionary.Fields.OrdStatus, "0");
            var ordStatus = (Fix.OrdStatus)field;

            Assert.AreEqual(Fix.OrdStatus.New, ordStatus);
        }
Beispiel #4
0
        public void TestDescribeFieldValue()
        {
            var field       = new Fix.Field(FIX_5_0SP2.TimeInForce.Day);
            var description = field.Describe(null).ValueDefinition;

            Assert.IsNotNull(description);
            Assert.AreEqual("Day", description?.Name);
            Assert.AreEqual("A buy or sell order that, if not executed expires at the end of the trading day on which it was entered.", description?.Description);
        }
Beispiel #5
0
        public void TestExecInstWithMultipleValues()
        {
            var field  = new Fix.Field(Fix.Dictionary.Fields.ExecInst, "c x");
            var values = (Fix.ExecInst[])field;

            Assert.AreEqual(2, values.Length);
            Assert.AreEqual(Fix.ExecInst.IgnorePriceValidityChecks, values[0]);
            Assert.AreEqual(Fix.ExecInst.IgnoreNotionalValueChecks, values[1]);
        }
Beispiel #6
0
        public void TestClone()
        {
            var one = new Fix.Field("35", "D");
            var two = (Fix.Field)one.Clone();

            Assert.AreEqual(one.Tag, two.Tag);
            Assert.AreEqual(one.Value, two.Value);
            two.Value = "E";
            Assert.AreEqual(one.Tag, two.Tag);
            Assert.AreNotEqual(one.Value, two.Value);
            Assert.AreEqual("D", one.Value);
            Assert.AreEqual("E", two.Value);
        }
Beispiel #7
0
        void CancelAllOpenOrders()
        {
            foreach (DataGridViewRow row in _orderGrid.Rows)
            {
                try
                {
                    var       view     = row.DataBoundItem as DataRowView;
                    var       orderRow = view.Row as OrderDataRow;
                    Fix.Order order    = orderRow.Order;

                    if (order.OrdStatus == Fix.OrdStatus.Canceled ||
                        order.OrdStatus == Fix.OrdStatus.Rejected ||
                        order.OrdStatus == Fix.OrdStatus.DoneForDay)
                    {
                        continue;
                    }

                    var message = new Fix.Message {
                        MsgType = Fix.Dictionary.Messages.OrderCancelRequest.MsgType
                    };

                    MessagesPanel.UpdateMessage(message, order);

                    message.Fields.Set(Fix.Dictionary.Fields.TransactTime, Fix.Field.TimeString(_session.MillisecondTimestamps));
                    message.Fields.Set(Fix.Dictionary.Fields.Side, order.Side.Value);
                    message.Fields.Set(Fix.Dictionary.Fields.Symbol, order.Symbol);
                    message.Fields.Set(Fix.Dictionary.Fields.OrigClOrdID, order.ClOrdID);
                    message.Fields.Set(Fix.Dictionary.Fields.ClOrdID, Session.FormatClOrdId(Session.NextClOrdId++));
                    //
                    // This field was removed from later versions.
                    //
                    Fix.Field beginString = message.Fields.Find(Fix.Dictionary.Fields.BeginString);

                    if (beginString != null && beginString.Value == Fix.Dictionary.Versions.FIX_4_0.BeginString)
                    {
                        message.Fields.Set(Fix.Dictionary.FIX_4_0.Fields.CxlType, "F");
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }
        void ExportButtonClick(object sender, EventArgs e)
        {
            string filename = Session.SenderCompId + "-" + Session.TargetCompId + ".txt";

            using SaveFileDialog dlg = new();
            dlg.Filter           = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            dlg.FilterIndex      = 2;
            dlg.RestoreDirectory = true;
            dlg.FileName         = filename;
            dlg.Title            = "Export";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                Cursor original = Cursor.Current;
                Cursor.Current = Cursors.WaitCursor;

                try
                {
                    using FileStream stream   = new(dlg.FileName, FileMode.Create);
                    using StreamWriter writer = new(stream);
                    foreach (Fix.Message message in Session.Messages)
                    {
                        string    timestamp = "Unknown";
                        Fix.Field field     = message.Fields.Find(Fix.Dictionary.Fields.SendingTime.Tag);
                        if (field != null)
                        {
                            timestamp = field.Value;
                        }
                        string direction = message.Incoming ? "received" : "sent";

                        Fix.Dictionary.Message definition = Session.Version.Messages[message.MsgType];

                        writer.WriteLine("{0} ({1}) ({2})",
                                         timestamp,
                                         direction,
                                         definition.Name);

                        writer.WriteLine("{");
                        writer.WriteLine(message.ToString());
                        writer.WriteLine("}");
                    }
                }
                finally
                {
                    Cursor.Current = original;
                }
            }
        }
Beispiel #9
0
        static void FieldsEqual(string[,] expected, Fix.Message message)
        {
            Assert.AreEqual(expected.Length / 2, message.Fields.Count, "Field count");

            for (int index = 0; index < message.Fields.Count; ++index)
            {
                Fix.Field actual = message.Fields[index];

                if (!int.TryParse(expected[index, 0], out int tag))
                {
                    Assert.Fail("Non numeric tag '{0}={1}'", expected[index, 0], expected[index, 1]);
                }

                Assert.AreEqual(tag, actual.Tag, "Tag");
                Assert.AreEqual(expected[index, 1], actual.Value, "Value");
            }
        }
        protected string ToolTipForCell(int rowIndex, int columnIndex, char value)
        {
            DataGridViewRow row = Rows[rowIndex];

            if (row.DataBoundItem is not DataRowView rowView || rowView.IsNew)
            {
                return(null);
            }

            var dataRow = (FieldDataRow)rowView.Row;

            Fix.Field field = dataRow.Field;

            if (field.Definition == null)
            {
                return(null);
            }

            Type type = field.Definition.EnumeratedType;

            if (type == null)
            {
                return(null);
            }

            string name = type.GetEnumName(value);

            if (string.IsNullOrEmpty(name))
            {
                return(null);
            }

            MemberInfo[] info = type.GetMember(name);

            if (info.Length < 1)
            {
                return(null);
            }

            var attributes = info[0].GetCustomAttributes(typeof(DescriptionAttribute), false);

            string description = ((DescriptionAttribute)attributes[0]).Description;

            return(string.Join("\n", description.SplitInParts(80)));
        }
Beispiel #11
0
 public static Fix.Dictionary.Message MessageDefinition(Fix.Message message)
 {
     Fix.Field beginString          = message.Fields.Find(Fix.Dictionary.Fields.BeginString);
     Fix.Dictionary.Version version = null;
     if (beginString != null && !beginString.Value.StartsWith("FIXT."))
     {
         version = Fix.Dictionary.Versions[beginString.Value];
     }
     if (version == null)
     {
         version = Fix.Dictionary.Versions.Default;
     }
     Fix.Dictionary.Message exemplar = version.Messages[message.MsgType];
     if (exemplar == null)
     {
         return(Fix.Dictionary.Messages[message.MsgType]);
     }
     return(exemplar);
 }
Beispiel #12
0
        public void TestShortTimestampDateTimeConversion()
        {
            var field = new Fix.Field(Fix.Dictionary.Fields.ExpireTime, "20140306-06:01:32");

            Assert.IsNotNull((DateTime?)field);
        }
Beispiel #13
0
        public void TestDescriptionOfExecInstWithMultipleValues()
        {
            var field = new Fix.Field(Fix.Dictionary.Fields.ExecInst, "c x");

            Assert.AreEqual("Ignore price validity checks, Ignore notional value checks", field.ValueDescription);
        }
Beispiel #14
0
        public void TestFieldValueDescriptionWithNumericEnumDefinition()
        {
            var field = new Fix.Field(Fix.Dictionary.Fields.SessionStatus, Fix.SessionStatus.SessionActive);

            Assert.AreEqual("Session active", field.ValueDescription);
        }
Beispiel #15
0
        public void TestInvalidDateTimeConversion()
        {
            var field = new Fix.Field(Fix.Dictionary.Fields.ExpireTime, "blah");

            Assert.IsNull((DateTime?)field);
        }
Beispiel #16
0
        public void TestDateDateTimeConversion()
        {
            var field = new Fix.Field(Fix.Dictionary.Fields.ExpireTime, "20140306");

            Assert.IsNotNull((DateTime?)field);
        }
Beispiel #17
0
 public void TestInvalidStringTagConstructor()
 {
     _ = new Fix.Field("blah", "D");
 }
Beispiel #18
0
 public static Fix.Dictionary.Field FieldDefinition(Fix.Dictionary.Message message, Fix.Field field)
 {
     message.Fields.TryGetValue(field.Tag, out Fix.Dictionary.Field definition);
     return(definition);
 }
Beispiel #19
0
        public void TestLongTimestampDateTimeConversion()
        {
            var field = new Fix.Field(FIX_5_0SP2.Fields.ExpireTime, "20140306-06:01:32.345");

            Assert.IsNotNull((DateTime?)field);
        }