Beispiel #1
0
        public void TestMessageWritingWrittenEvents()
        {
            byte[] data = Encoding.ASCII.GetBytes("8=FIX.4.09=28635=849=ITGHK56=KODIAK_KASFQA34=163357=kasfqa52=20091023-05:40:1637=712-217=420=039=055=649707154=238=100000032=031=0.00000014=06=0.00000011=296.2.240=160=20091023-05:40:1659=047=A30=DMA15=KRW6005=ALT=18500TOT=1256276416111=09886=0.0000009887=09912=09911=010=135");
            using MemoryStream stream = new();
            using Fix.Writer writer   = new(stream, leaveOpen : true);
            int messagesWriting = 0;
            int messagesWritten = 0;

            writer.MessageWriting += (sender, ev) => ++ messagesWriting;
            writer.MessageWritten += (sender, ev) => ++ messagesWritten;
            var message = new Fix.Message(data);

            writer.Write(message);
            Assert.AreEqual(1, messagesWriting);
            Assert.AreEqual(1, messagesWritten);
        }
        protected void SendFromAcceptor(Fix.Dictionary.Message definition, IEnumerable <Fix.Field> fields = null)
        {
            var message = new Fix.Message {
                MsgType = definition.MsgType
            };

            if (fields != null)
            {
                foreach (Fix.Field field in fields)
                {
                    message.Fields.Add(field.Tag, field.Value);
                }
            }

            Acceptor.Send(message);
        }
Beispiel #3
0
        public void TestDataField()
        {
            string signature = Convert.ToBase64String(StringToByteArray("A1E6230EC9659598189C45304C58C1D5"));

            string[,] expected =
            {
                { "8",  "FIX.4.0"                      },
                { "9",  "131"                          },
                { "35", "C"                            },
                { "49", "KODIAK"                       },
                { "56", "server"                       },
                { "34", "7"                            },
                { "50", "kgehvwap"                     },
                { "52", "20090724-07:20:41"            },
                { "94", "0"                            },
                { "33", "1"                            },
                { "58", "UserRegisterRequest#7,13,13#" },
                { "93", "16"                           },
                { "89", signature                      },
                { "10", "147"                          }
            };

            byte[] a       = Encoding.ASCII.GetBytes("8=FIX.4.09=13135=C49=KODIAK56=server34=750=kgehvwap52=20090724-07:20:4194=033=158=UserRegisterRequest#7,13,13#93=1689=");
            byte[] b       = StringToByteArray("A1E6230EC9659598189C45304C58C1D5");
            byte[] c       = Encoding.ASCII.GetBytes("10=147");
            byte[] data    = a.Concat(b).Concat(c).ToArray();
            var    message = new Fix.Message(data);

            FieldsEqual(expected, message);
            Assert.AreEqual(14, message.Fields.Count);
            Assert.AreEqual(131, message.BodyLength);
            Assert.AreEqual("131", message.ComputeBodyLength());
            Assert.AreEqual("147", message.CheckSum);
            Assert.AreEqual("147", message.ComputeCheckSum());

            var stream = new MemoryStream();

            using (Fix.Writer writer = new(stream, leaveOpen : true))
            {
                writer.Write(message);
            }

            byte[] serialised = stream.ToArray();

            Assert.IsTrue(StructuralComparisons.StructuralEqualityComparer.Equals(data, serialised));
        }
Beispiel #4
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");
            }
        }
