Exemple #1
0
        public MsgEventHandler(MainForm mainForm)
        {
            this.mainForm = mainForm;
            taskOption    = new ParallelOptions();
            taskOption.MaxDegreeOfParallelism = Environment.ProcessorCount;

            STRUCT_0374        init1 = new STRUCT_0374();
            STRUCT_0374_REPLY  init2 = new STRUCT_0374_REPLY();
            STRUCT_0393        init3 = new STRUCT_0393();
            STRUCT_0393_CANCEL init4 = new STRUCT_0393_CANCEL();
            STRUCT_0419        init5 = new STRUCT_0419();
        }
Exemple #2
0
        public void insertFilledTable(STRUCT_0374_REPLY message)
        {
            DataTable dt  = mainForm.dataTableMap["운용테이블"];
            DataRow   row = dt.NewRow();

            row[0] = message.seq;
            row[1] = message.topic;
            row[2] = message.formatDateTime;
            row[3] = message.TRADING_PRICE;
            row[4] = message.TRADING_VOLUMN;
            row[5] = message.POSITION;
            row[6] = message.netfillCashByPointValue_commision;
            row[7] = "";
            dt.Rows.Add(row);
        }
Exemple #3
0
        public void insert운용(STRUCT_0374_REPLY message)
        {
            운용 data = new 운용();

            data.시퀀스1 = message.ticketSeq;
            data.시퀀스  = message.seq;
            data.토픽   = message.topic;
            data.시간   = message.formatDateTime;
            data.매수매도 = message.ASK_BID_TYPE_CODE;
            data.가격   = message.TRADING_PRICE;
            data.수량   = Int32.Parse(message.TRADING_VOLUMN);
            data.포지션  = Int32.Parse(message.POSITION);
            data.순손익  = Double.Parse(message.netfillCashByPointValue_commision);
            lock (MainForm.lockObj)
            {
                운용테이블.Add(data);
            }
        }
Exemple #4
0
        public void FilledMessageProc(STRUCT_0374_REPLY msg)
        {
            IEnumerable <신규주문> query = System.Linq.Enumerable.Where <신규주문>(신규주문테이블, n => n.주문번호 == msg.ORDER_IDENTIFICATION);

            if (query.Any <신규주문>())
            {
                foreach (신규주문 find in query)
                {
                    lock (MainForm.lockObj)
                    {
                        find.체결 = find.체결 + Int32.Parse(msg.TRADING_VOLUMN);
                    }
                    msg.ticketSeq = find.시퀀스1;
                    msg.orderSeq  = find.시퀀스;
                }
            }
            else
            {
                logger.Error(string.Format("does not exist ticketSeq in filled msg ORRDER_IDENTIFICATION : {0}", msg.ORDER_IDENTIFICATION));
            }
            filledLogger.Info(string.Format("Filled       : {0}", JsonConvert.SerializeObject(msg)));
        }
