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(); }
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))); }
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))); }
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); }
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); } }
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(); }