Beispiel #5
0
        public void TestNoTrailingSeparator()
        {
            string[,] expected =
            {
                { "8",    "FIX.4.0"                  },
                { "9",    "286"                      },
                { "35",   "8"                        },
                { "49",   "ITGHK"                    },
                { "56",   "KODIAK_KASFQA"            },
                { "34",   "1633"                     },
                { "57",   "kasfqa"                   },
                { "52",   "20091023-05:40:16"        },
                { "37",   "712-2"                    },
                { "17",   "4"                        },
                { "20",   "0"                        },
                { "39",   "0"                        },
                { "55",   "6497071"                  },
                { "54",   "2"                        },
                { "38",   "1000000"                  },
                { "32",   "0"                        },
                { "31",   "0.000000"                 },
                { "14",   "0"                        },
                { "6",    "0.000000"                 },
                { "11",   "296.2.2"                  },
                { "40",   "1"                        },
                { "60",   "20091023-05:40:16"        },
                { "59",   "0"                        },
                { "47",   "A"                        },
                { "30",   "DMA"                      },
                { "15",   "KRW"                      },
                { "6005", "ALT=18500TOT=1256276416" },
                { "111",  "0"                        },
                { "9886", "0.000000"                 },
                { "9887", "0"                        },
                { "9912", "0"                        },
                { "9911", "0"                        },
                { "10",   "135"                      }
            };

            byte[] data    = Encoding.ASCII.GetBytes("8=FIX.4.09=28635=849=ITGHK56=KODIAK_KASFQA34=163357=kasfqa52=20091023-05:40:1637=712-217=420=039=055=649707154=238=100000032=031=0.00000014=06=0.00000011=296.2.240=160=20091023-05:40:1659=047=A30=DMA15=KRW6005=ALT=18500TOT=1256276416111=09886=0.0000009887=09912=09911=010=135");
            var    message = new Fix.Message(data);

            FieldsEqual(expected, message);
        }
Beispiel #6
0
        public void TestReadKodiakOrderWave()
        {
            string[,] expected =
            {
                { "8",    "FIX.4.0"           },
                { "9",    "236"               },
                { "35",   "UWO"               },
                { "49",   "KODIAK"            },
                { "56",   "server"            },
                { "34",   "566"               },
                { "50",   "kgehvwap"          },
                { "97",   "N"                 },
                { "52",   "20090723-04:27:20" },
                { "66",   "0"                 },
                { "68",   "1"                 },
                { "11",   "kgehvwap.52.52"    },
                { "15",   "AUD"               },
                { "21",   "2"                 },
                { "38",   "56"                },
                { "40",   "2"                 },
                { "44",   "39.590000"         },
                { "47",   "A"                 },
                { "54",   "1"                 },
                { "55",   "RIO.AX"            },
                { "59",   "3"                 },
                { "63",   "0"                 },
                { "100",  "ASX"               },
                { "203",  "1"                 },
                { "6000", ""                  },
                { "6001", "test"              },
                { "6002", ""                  },
                { "6005", "ALT=41.58"         },
                { "7050", "kgehvwap_test"     },
                { "10",   "077"               }
            };

            byte[] data = Encoding.ASCII.GetBytes("8=FIX.4.09=23635=UWO49=KODIAK56=server34=56650=kgehvwap97=N52=20090723-04:27:2066=068=111=kgehvwap.52.5215=AUD21=238=5640=244=39.59000047=A54=155=RIO.AX59=363=0100=ASX203=16000=6001=test6002=6005=ALT=41.587050=kgehvwap_test10=077");

            var message = new Fix.Message(data);

            FieldsEqual(expected, message);

            Assert.AreEqual(Fix.Dictionary.FIX_4_0.Messages.KodiakWaveOrder.MsgType, message.MsgType);
        }
Beispiel #7
0
        static void TestMessageFieldAccess()
        {
            byte[] data    = Encoding.ASCII.GetBytes("8=FIX.4.09=28635=849=ITGHK56=KODIAK_KASFQA34=163357=kasfqa52=20091023-05:40:1637=712-217=420=039=055=649707154=238=100000032=031=0.00000014=06=0.00000011=296.2.240=160=20091023-05:40:1659=047=A30=DMA15=KRW6005=ALT=18500TOT=1256276416111=09886=0.0000009887=09912=09911=010=135");
            var    message = new Fix.Message(data);

            int[] tags = new int[message.Fields.Count];
            for (int index = 0; index < tags.Length; ++index)
            {
                tags[index] = message.Fields[index].Tag;
            }
            Console.WriteLine("length = {0}", tags.Length);
            var random = new Random();

            for (int i = 0; i < 100000; ++i)
            {
                int tag = tags[random.Next(tags.Length)];
                _ = message.Fields.Find(tag);
            }
        }
 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 #9
0
        public void TestNameValuePairConstructor()
        {
            string[,] fields =
            {
                { "8",  "FIX.4.0"                                                },
                { "9",  "127"                                                    },
                { "35", "C"                                                      },
                { "49", "ITGHK"                                                  },
                { "56", "KODIAK_KGEHVWAP"                                        },
                { "34", "4"                                                      },
                { "52", "20090630-23:37:12"                                      },
                { "94", "0"                                                      },
                { "33", "1"                                                      },
                { "58", "RemotedHost#Name=gateQA-p01,Ip=10.132.3.125,Port=7081#" },
                { "10", "128"                                                    }
            };
            var message = new Fix.Message(fields);

            Assert.AreEqual("ITGHK", message.Fields.Find(49)?.Value);
        }
