public static void OntfcomRcvMessage(object sender, PackageBase package) { StringBuilder sbtmp = new StringBuilder(); switch ((DT)package.DT) { case DT.LOGIN: P001503 p1503 = (P001503)package; if (p1503.Code != 0) { AddInfo("登入失敗 CODE = " + p1503.Code + " " + tfcom.GetMessageMap(p1503.Code)); } else { if (p1503.p001503_2.Length > 0) { brokerid = p1503.p001503_2[0].BrokeId; account = p1503.p001503_2[0].Account; } AddInfo("登入成功 "); } break; case DT.SECU_ALLOWANCE_RPT: //子帳額度控管: 回補 PT05002 p5002 = (PT05002)package; AddInfo(p5002.ToLog()); break; case DT.SECU_ALLOWANCE: PT05003 p5003 = (PT05003)package; AddInfo(p5003.ToLog()); break; #region 證券下單回報 case DT.SECU_ORDER_ACK: //下單第二回覆 PT04002 p4002 = (PT04002)package; AddInfo(p4002.ToLog() + "訊息:" + tfcom.GetMessageMap(p4002.ErrorCode)); break; case DT.SECU_ORDER_RPT: //委託回報 PT04010 p4010 = (PT04010)package; AddInfo("RCV 4010 [" + p4010.CNT + "," + p4010.OrderNo + "]"); // "委託型態", "分公司代號", "帳號", "綜合帳戶", "營業員代碼", "委託書號", "交易日期", "回報時間", "委託日期時間", "商品代號", "下單序號", "委託來源別", "市場別", "買賣", "委託別", "委託種類", "委託價格", "改量前數量", "改量後數量", "錯誤代碼", "錯誤訊息" string[] row4010 = { p4010.OrderFunc.ToString(), p4010.BrokerId, p4010.Account, p4010.SubAccount, p4010.OmniAccount, p4010.AgentId, p4010.OrderNo, p4010.TradeDate, p4010.ReportTime, p4010.ClientOrderTime, p4010.StockID, p4010.CNT, p4010.Channel.ToString(), p4010.Market.ToString(), p4010.Side.ToString(), p4010.OrdLot.ToString(), p4010.OrdClass.ToString(), p4010.Price, p4010.BeforeQty, p4010.AfterQty, p4010.ErrCode, p4010.ErrMsg }; AddInfo(string.Join(",", row4010)); break; case DT.SECU_DEAL_RPT: //成交回報 PT04011 p4011 = (PT04011)package; AddInfo("RCV 4011 [" + p4011.CNT + "]"); // "委託型態", "分公司代號", "帳號", "綜合帳戶", "營業員代碼", "委託書號", "交易日期", "回報時間", "電子單號", "來源別", "市場別", "商品代碼", "買賣別", "委託別", ",委託種類", "成交價格", "成交數量", "市場成交序號" string[] row4011 = { p4011.OrderFunc.ToString(), p4011.BrokerId, p4011.Account, p4011.SubAccount, p4011.OmniAccount, p4011.AgentId, p4011.OrderNo, p4011.TradeDate, p4011.ReportTime, p4011.CNT, p4011.Channel.ToString(), p4011.Market.ToString(), p4011.StockID, p4011.Side.ToString(), p4011.OrdLot.ToString(), p4011.OrdClass.ToString(), p4011.Price, p4011.DealQty, p4011.MarketNo }; AddInfo(string.Join(",", row4011)); break; #endregion } }
private void OnTradeRcvMessage(object sender, PackageBase package) { if (this.InvokeRequired) { Smart.OnRcvMessage_EventHandler d = new Smart.OnRcvMessage_EventHandler(OnTradeRcvMessage); this.Invoke(d, new object[] { sender, package }); return; } StringBuilder sbtmp = new StringBuilder(); switch ((DT)package.DT) { case DT.LOGIN: // Bona登入 P001503 p1503 = (P001503)package; if (p1503.Code != 0) { AddInfo("登入失敗 CODE = " + p1503.Code + " " + tfcom.GetMessageMap(p1503.Code)); } else { AddInfo("登入成功 "); AddInfo("Yo:" + p1503.p001503_2[0].BrokeId + ":" + p1503.p001503_2[0].Account); } break; case DT.SECU_ALLOWANCE_RPT: //子帳額度控管: 回補 PT05002 p5002 = (PT05002)package; AddInfo(p5002.ToLog()); break; case DT.SECU_ALLOWANCE: PT05003 p5003 = (PT05003)package; AddInfo(p5003.ToLog()); break; #region 證券下單回報 case DT.SECU_ORDER_ACK: //下單第二回覆 // if (!cbShowUI.Checked) break; PT04002 p4002 = (PT04002)package; AddInfo(p4002.ToLog() + "訊息:" + tfcom.GetMessageMap(p4002.ErrorCode)); break; case DT.SECU_ORDER_RPT: // Bona委託回報 // if (!cbShowUI.Checked) break; PT04010 p4010 = (PT04010)package; AddInfo("RCV 4010 [" + p4010.CNT + "," + p4010.OrderNo + "]"); // "委託型態", "分公司代號", "帳號", "綜合帳戶", "營業員代碼", "委託書號", "交易日期", "回報時間", "委託日期時間", "商品代號", "下單序號", "委託來源別", "市場別", "買賣", "委託別", "委託種類", "委託價格", "改量前數量", "改量後數量", "錯誤代碼", "錯誤訊息" string[] row4010 = { p4010.OrderFunc.ToString(), p4010.BrokerId, p4010.Account, p4010.SubAccount, p4010.OmniAccount, p4010.AgentId, p4010.OrderNo, p4010.TradeDate, p4010.ReportTime, p4010.ClientOrderTime, p4010.StockID, p4010.CNT, p4010.Channel.ToString(), p4010.Market.ToString(), p4010.Side.ToString(), p4010.OrdLot.ToString(), p4010.OrdClass.ToString(), p4010.Price, p4010.BeforeQty, p4010.AfterQty, p4010.ErrCode, p4010.ErrMsg }; // dgv4010.Rows.Add(row4010); break; case DT.SECU_DEAL_RPT: //成交回報 // if (!cbShowUI.Checked) break; PT04011 p4011 = (PT04011)package; AddInfo("RCV 4011 [" + p4011.CNT + "]"); // "委託型態", "分公司代號", "帳號", "綜合帳戶", "營業員代碼", "委託書號", "交易日期", "回報時間", "電子單號", "來源別", "市場別", "商品代碼", "買賣別", "委託別", ",委託種類", "成交價格", "成交數量", "市場成交序號" string[] row4011 = { p4011.OrderFunc.ToString(), p4011.BrokerId, p4011.Account, p4011.SubAccount, p4011.OmniAccount, p4011.AgentId, p4011.OrderNo, p4011.TradeDate, p4011.ReportTime, p4011.CNT, p4011.Channel.ToString(), p4011.Market.ToString(), p4011.StockID, p4011.Side.ToString(), p4011.OrdLot.ToString(), p4011.OrdClass.ToString(), p4011.Price, p4011.DealQty, p4011.MarketNo }; // dgv4011.Rows.Add(row4011); break; #endregion #region 證券複委託回報 <2015.11 Add > case DT.SECU_SUBORDER_ACK: //下單第二回覆 // if (!cbShowUI.Checked) break; PT04102 p4102 = (PT04102)package; sbtmp.Append("[RCV 4102]").Append(" RequestId=").Append("" + p4102.RequestId) .Append(";CNT=").Append(p4102.CNT) .Append(";WEBID=").Append(p4102.WEBID) .Append(";Code=").Append("" + p4102.Code) //.Append(";CustomerID=").Append(p4102.CustomerID) .Append(";SeqNum=").Append(p4102.SeqNum) .Append(";OrdgSeqNum=").Append(p4102.OrdgSeqNum) .Append(";OrderNo=").Append(p4102.OrderNo) .Append(";ErrCode=").Append(p4102.ErrCode) .Append(";ErrMsg=").Append(p4102.ErrMsg); //AddInfo("RCV 4102 [" + p4102.RequestId + "," + p4102.WEBID + "," + "]"); AddInfo(sbtmp.ToString()); break; case DT.SECU_SUBORDER_RPT: //委託回報 // if (!cbShowUI.Checked) break; PT04110 p4110 = (PT04110)package; AddInfo("RCV 4110 [ SeqNo=" + p4110.SeqNo + " OrderNO=" + p4110.OrderNo + " OrgSeqNo=" + p4110.OrgSeqNo + "]"); //"委託型態", "客戶帳號", "客戶姓名", "委託書號", "交易日期", "市場別", "商品代號", "商品名稱", "買賣別", "幣別", "價格", "數量", "成交/改單數量", "成交狀態", "成交數量", "委託狀態", " 委託序號", "原始委託序號", "接單方式", "錯誤代碼", "錯誤訊息", "下單IP", "下單管道", "通路別", "建立日期" string[] row4110 = { p4110.OrderFunc, p4110.CustomerId, p4110.CustomerName, p4110.OrderNo, p4110.TradeDate, p4110.Market, p4110.Symbol, p4110.SymbolName, p4110.BS.ToString(), p4110.Currency, p4110.Price, p4110.Qty, p4110.Qty2, p4110.ExeStatus, p4110.ExeQty, p4110.Status, p4110.SeqNo, p4110.OrgSeqNo, p4110.OrderMethod, p4110.ErrorCode, p4110.ErrorMsg, p4110.IP, p4110.SystemID, p4110.Channel, p4110.CreateDate }; // dgv4110.Rows.Add(row4110); break; case DT.SECU_SUBDEAL_RPT: //成交回報 // if (!cbShowUI.Checked) break; PT04111 p4111 = (PT04111)package; AddInfo("RCV 4111 [" + p4111.OrderNo + "]"); // "客戶帳號", "客戶姓名", "交易日期", "市場別", "商品代碼", "商品名稱", "委託價格", "委託數量", "成交價格", "成交數量", "委託書號", "成交序號", "下單管道", "通路別" string[] row4111 = { p4111.CustomerId, p4111.CustomerName, p4111.TradeDate, p4111.Market, p4111.Symbol, p4111.SymbolName, p4111.Price, p4111.Qty, p4111.MatchPrice, p4111.MatchQty, p4111.OrderNo, p4111.MatchNo, p4111.SystemID, p4111.Channel }; // dgv4111.Rows.Add(row4111); break; #endregion #region 複委託帳務查詢 case DT.FINANCIAL_RCORDER: //4113. 複委託委託查詢 PT04113 p4113 = (PT04113)package; AddInfo("RCV 4113 [" + p4113.Code + "][" + p4113.CodeDesc + "][ 筆數:" + p4113.Rows + "]"); if (p4113.Code == 0) { // dgvRCQuery.DataSource = p4113.Detail; // SetGridHeader(4113); } break; case DT.FINANCIAL_RCMATCHSUM: //4115. 複委託成交彙總查詢 PT04115 p4115 = (PT04115)package; AddInfo("RCV 4115 [" + p4115.Code + "][" + p4115.CodeDesc + "][ 筆數:" + p4115.Rows + "]"); if (p4115.Code == 0) { // dgvRCQuery.DataSource = p4115.Detail; // SetGridHeader(4115); } break; case DT.FINANCIAL_RCMATCHDETAIL: //4117. 複委託成交明細查詢 PT04117 p4117 = (PT04117)package; AddInfo("RCV 4117 [" + p4117.Code + "][" + p4117.CodeDesc + "][ 筆數:" + p4117.Rows + "]"); if (p4117.Code == 0) { // dgvRCQuery.DataSource = p4117.Detail; // SetGridHeader(4117); } break; case DT.FINANCIAL_RCPOSITIONSUM: //4119. 複委託整戶部位明細查詢 PT04119 p4119 = (PT04119)package; AddInfo("RCV 4119 [" + p4119.Code + "][" + p4119.CodeDesc + "][ 筆數:" + p4119.Rows + "]"); if (p4119.Code == 0) { // dgvRCQuery.DataSource = p4119.Detail; // SetGridHeader(4119); } break; case DT.FINANCIAL_RCCURRENCY: //4121. 複委託單一幣別帳務查詢 PT04121 p4121 = (PT04121)package; AddInfo("RCV 4121 [" + p4121.Code + "][" + p4121.CodeDesc + "][ 筆數:" + p4121.Rows + "]"); if (p4121.Code == 0) { // dgvRCQuery.DataSource = p4121.Detail; // SetGridHeader(4121); } break; case DT.FINANCIAL_RCSTOCKPOSITION: //4123. 複委託股票庫存部位查詢 ; PT04123 p4123 = (PT04123)package; AddInfo("RCV 4123 [" + p4123.Code + "][" + p4123.CodeDesc + "][ 筆數:" + p4123.Rows + "]"); if (p4123.Code == 0) { // dgvRCQuery.DataSource = p4123.Detail; // SetGridHeader(4123); } break; case DT.FINANCIAL_RCDELIVERY: //4125. 複委託交割金額試算 ; 交割:Delivery ; PT04125 p4125 = (PT04125)package; AddInfo("RCV 4125 [" + p4125.Code + "][" + p4125.CodeDesc + "][ 筆數:" + p4125.Rows + "]"); if (p4125.Code == 0) { // dgvRCQuery.DataSource = p4125.Detail; // SetGridHeader(4125); } break; #endregion #region 帳務中台WebSerivce 查詢 case DT.FINANCIAL_WSSETAMTTRIAL: //當日交割金額試算查詢 PT04302 p4302 = (PT04302)package; AddInfo("RCV 4302 [" + p4302.Code + "][" + p4302.CodeDesc + "][ 筆數:" + p4302.Rows1 + " , " + p4302.Rows2 + "]"); // lbResult.Text = "4302[ " + p4302.Rows1 + "]筆"; // lbResult1.Text = "4302_2[ " + p4302.Rows2 + "]筆"; if (p4302.Code == 0) { // dgvWSDetail1.DataSource = p4302.Detail1; // dgvWSDetail2.DataSource = p4302.Detail2; // SetWSGridHeader(4302); } break; case DT.FINANCIAL_WSSETAMTDETAIL: //當日交割金額_沖銷明細(非當沖)查詢 PT04304 p4304 = (PT04304)package; AddInfo("RCV 4304 [" + p4304.Code + "][" + p4304.CodeDesc + "][ 筆數:" + p4304.Rows + "]"); // lbResult.Text = "4304[ " + p4304.Rows + "]筆"; if (p4304.Code == 0) { // dgvWSDetail1.DataSource = p4304.Detail; // SetWSGridHeader(4304); } break; case DT.FINANCIAL_WSSETTLEAMT: //交割金額查詢(3日)查詢 PT04306 p4306 = (PT04306)package; AddInfo("RCV 4306 [" + p4306.Code + "][" + p4306.CodeDesc + "][ 筆數:" + p4306.Rows + "]"); // lbResult.Text = "4304[ " + p4306.Rows + "]筆"; if (p4306.Code == 0) { // dgvWSDetail1.DataSource = p4306.Detail; // SetWSGridHeader(4306); } break; case DT.FINANCIAL_WSINVENTORY: //庫存損益及即時維持率試算查詢 PT04308 p4308 = (PT04308)package; AddInfo("RCV 4308 [" + p4308.Code + "][" + p4308.CodeDesc + "][ 筆數:" + p4308.Rows + "]"); // lbResult.Text = "4308[ " + p4308.Rows + "]筆"; if (p4308.Code == 0) { // dgvWSDetail1.DataSource = p4308.Detail; // SetWSGridHeader(4308); } break; case DT.FINANCIAL_WSINVENTORYSUM: //證券庫存彙總查詢 PT04310 p4310 = (PT04310)package; AddInfo("RCV 4310 [" + p4310.Code + "][" + p4310.CodeDesc + "][ 筆數:" + p4310.Rows + "]"); // lbResult.Text = "4310[ " + p4310.Rows + "]筆"; if (p4310.Code == 0) { // dgvWSDetail1.DataSource = p4310.Detail; // SetWSGridHeader(4310); } break; case DT.FINANCIAL_WSBALANCESTATEMENT: //證券對帳單查詢 PT04312 p4312 = (PT04312)package; AddInfo("RCV 4312 [" + p4312.Code + "][" + p4312.CodeDesc + "][ 筆數:" + p4312.Rows + "]"); // lbResult.Text = "4312[ " + p4312.Rows + "]筆"; if (p4312.Code == 0) { // dgvWSDetail1.DataSource = p4312.Detail; // SetWSGridHeader(4312); } break; #endregion case DT.SECU_EARMARK_SET: //圈存 ; //string[] header4031 = { "Requestid", "webid", "1.圈/D.解圈", "分公司代號", "帳號", "證券代號", "申請張數", "回覆張數", "申請日期" ,"申請時間","回覆時間","序號","代碼","訊息"}; P004031 p4031 = (P004031)package; //MessageBox.Show("EarMark Set:" + p4031.ErrCode); string[] row4031 = { p4031.RequestId.ToString(), p4031.Webid, p4031.TCode.ToString(), p4031.BrokerId, p4031.Account, p4031.StockNO, p4031.ApplyQTY, p4031.ReplyQTY, p4031.ApplyDate, p4031.ApplyTime, p4031.ReplyTime, p4031.Seqno, p4031.ErrCode, p4031.ErrMsg }; // dgv4031.Rows.Add(row4031); break; } }
private void OnQuoteRcvMessage(object sender, PackageBase package) { if (package.TOPIC != null) { if (RecoverMap.ContainsKey(package.TOPIC)) { RecoverMap[package.TOPIC]++; } } StringBuilder sb; switch (package.DT) { case (ushort)DT.LOGIN: P001503 _p001503 = (P001503)package; if (_p001503.Code == 0) { AddInfo("可註冊檔數:" + _p001503.Qnum); if (quoteCom.QuoteFuture) { AddInfo("可註冊期貨報價"); } if (quoteCom.QuoteStock) { AddInfo("可註冊證券報價"); } } break; case (ushort)DT.QUOTE_STOCK_MATCH1: //上市成交 case (ushort)DT.QUOTE_STOCK_MATCH2: //上櫃成交 PI31001 pi31001 = (PI31001)package; if (!cbShow.Checked) { break; } sb = new StringBuilder(Environment.NewLine); sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_MATCH1) ? "上市 " : "上櫃 "); if (pi31001.Status == 0) { sb.Append("<試撮>"); } sb.Append("商品代號: ").Append(pi31001.StockNo).Append(" 更新時間: ").Append(pi31001.Match_Time).Append(Environment.NewLine); sb.Append(" 成交價: ").Append(pi31001.Match_Price).Append(" 單量: ").Append(pi31001.Match_Qty); sb.Append(" 總量: ").Append(pi31001.Total_Qty).Append(" 來源: ").Append(pi31001.Source).Append(Environment.NewLine); sb.Append("========================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_DEPTH1: //上市五檔 case (ushort)DT.QUOTE_STOCK_DEPTH2: //上櫃五檔 PI31002 i31002 = (PI31002)package; if (!cbShow.Checked) { break; } sb = new StringBuilder(Environment.NewLine); sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_DEPTH1) ? "上市 " : "上櫃 "); if (i31002.Status == 0) { sb.Append("<試撮> "); } sb.Append("商品代號: ").Append(i31002.StockNo).Append(" 更新時間: ").Append(i31002.Match_Time).Append(" 來源: ").Append(i31002.Source).Append(Environment.NewLine); for (int i = 0; i < 5; i++) { sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, i31002.BUY_DEPTH[i].PRICE, i31002.BUY_DEPTH[i].QUANTITY, i31002.SELL_DEPTH[i].PRICE, i31002.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); } sb.Append("========================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_PRICE_STOCK: PI30026 pi30026 = (PI30026)package; #region Comfup Add UpdateStockComfup(pi30026); #endregion sb = new StringBuilder(Environment.NewLine); sb.Append("商品代號:").Append(pi30026.StockNo).Append(" 最後價格:").Append(pi30026.LastMatchPrice).Append(Environment.NewLine); sb.Append("當日最高成交價格:").Append(pi30026.DayHighPrice).Append(" 當日最低成交價格:").Append(pi30026.DayLowPrice); sb.Append("開盤價:").Append(pi30026.FirstMatchPrice).Append(" 開盤量:").Append(pi30026.FirstMatchQty).Append(Environment.NewLine); sb.Append("參考價:").Append(pi30026.ReferencePrice).Append(Environment.NewLine); sb.Append("成交單量:").Append(pi30026.LastMatchQty).Append(Environment.NewLine); sb.Append("成交總量:").Append(pi30026.TotalMatchQty).Append(Environment.NewLine); for (int i = 0; i < 5; i++) { sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, pi30026.BUY_DEPTH[i].PRICE, pi30026.BUY_DEPTH[i].QUANTITY, pi30026.SELL_DEPTH[i].PRICE, pi30026.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_INDEX1: //上市指數 PI31011 pi31011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上市指數]更新時間:").Append(pi31011.Match_Time).Append(" 筆數: ").Append(pi31011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31011.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(pi31011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_INDEX2: //上櫃指數 PI31011 pi32011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上櫃指數]更新時間:").Append(pi32011.Match_Time).Append(" 筆數: ").Append(pi32011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32011.COUNT; i++) { sb.Append(" [" + (i + 1) + "]").Append(pi32011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX1: //上市新編指數 PI31021 pi31021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上市新編指數[").Append(pi31021.IndexNo).Append("] 時間:").Append(pi31021.IndexTime); sb.Append("指數: ").Append(pi31021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX2: //上櫃新編指數 PI31021 pi32021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上櫃新編指數[").Append(pi32021.IndexNo).Append("] 時間:").Append(pi32021.IndexTime); sb.Append("最新指數: ").Append(pi32021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX1: //上市最新指數查詢 PI31026 pi31026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上市指數 筆數: ").Append(pi31026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi31026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi31026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi31026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi31026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi31026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX2: //上櫃最新指數查詢 PI31026 pi32026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上櫃指數 筆數: ").Append(pi32026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi32026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi32026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi32026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi32026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi32026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_AVGINDEX: //加權平均指數 2014.8.6 ADD ; PI31022 pi31022 = (PI31022)package; sb = new StringBuilder(Environment.NewLine); sb.Append("加權平均指數[").Append(pi31022.IndexNo).Append("] 時間:").Append(pi31022.IndexTime); sb.Append("最新指數: ").Append(pi31022.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; } }
private void OnQuoteRcvMessage(object sender, PackageBase package) { if (package.TOPIC != null) { if (RecoverMap.ContainsKey(package.TOPIC)) { RecoverMap[package.TOPIC]++; } } StringBuilder sb; switch (package.DT) { case (ushort)DT.LOGIN: P001503 _p001503 = (P001503)package; if (_p001503.Code == 0) { Console.WriteLine("可註冊檔數:" + _p001503.Qnum); } break; #region 公告 2014.12.12 ADD case (ushort)DT.NOTICE_RPT: P001701 p1701 = (P001701)package; Console.WriteLine(p1701.ToLog()); break; //公告(被動查詢) case (ushort)DT.NOTICE: //公告(主動) P001702 p1702 = (P001702)package; Console.WriteLine(p1702.ToLog()); break; #endregion case (ushort)DT.QUOTE_I080: case (ushort)DT.QUOTE_I082: //case (ushort)DT.QUOTE_I082: //2014.4.2 ADD 盤前揭示 PI20080 i20080 = (PI20080)package; Console.WriteLine(i20080.BUY_DEPTH[0].PRICE); Console.WriteLine(i20080.SELL_DEPTH[0].PRICE); //int i = 0; //Console.WriteLine(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, i20080.BUY_DEPTH[i].PRICE, i20080.BUY_DEPTH[i].QUANTITY, i20080.SELL_DEPTH[i].PRICE, i20080.SELL_DEPTH[i].QUANTITY)); //sb = new StringBuilder(Environment.NewLine); //sb.Append("DT:[" + i20080.DT + "]"); //sb.Append("商品代號:").Append(i20080.Symbol).Append(Environment.NewLine); //for (int i = 0; i < 5; i++) // sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, i20080.BUY_DEPTH[i].PRICE, i20080.BUY_DEPTH[i].QUANTITY, i20080.SELL_DEPTH[i].PRICE, i20080.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); //sb.AppendLine("衍生委託第一檔買進價格:" + i20080.FIRST_DERIVED_BUY_PRICE); //sb.AppendLine("衍生委託第一檔買進數量:" + i20080.FIRST_DERIVED_BUY_QTY); //sb.AppendLine("衍生委託第一檔賣出價格:" + i20080.FIRST_DERIVED_SELL_PRICE); //sb.AppendLine("衍生委託第一檔賣出數量" + i20080.FIRST_DERIVED_SELL_QTY); //sb.AppendLine("資料時間" + i20080.DATA_TIME); //sb.AppendLine("小數位位:" + i20080.PriceDecimal); //sb.Append("=============================="); ////Console.WriteLine(sb.ToString()); //if (i20080.DT == 20080) Console.WriteLine(sb.ToString()); //else Console.WriteLine(i20080.ToLog()); //Console.WriteLine(sb.ToString()); break; } }
private void OnQuoteRcvMessage(object sender, PackageBase package) { if (package.TOPIC != null) { if (RecoverMap.ContainsKey(package.TOPIC)) { RecoverMap[package.TOPIC]++; } } StringBuilder sb; switch (package.DT) { case (ushort)DT.LOGIN: P001503 _p001503 = (P001503)package; if (_p001503.Code == 0) { AddInfo("可註冊檔數:" + _p001503.Qnum); if (quoteCom.QuoteFuture) { AddInfo("可註冊期貨報價"); } if (quoteCom.QuoteStock) { AddInfo("可註冊證券報價"); } } break; case (ushort)DT.QUOTE_STOCK_MATCH1: //上市成交 case (ushort)DT.QUOTE_STOCK_MATCH2: //上櫃成交 PI31001 pi31001 = (PI31001)package; //if (!cbShow.Checked) break; //sb = new StringBuilder(Environment.NewLine); //sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_MATCH1) ? "上市 " : "上櫃 "); //if (pi31001.Status == 0) sb.Append("<試撮>"); //sb.Append("商品代號: ").Append(pi31001.StockNo).Append(" 更新時間: ").Append(pi31001.Match_Time).Append(Environment.NewLine); //sb.Append(" 成交價: ").Append(pi31001.Match_Price).Append(" 單量: ").Append(pi31001.Match_Qty); //sb.Append(" 總量: ").Append(pi31001.Total_Qty).Append(" 來源: ").Append(pi31001.Source).Append(Environment.NewLine); //sb.Append("========================================="); //AddInfo(sb.ToString()); if (pi31001.Status == 0) { var newLine = string.Format("{0},{1},{2},{3},{4},{5}", pi31001.StockNo, pi31001.Match_Time, pi31001.Match_Price, pi31001.Match_Qty, pi31001.Total_Qty, "<試撮>"); AddInfo(newLine); } else { var newLine = string.Format("{0},{1},{2},{3},{4}", pi31001.StockNo, pi31001.Match_Time, pi31001.Match_Price, pi31001.Match_Qty, pi31001.Total_Qty); AddInfo(newLine); String filename = string.Format("{0}_{1}_{2}.csv", "MATCH", pi31001.StockNo, DateTime.Now.ToString("yyyyMMdd")); WriteToCSV(filename, newLine); } break; case (ushort)DT.QUOTE_STOCK_DEPTH1: //上市五檔 case (ushort)DT.QUOTE_STOCK_DEPTH2: //上櫃五檔 PI31002 pi31002 = (PI31002)package; //if (!cbShow.Checked) break; //sb = new StringBuilder(Environment.NewLine); //sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_DEPTH1) ? "上市 " : "上櫃 "); //if (i31002.Status == 0) sb.Append("<試撮> "); //sb.Append("商品代號: ").Append(i31002.StockNo).Append(" 更新時間: ").Append(i31002.Match_Time).Append(" 來源: ").Append(i31002.Source).Append(Environment.NewLine); //for (int i = 0; i < 5; i++) // sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, i31002.BUY_DEPTH[i].PRICE, i31002.BUY_DEPTH[i].QUANTITY, i31002.SELL_DEPTH[i].PRICE, i31002.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); //sb.Append("========================================="); //AddInfo(sb.ToString()); if (pi31002.Status == 0) { StringBuilder buy_price = new StringBuilder(); StringBuilder buy_qty = new StringBuilder(); StringBuilder sell_price = new StringBuilder(); StringBuilder sell_qty = new StringBuilder(); for (int i = 0; i < 5; i++) { buy_price.Append(pi31002.BUY_DEPTH[i].PRICE).Append("_"); buy_qty.Append(pi31002.BUY_DEPTH[i].QUANTITY).Append("_"); sell_price.Append(pi31002.SELL_DEPTH[i].PRICE).Append("_"); sell_qty.Append(pi31002.SELL_DEPTH[i].QUANTITY).Append("_"); } var newLine = string.Format("{0},{1},{2},{3},{4},{5},{6}", pi31002.StockNo, pi31002.Match_Time, buy_price.ToString(), buy_qty.ToString(), sell_price.ToString(), sell_qty.ToString(), "<試撮>"); AddInfo(newLine); } else { StringBuilder buy_price = new StringBuilder(); StringBuilder buy_qty = new StringBuilder(); StringBuilder sell_price = new StringBuilder(); StringBuilder sell_qty = new StringBuilder(); for (int i = 0; i < 5; i++) { buy_price.Append(pi31002.BUY_DEPTH[i].PRICE).Append("_"); buy_qty.Append(pi31002.BUY_DEPTH[i].QUANTITY).Append("_"); sell_price.Append(pi31002.SELL_DEPTH[i].PRICE).Append("_"); sell_qty.Append(pi31002.SELL_DEPTH[i].QUANTITY).Append("_"); } var newLine = string.Format("{0},{1},{2},{3},{4},{5}", pi31002.StockNo, pi31002.Match_Time, buy_price.ToString(), buy_qty.ToString(), sell_price.ToString(), sell_qty.ToString()); AddInfo(newLine); String filename = string.Format("{0}_{1}_{2}.csv", "DEPTH", pi31002.StockNo, DateTime.Now.ToString("yyyyMMdd")); WriteToCSV(filename, newLine); } break; case (ushort)DT.QUOTE_LAST_PRICE_STOCK: PI30026 pi30026 = (PI30026)package; //sb = new StringBuilder(Environment.NewLine); //sb.Append("商品代號:").Append(pi30026.StockNo).Append(" 最後價格:").Append(pi30026.LastMatchPrice).Append(Environment.NewLine); //sb.Append("當日最高成交價格:").Append(pi30026.DayHighPrice).Append(" 當日最低成交價格:").Append(pi30026.DayLowPrice); //sb.Append("開盤價:").Append(pi30026.FirstMatchPrice).Append(" 開盤量:").Append(pi30026.FirstMatchQty).Append(Environment.NewLine); //sb.Append("參考價:").Append(pi30026.ReferencePrice).Append(Environment.NewLine); //sb.Append("成交單量:").Append(pi30026.LastMatchQty).Append(Environment.NewLine); //sb.Append("成交總量:").Append(pi30026.TotalMatchQty).Append(Environment.NewLine); //for (int i = 0; i < 5; i++) // sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, pi30026.BUY_DEPTH[i].PRICE, pi30026.BUY_DEPTH[i].QUANTITY, pi30026.SELL_DEPTH[i].PRICE, pi30026.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); //sb.Append("=============================================="); //AddInfo(sb.ToString()); var lastprice = string.Format("{0},{1},{2},{3},{4}", pi30026.StockNo, 0, pi30026.ReferencePrice, 0, 0); AddInfo(lastprice); String targetfile = string.Format("{0}_{1}_{2}.csv", "MATCH", pi30026.StockNo, DateTime.Now.ToString("yyyyMMdd")); WriteToCSV(targetfile, lastprice); break; case (ushort)DT.QUOTE_STOCK_INDEX1: //上市指數 PI31011 pi31011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上市指數]更新時間:").Append(pi31011.Match_Time).Append(" 筆數: ").Append(pi31011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31011.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(pi31011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_INDEX2: //上櫃指數 PI31011 pi32011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上櫃指數]更新時間:").Append(pi32011.Match_Time).Append(" 筆數: ").Append(pi32011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32011.COUNT; i++) { sb.Append(" [" + (i + 1) + "]").Append(pi32011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX1: //上市新編指數 PI31021 pi31021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上市新編指數[").Append(pi31021.IndexNo).Append("] 時間:").Append(pi31021.IndexTime); sb.Append("指數: ").Append(pi31021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX2: //上櫃新編指數 PI31021 pi32021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上櫃新編指數[").Append(pi32021.IndexNo).Append("] 時間:").Append(pi32021.IndexTime); sb.Append("最新指數: ").Append(pi32021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX1: //上市最新指數查詢 PI31026 pi31026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上市指數 筆數: ").Append(pi31026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi31026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi31026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi31026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi31026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi31026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX2: //上櫃最新指數查詢 PI31026 pi32026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上櫃指數 筆數: ").Append(pi32026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi32026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi32026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi32026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi32026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi32026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_AVGINDEX: //加權平均指數 2014.8.6 ADD ; PI31022 pi31022 = (PI31022)package; sb = new StringBuilder(Environment.NewLine); sb.Append("加權平均指數[").Append(pi31022.IndexNo).Append("] 時間:").Append(pi31022.IndexTime); sb.Append("最新指數: ").Append(pi31022.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; } }