Example #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();
        }
Example #2
0
        public void NewOrder(STRUCT_0393 message)
        {
            StreamWriter sw = SocketManager.getInstance().clientSocketMap[SocketManager.iptable["SOCKET3"]].sw;

            if (sw != null)
            {
                sw.WriteLine(message.toKRXFORMAT());
                sw.Flush();
                insert신규주문(message);
                GETDATA();
            }
            orderLogger.Info(string.Format("NewOrder     : {0}", JsonConvert.SerializeObject(message)));
        }
Example #3
0
        public void NewOrder(STRUCT_0374 message, int orderQty)
        {
            STRUCT_0393 order = new STRUCT_0393(message.topic, message.seq, message.ISSUE_CODE, MainForm.orderNumber.ToString("0000000000"), "0000000000", message.ASK_BID_TYPE_CODE,
                                                OrderParam.NewOrder, orderQty.ToString("0000000000"), message.TRADING_PRICE);

            StreamWriter sw = SocketManager.getInstance().clientSocketMap[SocketManager.iptable["SOCKET3"]].sw;

            if (sw != null)
            {
                sw.WriteLine(order.toKRXFORMAT());
                sw.Flush();
                insert신규주문(order);
                GETDATA();
            }
            orderLogger.Info(string.Format("NewOrder     : {0}", JsonConvert.SerializeObject(order)));
        }
Example #4
0
        public void insertNewOrderTable(STRUCT_0393 message)
        {
            DataTable dt  = mainForm.dataTableMap["신규주문"];
            DataRow   row = dt.NewRow();

            row[0]  = message.seq;
            row[1]  = message.topic;
            row[2]  = message.ticketSeq;
            row[3]  = message.formatLocalTime;
            row[4]  = message.ORDER_IDENTIFICATION;
            row[5]  = message.ORIGINAL_ORDER_IDENTIFICATION;
            row[6]  = message.ISSUE_CODE;
            row[7]  = message.ASK_BIDTYPE_CODE;
            row[8]  = message.ORDER_PRICE;
            row[9]  = message.ORDER_QUANTITY;
            row[10] = message.FILLED_QUANTITY;
            row[11] = message.CANCELE_QUANTITY;
            row[12] = message.CANCELED_QUANTITY;

            dt.Rows.Add(row);
        }
Example #5
0
        public void insert신규주문(STRUCT_0393 message)
        {
            신규주문 data = new 신규주문();

            data.시퀀스   = message.seq;
            data.토픽    = message.topic;
            data.시퀀스1  = message.ticketSeq;
            data.시간    = message.formatLocalTime;
            data.주문번호  = message.ORDER_IDENTIFICATION;
            data.원주문번호 = message.ORIGINAL_ORDER_IDENTIFICATION;
            data.종목    = message.ISSUE_CODE;
            data.매매구분  = message.ASK_BIDTYPE_CODE;
            data.가격    = message.ORDER_PRICE;
            data.수량    = Int32.Parse(message.ORDER_QUANTITY);
            data.체결    = Int32.Parse(message.FILLED_QUANTITY);
            data.취소요청  = Int32.Parse(message.CANCELE_QUANTITY);
            data.취소확인  = Int32.Parse(message.CANCELED_QUANTITY);
            lock (MainForm.lockObj)
            {
                신규주문테이블.Add(data);
            }
        }
Example #6
0
        public void ReceiveConfirm(STRUCT_0419 message)
        {
            string             OrgOrderNumber = message.ORIGINAL_ORDER_IDENTIFICATION;
            string             OrderNumber    = message.ORDER_IDENTIFICATION;
            int                cancelQty      = Int32.Parse(message.REAL_MODIFY_OR_CANCEL_ORDER_QUANTITY);
            int                orderQty       = Int32.Parse(message.ORDER_QUANTITY);
            int                rejectQty      = orderQty - cancelQty;
            IEnumerable <신규주문> query          = System.Linq.Enumerable.Where <신규주문>(신규주문테이블, n => n.주문번호 == OrgOrderNumber);
            IEnumerable <취소주문> query2         = System.Linq.Enumerable.Where <취소주문>(취소주문테이블, n => n.주문번호 == OrderNumber);
            int                ticketSeq      = 0;

            if (query2.Any <취소주문>())
            {
                foreach (취소주문 find in query2)
                {
                    lock (MainForm.lockObj)
                    {
                        find.취소거부 = rejectQty;
                        find.취소확인 = cancelQty;
                        ticketSeq = find.시퀀스1;
                    }
                }
            }

            if (message.ORDER_REJECTED_REASON_CODE.Equals("0803") || message.ORDER_REJECTED_REASON_CODE.Equals("0804"))
            {
                if (query.Any <신규주문>())
                {
                    STRUCT_0393 order = null;
                    foreach (신규주문 find in query)
                    {
                        find.취소확인 = 0;
                        if (find.매매구분.Equals("1"))
                        {
                            //매수 주문하기
                            order = new STRUCT_0393(find.토픽, ticketSeq, find.종목,
                                                    MainForm.orderNumber.ToString("0000000000"), "0000000000", "2", OrderParam.NewOrder,
                                                    rejectQty.ToString("0000000000"), find.가격);
                        }
                        else
                        {
                            //매도 주문하기
                            order = new STRUCT_0393(find.토픽, ticketSeq, find.종목,
                                                    MainForm.orderNumber.ToString("0000000000"), "0000000000", "1", OrderParam.NewOrder,
                                                    rejectQty.ToString("0000000000"), find.가격);
                        }
                    }

                    if (order != null)
                    {
                        Task NewOrderThread = new Task(() => this.NewOrder(order));
                        NewOrderThread.Start();
                    }
                }
            }
            else
            {
                if (query.Any <신규주문>())
                {
                    STRUCT_0393 order = null;
                    foreach (신규주문 find in query)
                    {
                        find.취소확인 = find.취소확인 + cancelQty;
                        if (cancelQty < orderQty)
                        {
                            if (find.매매구분.Equals("1"))
                            {
                                //매수 주문하기
                                order = new STRUCT_0393(find.토픽, find.시퀀스1, find.종목,
                                                        MainForm.orderNumber.ToString("0000000000"), "0000000000", "2", OrderParam.NewOrder,
                                                        rejectQty.ToString("0000000000"), find.가격);
                            }
                            else
                            {
                                //매도 주문하기
                                order = new STRUCT_0393(find.토픽, find.시퀀스1, find.종목,
                                                        MainForm.orderNumber.ToString("0000000000"), "0000000000", "1", OrderParam.NewOrder,
                                                        rejectQty.ToString("0000000000"), find.가격);
                            }
                        }
                        else
                        {
                            logger.Equals("NEVER canceled qty bigger then cancel qty");
                        }
                    }
                    if (order != null && cancelQty != orderQty) // 실제 취소된 수량과 취소요청 수량이 같을 경우 전량 취소 성공이라 주문을 안낸다
                    {
                        Task NewOrderThread = new Task(() => this.NewOrder(order));
                        NewOrderThread.Start();
                    }
                }
            }
            GETDATA();
        }