Beispiel #10
0
        void ResendButtonClick(object?sender, EventArgs e)
        {
            if (SelectedMessage is not Fix.Message source)
            {
                return;
            }

            if (Session is null)
            {
                return;
            }

            //
            // Create a new copy of the message.
            //
            var message = new Fix.Message();

            message.Fields.Clear();

            foreach (Fix.Field field in source.Fields)
            {
                if (field.Tag == FIX_5_0SP2.Fields.ClOrdID.Tag)
                {
                    message.Fields.Add(new Fix.Field(field.Tag, Session.FormatClOrdId(Session.NextClOrdId++)));
                }
                else if (field.Tag == FIX_5_0SP2.Fields.OrderID.Tag)
                {
                    message.Fields.Add(new Fix.Field(field.Tag, Session.NextOrderId++));
                }
                else if (field.Tag == FIX_5_0SP2.Fields.ExecID.Tag)
                {
                    message.Fields.Add(new Fix.Field(field.Tag, Session.NextExecId++));
                }
                else
                {
                    message.Fields.Add(new Fix.Field(field.Tag, field.Value));
                }
            }

            Session.Send(message);
        }
Beispiel #11
0
        public void TestReadKodiakExecutionReport()
        {
            string[,] expected =
            {
                { "8",   "FIX.4.0"           },
                { "9",   "206"               },
                { "35",  "8"                 },
                { "49",  "GEHVWAP"           },
                { "56",  "HKGATE"            },
                { "128", "test"              },
                { "34",  "220"               },
                { "97",  "N"                 },
                { "52",  "20090723-04:27:20" },
                { "6",   "39.590000"         },
                { "11",  "11"                },
                { "14",  "100"               },
                { "17",  "26"                },
                { "20",  "0"                 },
                { "30",  "ASX"               },
                { "31",  "39.590000"         },
                { "32",  "56"                },
                { "37",  "11"                },
                { "38",  "100"               },
                { "39",  "2"                 },
                { "40",  "1"                 },
                { "44",  "0.000000"          },
                { "54",  "1"                 },
                { "55",  "RIO.AX"            },
                { "59",  "0"                 },
                { "60",  "20090723-04:27:20" },
                { "10",  "130"               }
            };

            byte[] data = Encoding.ASCII.GetBytes("8=FIX.4.09=20635=849=GEHVWAP56=HKGATE128=test34=22097=N52=20090723-04:27:206=39.59000011=1114=10017=2620=030=ASX31=39.59000032=5637=1138=10039=240=144=0.00000054=155=RIO.AX59=060=20090723-04:27:2010=130");

            var message = new Fix.Message(data);

            FieldsEqual(expected, message);

            //Assert.AreEqual(Fix.Dictionary.FIX_4_0.Messages.KodiakOrderWave, message.MsgType);
        }
