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