/// <summary> /// 更新全局的行情数据 /// </summary> private void upDateMarketData(MarketInfo dataFrom, MyMarketInfo dateTo) { dateTo.code = dataFrom.code; dateTo.exchangeCode = dataFrom.exchangeCode; //最高价 if (!String.IsNullOrEmpty(dataFrom.high)) { dateTo.high = dataFrom.high; } //收盘价 if (!String.IsNullOrEmpty(dataFrom.close)) { //收盘价为空的时候,放最新价 dateTo.close = dataFrom.close; } //开盘价 if (!String.IsNullOrEmpty(dataFrom.open)) { dateTo.open = dataFrom.open; } //最低价 if (!String.IsNullOrEmpty(dataFrom.low)) { dateTo.low = dataFrom.low; } //成交量 if (!String.IsNullOrEmpty(dataFrom.filledNum) || dataFrom.filledNum != "0") { dateTo.filledNum = dataFrom.filledNum; } //持仓量 if (!String.IsNullOrEmpty(dataFrom.holdNum)) { dateTo.holdNum = dataFrom.holdNum; } //昨结算 if (!String.IsNullOrEmpty(dataFrom.oldClose) && !"0".Equals(dataFrom.oldClose)) { dateTo.oldClose = dataFrom.oldClose; } //现量 if (!String.IsNullOrEmpty(dataFrom.currNumber) || dataFrom.currNumber != "0") { dateTo.currNumber = dataFrom.currNumber; } //最新价 if (!String.IsNullOrEmpty(dataFrom.currPrice)) { dateTo.currPrice = dataFrom.currPrice; } //更新时间 if (!String.IsNullOrEmpty(dataFrom.time)) { dateTo.time = dataFrom.time; } //行情类型 if (!String.IsNullOrEmpty(dataFrom.type)) { dateTo.type = dataFrom.type; } if (DaFutures.Equals(this.marketType)) { if (!string.IsNullOrEmpty(dataFrom.buyPrice) && !string.IsNullOrEmpty(dataFrom.buyNumber)) { //买量1 dateTo.buyNumber = dataFrom.buyNumber; //买量2 dateTo.buyNumber2 = dataFrom.buyNumber2; //买量3 dateTo.buyNumber3 = dataFrom.buyNumber3; //买量4 dateTo.buyNumber4 = dataFrom.buyNumber4; //买量5 dateTo.buyNumber5 = dataFrom.buyNumber5; //买价1 dateTo.buyPrice = dataFrom.buyPrice; //买价2 dateTo.buyPrice2 = dataFrom.buyPrice2; //买价3 dateTo.buyPrice3 = dataFrom.buyPrice3; //买价4 dateTo.buyPrice4 = dataFrom.buyPrice4; //买价5 dateTo.buyPrice5 = dataFrom.buyPrice5; } //隐藏买量 dateTo.hideBuyNumber = dataFrom.hideBuyNumber; //隐藏买价 dateTo.hideBuyPrice = dataFrom.hideBuyPrice; if (!string.IsNullOrEmpty(dataFrom.salePrice) && !string.IsNullOrEmpty(dataFrom.saleNumber)) { //卖量1 dateTo.saleNumber = dataFrom.saleNumber; //卖量2 dateTo.saleNumber2 = dataFrom.saleNumber2; //卖量3 dateTo.saleNumber3 = dataFrom.saleNumber3; //卖量4 dateTo.saleNumber4 = dataFrom.saleNumber4; //卖量5 dateTo.saleNumber5 = dataFrom.saleNumber5; //卖价1 dateTo.salePrice = dataFrom.salePrice; //卖价2 dateTo.salePrice2 = dataFrom.salePrice2; //卖价3 dateTo.salePrice3 = dataFrom.salePrice3; //卖价4 dateTo.salePrice4 = dataFrom.salePrice4; //卖价5 dateTo.salePrice5 = dataFrom.salePrice5; } //隐藏卖量 dateTo.hideSaleNumber = dataFrom.hideSaleNumber; //隐藏卖价 dateTo.hideSalePrice = dataFrom.hideSalePrice; } }
/// <summary> /// 执行行情接受线程 /// </summary> public void ExecuteMarketThread() { string key = ""; string value = ""; MarketInfo marketInfo = null; MyMarketInfo mm = null; var ser = new ObjectSerializer(); HashOperator operators = new HashOperator(); while (isSave) { try { marketInfo = marketBlockingCollection.Take(); if (marketInfo.tradeFlag == "D" || marketInfo.tradeFlag == "X" || marketInfo.tradeFlag == "P") { //港股这种行情的成交价,成交量不要往列表里面刷 marketInfo.currPrice = ""; marketInfo.filledNum = ""; marketInfo.currNumber = ""; } //合并隐藏价格 //if (!string.IsNullOrEmpty(marketInfo.hideBuyPrice) || !string.IsNullOrEmpty(marketInfo.hideSalePrice)) //{ // if (!string.IsNullOrEmpty(marketInfo.hideBuyPrice)) // { // marketInfo.type = "B"; // } // if (!string.IsNullOrEmpty(marketInfo.hideSalePrice)) // { // marketInfo.type = "O"; // } // if (!string.IsNullOrEmpty(marketInfo.hideBuyPrice) && !string.IsNullOrEmpty(marketInfo.hideSalePrice)) // { // marketInfo.type = "Z"; // } // marketInfo.mergeHidePrice(""); //} //value = Encoding.UTF8.GetString(ser.Serialize(marketInfo)); //operators.Set<byte[]>("test", "key1", ser.Serialize(marketInfo)); if (DaFutures.Equals(this.marketType)) { //直达期货 key = "00," + marketInfo.code; } else if (DaStock.Equals(this.marketType)) { //直达股票 key = "10," + marketInfo.code; //Console.WriteLine(marketInfo.exchangeCode); if ("US".Equals(marketInfo.exchangeCode)) { marketInfo.exchangeCode = "NASD"; } } value = Redis.GetValueFromHash(LastPrice, key); mm = new MyMarketInfo(); if (!string.IsNullOrEmpty(value)) { mm = (MyMarketInfo)JsonToObject(value, mm); } upDateMarketData(marketInfo, mm); value = ObjectToJson(mm); Redis.SetEntryInHash(LastPrice, key, value); } catch (Exception ex) { marketErrorLoger.log(LogLevel.SYSTEMERROR, ex.ToString()); } } }