Beispiel #12
0
        public void TestConstructorAllMinimumRequirementsMet()
        {
            var message = new Fix.Message {
                MsgType = FIX_5_0SP2.Messages.NewOrderSingle.MsgType
            };

            message.Fields.Set(FIX_5_0SP2.Fields.SenderCompID, "SENDER");
            message.Fields.Set(FIX_5_0SP2.Fields.TargetCompID, "TARGET");
            message.Fields.Set(FIX_5_0SP2.Fields.Symbol, "BHP");
            message.Fields.Set(FIX_5_0SP2.Fields.ClOrdID, "1.2.3");
            message.Fields.Set(FIX_5_0SP2.Fields.OrderQty, 5000);
            var order = new Fix.Order(message);

            Assert.IsNotNull(order);
            Assert.AreEqual("SENDER", order.SenderCompID);
            Assert.AreEqual("TARGET", order.TargetCompID);
            Assert.AreEqual("BHP", order.Symbol);
            Assert.AreEqual("1.2.3", order.ClOrdID);
            Assert.AreEqual(5000, order.OrderQty);
            Assert.AreEqual(1, order.Messages.Count);
        }
        protected void SendFromInitiator(Fix.Dictionary.Message definition, IEnumerable <Fix.Field> fields = null)
        {
            var message = new Fix.Message {
                MsgType = definition.MsgType
            };

            if (fields != null)
            {
                foreach (Fix.Field field in fields)
                {
                    if (field.Tag == Fix.Dictionary.Fields.MsgSeqNum.Tag)
                    {
                        message.Fields.Set(field.Tag, field.Value);
                    }
                    else
                    {
                        message.Fields.Add(field.Tag, field.Value);
                    }
                }
            }

            Initiator.Send(message);
        }
        void UpdateUiState()
        {
            _resendButton.Enabled         = false;
            _resendMenuItem.Enabled       = false;
            _clearButton.Enabled          = false;
            _clearMenuItem.Enabled        = false;
            _exportButton.Enabled         = false;
            _exportMenuItem.Enabled       = false;
            _tailMessagesCheckBox.Enabled = false;
            _messageSearchTextBox.Enabled = false;
            _fieldSearchTextBox.Enabled   = false;

            if (Session == null || Session.Messages == null || Session.Messages.Count < 1)
            {
                return;
            }

            _clearButton.Enabled          = true;
            _clearMenuItem.Enabled        = true;
            _exportButton.Enabled         = true;
            _exportMenuItem.Enabled       = true;
            _tailMessagesCheckBox.Enabled = true;
            _messageSearchTextBox.Enabled = true;

            Fix.Message message = SelectedMessage;

            if (message != null)
            {
                _fieldSearchTextBox.Enabled = true;

                if (Session.Connected && !message.Incoming)
                {
                    _resendButton.Enabled   = true;
                    _resendMenuItem.Enabled = true;
                }
            }
        }
Beispiel #15
0
 public void TestDataFieldWithNoPrecedingSize()
 {
     byte[] data = Encoding.ASCII.GetBytes("89=��#�e���E0LX��10=147");
     _ = new Fix.Message(data);
 }
Beispiel #16
0
        void RejectAllPendingOrders()
        {
            if (Session is null)
            {
                return;
            }

            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 is null)
                    {
                        continue;
                    }

                    if (order.OrdStatus != null)
                    {
                        continue;
                    }

                    var message = new Fix.Message {
                        MsgType = FIX_5_0SP2.Messages.ExecutionReport.MsgType
                    };

                    message.Fields.Set(FIX_5_0SP2.Fields.ClOrdID, order.ClOrdID);

                    if (order.Side is FieldValue side)
                    {
                        message.Fields.Set(order.Side);
                    }

                    message.Fields.Set(FIX_5_0SP2.Fields.Symbol, order.Symbol);
                    message.Fields.Set(FIX_5_0SP2.Fields.OrderQty, order.OrderQty);
                    message.Fields.Set(FIX_5_0SP2.OrdStatus.Rejected);

                    if (order.OrderID == null)
                    {
                        order.OrderID = Session.NextOrderId.ToString();
                    }

                    message.Fields.Set(FIX_5_0SP2.Fields.OrderID, order.OrderID);
                    message.Fields.Set(FIX_5_0SP2.Fields.ExecID, Session.NextExecId.ToString());
                    message.Fields.Set(FIX_5_0SP2.Fields.LastQty, 0);
                    message.Fields.Set(FIX_5_0SP2.Fields.LastPx, 0);
                    message.Fields.Set(FIX_5_0SP2.Fields.CumQty, 0);
                    message.Fields.Set(FIX_5_0SP2.Fields.AvgPx, 0);

                    if (Session.Version.BeginString != "FIX.4.0")
                    {
                        message.Fields.Set(FIX_5_0SP2.ExecType.Rejected);
                        message.Fields.Set(FIX_5_0SP2.Fields.LeavesQty, 0);
                    }

                    if (Session.Version.BeginString.StartsWith("FIX.4."))
                    {
                        message.Fields.Set(FIX_4_2.ExecTransType.New);
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }
        void MessageGridSelectionChanged(object sender, EventArgs e)
        {
            try
            {
                _fieldTable.BeginLoadData();
                _fieldTable.Rows.Clear();

                Fix.Message message = SelectedMessage;

                if (message == null)
                {
                    return;
                }

                foreach (Fix.Field field in message.Fields)
                {
                    if (_fieldTable.NewRow() is not FieldDataRow dataRow)
                    {
                        continue;
                    }

                    if (field.Definition == null)
                    {
                        field.Definition = Session.FieldDefinition(message, field);
                    }

                    dataRow.Field = field;

                    if (field.Definition != null)
                    {
                        dataRow[FieldDataTable.ColumnIndent]      = field.Definition.Indent;
                        dataRow[FieldDataTable.ColumnName]        = field.Definition.Name;
                        dataRow[FieldDataTable.ColumnCustom]      = false;
                        dataRow[FieldDataTable.ColumnRequired]    = field.Definition.Required;
                        dataRow[FieldDataTable.ColumnDescription] = field.ValueDescription;
                    }
                    else
                    {
                        dataRow[FieldDataTable.ColumnCustom]   = true;
                        dataRow[FieldDataTable.ColumnRequired] = false;
                    }

                    dataRow[FieldDataTable.ColumnTag]   = field.Tag;
                    dataRow[FieldDataTable.ColumnValue] = field.Value;

                    _fieldTable.Rows.Add(dataRow);
                }

                string text;
                using (MemoryStream stream = new())
                    using (Fix.Writer writer = new(stream, true))
                    {
                        writer.Write(message);
                        writer.Close();
                        text = Encoding.UTF8.GetString(stream.GetBuffer());
                    }

                _rawMessage.Text = text;

                switch (message.Status)
                {
                case Fix.MessageStatus.Error:
                    _statusMessage.ForeColor = Color.White;
                    _statusMessage.BackColor = Color.Red;
                    break;

                case Fix.MessageStatus.Warn:
                    _statusMessage.ForeColor = Color.Black;
                    _statusMessage.BackColor = Color.Yellow;
                    break;

                case Fix.MessageStatus.Info:
                    _statusMessage.ForeColor = Color.White;
                    _statusMessage.BackColor = Color.DodgerBlue;
                    break;

                case Fix.MessageStatus.None:
                    _statusMessage.ForeColor = SystemColors.ControlText;
                    _statusMessage.BackColor = SystemColors.Control;
                    break;
                }

                _statusMessage.Text = message.StatusMessage;

                MessageSelected?.Invoke(message);

                ApplyFieldSearch();
            }
            finally
            {
                _fieldTable.EndLoadData();
                UpdateUiState();
            }
        }