Exemple #5
0
        public void listener(string socketID, TCPListenerSet listenerSet)
        {
            TcpClient    client = null;
            StreamReader sr;
            string       getData = "";
            string       header  = "";

            try
            {
                listenerSet.listener.Start();
                while (true)
                {
                    socketLogger.Info(string.Format("socket id {0} listen... socket {1}", socketID, listenerSet.listener.LocalEndpoint));
                    client = listenerSet.listener.AcceptTcpClient();
                    socketLogger.Info(string.Format("socket id {0} accept socket {1}", socketID, client.Client.RemoteEndPoint));
                    listenerSet.ns = client.GetStream();
                    sr             = new StreamReader(client.GetStream());
                    while (client.Connected)
                    {
                        int size = 0;
                        if (socketID.Equals("OMS"))
                        {
                            size    = listenerSet.ns.Read(listenerSet.readBuffer, 0, listenerSet.readBuffer.Length);
                            getData = System.Text.Encoding.ASCII.GetString(listenerSet.readBuffer);
                        }
                        else
                        {
                            getData = sr.ReadLine();
                        }

                        if (getData != null)
                        {
                            header = getData.Substring(0, 4);
                            //lock (MainForm.lockObj)
                            {
                                switch (header)
                                {
                                case "0374":
                                    if (socketID.Equals("OMS"))
                                    {
                                        STRUCT_0374_REPLY msg_oms = new STRUCT_0374_REPLY(socketID, getData);
                                        Task FilledThread         = new Task(() => msgHandler.FilledMessageProc(msg_oms));
                                        Task positionCalcThread   = new Task(() => msgHandler.PositionCalcFilled(msg_oms));
                                        FilledThread.Start();
                                        positionCalcThread.Start();
                                    }
                                    else
                                    {
                                        STRUCT_0374 msg_ticket         = new STRUCT_0374(socketID, getData);
                                        Task        CancelCheckThread  = new Task(() => msgHandler.CancelCheck(msg_ticket));
                                        Task        positionCalcThread = new Task(() => msgHandler.PositionCalcTicket(msg_ticket));
                                        CancelCheckThread.Start();
                                        positionCalcThread.Start();
                                    }
                                    break;

                                case "0393":
                                    messageQueue_0393.Enqueue(new STRUCT_0393(socketID, getData));
                                    break;

                                case "0419":
                                    STRUCT_0419 msg_confirm   = new STRUCT_0419(socketID, getData);
                                    Task        ConfirmThread = new Task(() => msgHandler.ReceiveConfirm(msg_confirm));
                                    ConfirmThread.Start();
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                        else
                        {
                            if (listenerSet.ns != null)
                            {
                                listenerSet.ns.Close();
                            }
                            if (client != null)
                            {
                                client.Close();
                            }
                            if (client.GetStream() != null)
                            {
                                client.GetStream().Close();
                            }
                        }
                    }
                }
            }
            catch (Exception error)
            {
                logger.Error(error.ToString());
            }
            finally
            {
                if (listenerSet.ns != null)
                {
                    listenerSet.ns.Close();
                }
                if (client.Connected == true)
                {
                    if (client?.GetStream() != null)
                    {
                        client.GetStream().Close();
                    }
                }
                if (client != null)
                {
                    client.Close();
                }
            }
        }
Exemple #6
0
        public void PositionCalcFilled(STRUCT_0374_REPLY data)
        {
            double askFillCash     = 0;
            double avgAskFillPrice = 0;
            int    askQty          = 0;

            double bidFillCash     = 0;
            double avgBidFillPrice = 0;
            int    bidQty          = 0;
            int    netQty          = 0;

            double fillCash                          = 0;
            double netfillCash                       = 0;
            string dateTime                          = "";
            double netfillCashByPointValue           = 0;
            double netfillCashByPointValue_commision = 0;
            double totalCommision                    = 0;
            double openProfit                        = 0;

            if (calcMap.ContainsKey(data.topic))
            {
                Dictionary <string, string> subCalcMap = calcMap[data.topic];
                double filledPrice = double.Parse(data.TRADING_PRICE);
                int    filledCount = int.Parse(data.TRADING_VOLUMN);
                int    side        = int.Parse(data.ASK_BID_TYPE_CODE);
                dateTime = data.dateTime.ToString("HH:mm:ss.fff");
                string topic = data.topic;

                askFillCash                       = Double.Parse(subCalcMap["askFillCash"]);
                bidFillCash                       = Double.Parse(subCalcMap["bidFillCash"]);
                avgAskFillPrice                   = Double.Parse(subCalcMap["avgAskFillPrice"]);
                avgBidFillPrice                   = Double.Parse(subCalcMap["avgBidFillPrice"]);
                askQty                            = Int32.Parse(subCalcMap["askQty"]);
                bidQty                            = Int32.Parse(subCalcMap["bidQty"]);
                netQty                            = Int32.Parse(subCalcMap["netQty"]);
                fillCash                          = Double.Parse(subCalcMap["fillCash"]);
                netfillCash                       = Double.Parse(subCalcMap["netfillCash"]);
                totalCommision                    = Double.Parse(subCalcMap["totalCommision"]);
                netfillCashByPointValue           = Double.Parse(subCalcMap["netfillCashByPointValue"]);
                netfillCashByPointValue_commision = Double.Parse(subCalcMap["netfillCashByPointValue_commision"]);

                if ((SIDE)side == SIDE.ASK)
                {
                    askFillCash    += filledPrice * filledCount;
                    askQty         += filledCount;
                    fillCash       += filledPrice * filledCount;
                    avgAskFillPrice = askFillCash / askQty;
                }
                else
                {
                    bidFillCash    += filledPrice * filledCount;
                    bidQty         += filledCount;
                    fillCash       -= filledPrice * filledCount;
                    avgBidFillPrice = bidFillCash / bidQty;
                }

                netQty = bidQty - askQty;
                if (netQty > 0)
                {
                    netfillCash = netQty * avgBidFillPrice + fillCash;
                    openProfit  = netQty * (filledPrice - avgBidFillPrice);
                }
                else if (netQty < 0)
                {
                    netfillCash = netQty * avgAskFillPrice + fillCash;
                    openProfit  = netQty * (avgAskFillPrice - filledPrice);
                }
                else
                {
                    netfillCash = fillCash;
                }
                totalCommision                   += commission * filledCount;
                netfillCashByPointValue           = netfillCash * pointValue + openProfit;
                netfillCashByPointValue_commision = netfillCash * pointValue - totalCommision + openProfit;

                subCalcMap.Clear();
                subCalcMap.Add("topic", data.topic.ToString());
                subCalcMap.Add("dateTime", dateTime.ToString());
                subCalcMap.Add("askFillCash", askFillCash.ToString());
                subCalcMap.Add("bidFillCash", bidFillCash.ToString());
                subCalcMap.Add("avgAskFillPrice", avgAskFillPrice.ToString());
                subCalcMap.Add("avgBidFillPrice", avgBidFillPrice.ToString());
                subCalcMap.Add("askQty", askQty.ToString());
                subCalcMap.Add("bidQty", bidQty.ToString());
                subCalcMap.Add("netQty", netQty.ToString());
                subCalcMap.Add("fillCash", fillCash.ToString());
                subCalcMap.Add("netfillCash", netfillCash.ToString());
                subCalcMap.Add("netfillCashByPointValue", netfillCashByPointValue.ToString());
                subCalcMap.Add("netfillCashByPointValue_commision", netfillCashByPointValue_commision.ToString());
                subCalcMap.Add("totalCommision", totalCommision.ToString());

                if (netQty > 0)
                {
                    data.POSITION = "+" + netQty.ToString();
                }
                else
                {
                    data.POSITION = netQty.ToString();
                }
                data.netPROFIT = netfillCashByPointValue_commision.ToString();
                data.netfillCashByPointValue_commision = netfillCashByPointValue_commision.ToString();
            }
            else
            {
                Dictionary <string, string> subCalcMap = new Dictionary <string, string>();
                double filledPrice = double.Parse(data.TRADING_PRICE);
                int    filledCount = int.Parse(data.TRADING_VOLUMN);
                int    side        = int.Parse(data.ASK_BID_TYPE_CODE);
                string topic       = data.topic;
                if ((SIDE)side == SIDE.ASK)
                {
                    askFillCash    += filledPrice * filledCount;
                    askQty         += filledCount;
                    fillCash       += filledPrice * filledCount;
                    avgAskFillPrice = askFillCash / askQty;
                }
                else
                {
                    bidFillCash    += filledPrice * filledCount;
                    bidQty         += filledCount;
                    fillCash       -= filledPrice * filledCount;
                    avgBidFillPrice = bidFillCash / bidQty;
                }
                netQty = bidQty - askQty;
                if (netQty > 0)
                {
                    netfillCash = netQty * avgBidFillPrice + fillCash;
                }
                else if (netQty < 0)
                {
                    netfillCash = netQty * avgAskFillPrice + fillCash;
                }
                else
                {
                    netfillCash = fillCash;
                }

                totalCommision += commission * filledCount;

                netfillCashByPointValue           = netfillCash * pointValue + openProfit;
                netfillCashByPointValue_commision = netfillCash * pointValue - totalCommision + openProfit;

                subCalcMap.Add("topic", data.topic.ToString());
                subCalcMap.Add("dateTime", dateTime.ToString());
                subCalcMap.Add("askFillCash", askFillCash.ToString());
                subCalcMap.Add("bidFillCash", bidFillCash.ToString());
                subCalcMap.Add("avgAskFillPrice", avgAskFillPrice.ToString());
                subCalcMap.Add("avgBidFillPrice", avgBidFillPrice.ToString());
                subCalcMap.Add("askQty", askQty.ToString());
                subCalcMap.Add("bidQty", bidQty.ToString());
                subCalcMap.Add("netQty", netQty.ToString());
                subCalcMap.Add("fillCash", fillCash.ToString());
                subCalcMap.Add("netfillCash", netfillCash.ToString());
                subCalcMap.Add("netfillCashByPointValue", netfillCashByPointValue.ToString());
                subCalcMap.Add("netfillCashByPointValue_commision", netfillCashByPointValue_commision.ToString());
                subCalcMap.Add("totalCommision", totalCommision.ToString());

                calcMap.Add(data.topic, subCalcMap);
                if (netQty > 0)
                {
                    data.POSITION = "+" + netQty.ToString();
                }
                else
                {
                    data.POSITION = netQty.ToString();
                }
                data.netPROFIT = netfillCashByPointValue_commision.ToString();
                data.netfillCashByPointValue_commision = netfillCashByPointValue_commision.ToString();
            }
            insert운용(data);
            GETDATA();
        }