コード例 #1
0
ファイル: MsgEventHandler.cs プロジェクト: wonjang/voldenuit
        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();
        }
コード例 #2
0
ファイル: MsgEventHandler.cs プロジェクト: wonjang/voldenuit
        public void CancelOrder(STRUCT_0393_CANCEL message)
        {
            string       sockID3 = "SOCKET3";
            StreamWriter sw      = SocketManager.getInstance().clientSocketMap[SocketManager.iptable[sockID3]].sw;

            if (sw != null)
            {
                sw.WriteLine(message.toKRXFORMAT());
                sw.Flush();
                insert취소주문(message);
                GETDATA();
            }
            orderLogger.Info(string.Format("CancelOrder  : {0}", JsonConvert.SerializeObject(message)));
        }
コード例 #3
0
ファイル: MsgEventHandler.cs プロジェクト: wonjang/voldenuit
        public void insertCancelOrder(STRUCT_0393_CANCEL 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.CANCELED_QUANTITY;
            row[11] = message.REJECT_CANCEL_QUANTITY;
            dt.Rows.Add(row);
        }
コード例 #4
0
ファイル: MsgEventHandler.cs プロジェクト: wonjang/voldenuit
        public void insert취소주문(STRUCT_0393_CANCEL 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.CANCELED_QUANTITY);
            data.취소거부  = Int32.Parse(message.REJECT_CANCEL_QUANTITY);
            lock (MainForm.lockObj)
            {
                취소주문테이블.Add(data);
            }
        }
コード例 #5
0
ファイル: MsgEventHandler.cs プロジェクト: wonjang/voldenuit
        public void CancelCheck(STRUCT_0374 message)
        {
            int         ticketOrderQty = Int32.Parse(message.TRADING_VOLUMN);
            List <신규주문> query          = null;

            if (message.ASK_BID_TYPE_CODE.Equals("1"))
            {
                query = 신규주문테이블.Where(n => n.수량 > n.체결 + n.취소요청 && n.매매구분 == "2" /*&& n.취소요청 == 0*/).ToList <신규주문>();
            }
            else
            {
                query = 신규주문테이블.Where(n => n.수량 > n.체결 + n.취소요청 && n.매매구분 == "1" /* && n.취소요청 == 0*/).ToList <신규주문>();
            }

            if (query.Any <신규주문>())
            {
                foreach (신규주문 find in query)
                {
                    int remainQty = find.수량 - find.체결 - find.취소요청;
                    if (remainQty > 0)
                    {
                        if (ticketOrderQty >= remainQty)
                        {
                            //전량취소
                            STRUCT_0393_CANCEL order = new STRUCT_0393_CANCEL(find.토픽, message.seq, find.종목,
                                                                              MainForm.orderNumber.ToString("0000000000"), find.주문번호, find.매매구분, OrderParam.CancelOrder,
                                                                              remainQty.ToString("0000000000"), find.가격);
                            lock (MainForm.lockObj)
                            {
                                find.취소요청 += remainQty;
                            }
                            Task CancelOrderThread = new Task(() => this.CancelOrder(order));
                            CancelOrderThread.Start();
                            ticketOrderQty -= remainQty;
                        }
                        else if (ticketOrderQty < remainQty)
                        {
                            if (ticketOrderQty > 0)
                            {
                                //부분취소
                                STRUCT_0393_CANCEL order = new STRUCT_0393_CANCEL(find.토픽, message.seq, find.종목,
                                                                                  MainForm.orderNumber.ToString("0000000000"), find.주문번호, find.매매구분, OrderParam.CancelOrder,
                                                                                  ticketOrderQty.ToString("0000000000"), find.가격);
                                lock (MainForm.lockObj)
                                {
                                    find.취소요청 += ticketOrderQty;
                                }
                                Task CancelOrderThread = new Task(() => this.CancelOrder(order));
                                CancelOrderThread.Start();
                                ticketOrderQty = 0;
                            }
                            break;
                        }
                    }
                    else
                    {
                        logger.Error(string.Format("never remainQty < 0 : {0}", message.ORDER_IDENTIFICATION));
                    }
                }
            }

            if (ticketOrderQty > 0)
            {
                Task NewOrderThread = new Task(() => this.NewOrder(message, ticketOrderQty), TaskCreationOptions.PreferFairness);
                NewOrderThread.Start();
            }
        }