Beispiel #18
0
        void CancelAllOpenOrders()
        {
            if (Session is null)
            {
                return;
            }

            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 is null)
                    {
                        return;
                    }

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

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

                    MessagesPanel.UpdateMessage(message, order);

                    message.Fields.Set(FIX_5_0SP2.Fields.TransactTime, Fix.Field.TimeString(Session.MillisecondTimestamps));

                    if (order.Side is FieldValue side)
                    {
                        message.Fields.Set(FIX_5_0SP2.Fields.Side, side.Value);
                    }

                    message.Fields.Set(FIX_5_0SP2.Fields.Symbol, order.Symbol);
                    message.Fields.Set(FIX_5_0SP2.Fields.OrigClOrdID, order.ClOrdID);
                    message.Fields.Set(FIX_5_0SP2.Fields.ClOrdID, Session.FormatClOrdId(Session.NextClOrdId++));
                    //
                    // This field was removed from later versions.
                    //
                    Fix.Field?beginString = message.Fields.Find(FIX_5_0SP2.Fields.BeginString);

                    if (beginString is not null && beginString.Value == "FIX.4.0")
                    {
                        message.Fields.Set(FIX_4_2.Fields.CxlType, "F");
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }
Beispiel #19
0
        public void TestMsgTypeIsSetFromDefinition()
        {
            var message = new Fix.Message(FIX_5_0SP2.Messages.NewOrderSingle);

            Assert.AreEqual("D", message.MsgType);
        }
Beispiel #20
0
        void UnsolicitedCancelAllOpenOrders()
        {
            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.ExecutionReport.MsgType
                    };

                    message.Fields.Set(Fix.Dictionary.Fields.ClOrdID, order.ClOrdID);
                    message.Fields.Set(Fix.Dictionary.Fields.Side, (Fix.Side)order.Side);
                    message.Fields.Set(Fix.Dictionary.Fields.Symbol, order.Symbol);
                    message.Fields.Set(Fix.Dictionary.Fields.OrderQty, order.OrderQty);
                    message.Fields.Set(Fix.Dictionary.Fields.OrdStatus, Fix.OrdStatus.Canceled);

                    if (order.OrderID == null)
                    {
                        order.OrderID = Session.NextOrderId.ToString();
                    }

                    message.Fields.Set(Fix.Dictionary.Fields.OrderID, order.OrderID);
                    message.Fields.Set(Fix.Dictionary.Fields.ExecID, Session.NextExecId.ToString());
                    message.Fields.Set(Fix.Dictionary.Fields.LastQty, 0);
                    message.Fields.Set(Fix.Dictionary.Fields.LastPx, 0);
                    message.Fields.Set(Fix.Dictionary.Fields.CumQty, order.OrderQty);
                    message.Fields.Set(Fix.Dictionary.Fields.AvgPx, order.Price ?? 0);

                    if (Session.Version.BeginString != Fix.Dictionary.Versions.FIX_4_0.BeginString)
                    {
                        message.Fields.Set(Fix.Dictionary.Fields.ExecType, Fix.Dictionary.FIX_4_2.ExecType.Canceled);
                        message.Fields.Set(Fix.Dictionary.Fields.LeavesQty, 0);
                    }

                    if (Session.Version.BeginString.StartsWith("FIX.4."))
                    {
                        message.Fields.Set(Fix.Dictionary.FIX_4_0.Fields.ExecTransType, Fix.Dictionary.FIX_4_0.ExecTransType.New);
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }
Beispiel #21
0
        void ClientMessageGridGridSelectionChanged(object sender, EventArgs e)
        {
            try
            {
                _fieldTable.BeginLoadData();
                _fieldTable.Clear();

                Fix.Message message = SelectedMessage;

                if (message == null)
                {
                    return;
                }

                switch (message.Status)
                {
                case Fix.MessageStatus.Error:
                    _statusMessage.ForeColor = Color.White;
                    _statusMessage.BackColor = Color.Red;
                    break;

                case Fix.MessageStatus.Warn:
                    _statusMessage.ForeColor = Color.Black;
                    _statusMessage.BackColor = Color.Yellow;
                    break;

                case Fix.MessageStatus.Info:
                    _statusMessage.ForeColor = Color.White;
                    _statusMessage.BackColor = Color.DodgerBlue;
                    break;

                case Fix.MessageStatus.None:
                    _statusMessage.ForeColor = SystemColors.ControlText;
                    _statusMessage.BackColor = SystemColors.Control;
                    break;
                }

                _statusMessage.Text = message.StatusMessage;

                foreach (Fix.Field field in message.Fields)
                {
                    if (_fieldTable.NewRow() is not FieldDataRow dataRow)
                    {
                        continue;
                    }

                    if (field.Definition == null && message.Definition != null)
                    {
                        field.Definition = FieldDefinition(message.Definition, field);
                    }

                    dataRow.Field = field;

                    if (field.Definition != null)
                    {
                        dataRow[FieldDataTable.ColumnIndent]      = field.Definition.Indent;
                        dataRow[FieldDataTable.ColumnName]        = field.Definition.Name;
                        dataRow[FieldDataTable.ColumnCustom]      = false;
                        dataRow[FieldDataTable.ColumnRequired]    = field.Definition.Required;
                        dataRow[FieldDataTable.ColumnDescription] = field.ValueDescription;
                    }
                    else
                    {
                        dataRow[FieldDataTable.ColumnCustom]   = true;
                        dataRow[FieldDataTable.ColumnRequired] = false;
                    }

                    dataRow[FieldDataTable.ColumnTag]   = field.Tag;
                    dataRow[FieldDataTable.ColumnValue] = field.Value;

                    _fieldTable.Rows.Add(dataRow);
                }
            }
            finally
            {
                _fieldTable.EndLoadData();
            }
        }
Beispiel #22
0
 public void TestDataFieldWithNoTrailingSeparator()
 {
     byte[] data = Encoding.ASCII.GetBytes("8=FIX.4.09=13135=C49=KODIAK56=server34=750=kgehvwap52=20090724-07:20:4194=033=158=UserRegisterRequest#7,13,13#93=1689=\xA1\xE6\x23\x0E\xC9\x65\x95\x98\x18\x9C\x45\x30\x4C\x58\xC1\xD5\x31\x30=147");
     _ = new Fix.Message(data);
 }