public override MongoDataDictionary <XDXRData> GetAllCodeDateSerialDataList <XDXRData>(string endT, int Cnt, bool DateAsc) { MongoDataDictionary <XDXRData> ret = new MongoDataDictionary <XDXRData>(); MongoReturnDataList <XDXRData> list = (builder as DateSerialCodeDataBuilder).getData <XDXRData>(endT, Cnt, DateAsc); return(DataListConverter <XDXRData> .ToDirectionary(list, "code")); }
public override MongoDataDictionary <T> GetAllCodeDateSerialDataList <T>(string begT, string EndT, bool DateAsc = true) { MongoDataDictionary <T> ret = new MongoDataDictionary <T>(); MongoReturnDataList <T> list = (builder as DateSerialCodeDataBuilder).getData <T>(begT, EndT, DateAsc); return(DataListConverter <T> .ToDirectionary(list, "code")); }
public override ExpectList <T> ReadHistory <T>(string begt, string endt) { DateTime dt = DateTime.Parse(begt); MongoDataDictionary <ExchangeMongoData> res = GetAllCodeDateSerialDataList <ExchangeMongoData>(begt, endt, true); Dictionary <string, MongoReturnDataList <ExchangeMongoData> > data = res; ExpectList <ExchangeMongoData> ret = new ExpectList <ExchangeMongoData>(data, true); ExpectList <T> retlist = new ExpectList <T>(); ret.DataList.ForEach(a => { ExpectData <T> ed = new ExpectData <T>(); ed.CurrTime = null; ed.Key = "Security"; foreach (string code in a.Keys) { if (ed.CurrTime == null) { ed.CurrTime = a[code].date; } ed.Expect = MongoDateTime.StampToDate(a[code].date_stamp).Ticks.ToString(); ed.Add(code, a[code] as T); } retlist.Add(ed); }); return(retlist); }
static async Task <MongoDataDictionary <XDXRData> > Exec(XDXRReader reader) { //Func<XDXRReader,MongoDataDictionary<XDXRData>> action = delegate (XDXRReader rd) Func <MongoDataDictionary <XDXRData> > action = delegate() { MongoDataDictionary <XDXRData> list = reader.GetAllCodeDateSerialDataList <XDXRData>(true); LogableClass.ToLog("获取到除权除息数据", string.Format("股票数:{0};总条数:{1}", list.Count, list.Sum(p => p.Value.Count))); return(list); }; return(await Task.Run(action)); //return await Task.Run(action); }
public MongoDataDictionary <StockMongoData> FQ(MongoDataDictionary <StockMongoData> orgData, MongoDataDictionary <XDXRData> xdata, PriceAdj fqType = PriceAdj.Fore) { MongoDataDictionary <StockMongoData> ret = new MongoDataDictionary <StockMongoData>(); foreach (string key in orgData.Keys) { MongoReturnDataList <StockMongoData> val = orgData[key]; MongoReturnDataList <XDXRData> xval = xdata[key]; if (!ret.ContainsKey(key)) { ret.Add(key, Stock_FQ(key, val, xval, fqType)); } } return(ret); }
public void ExecMongoSr(object obj) { MongoDataDictionary <T> codes = obj as MongoDataDictionary <T>; MongoDataDictionary <T> res = ExecMongoFunc(codes); if (res != null) { GroupResult.Union(res); } else { } finished++; PoolCnt--; //(obj as SecurityReader); }
static void FillDic(ref MongoDataDictionary <XDXRData> ret, MongoDataDictionary <XDXRData> list) { lock (ret) { if (ret.Count == 0) { ret = list; } else { foreach (string key in list.Keys) { if (!ret.ContainsKey(key)) { ret.Add(key, list[key]); } } } } }
public MongoDataDictionary <T> GetResult(List <MongoDataDictionary <T> > codes, Func <MongoDataDictionary <T>, MongoDataDictionary <T> > func, int MaxThreadCnt = 20, int InterValMilSecs = 1000) { CheckEvent(codes.Count, codes.Count, 0, 0, 0); List <MongoDataDictionary <T> > mongoCodeList = codes; ExecMongoFunc = func; GroupResult = new MongoDataDictionary <T>(); ////for (int i=0;i< MaxThreadCnt; i++) ////{ //// new Task(ExecSr, codelist[i]).Start(); //// LastId = i; //// PoolCnt++; //// Thread.Sleep(InterValMilSecs); ////} LastId = 0; finished = 0; PoolCnt = 0; while (finished < codes.Count) { if (PoolCnt < MaxThreadCnt) { int CurrCnt = PoolCnt; for (int i = CurrCnt; i < MaxThreadCnt; i++) { if (LastId >= mongoCodeList.Count) { break; } new Task(ExecMongoSr, mongoCodeList[LastId]).Start(); LastId++; PoolCnt++; Thread.Sleep(InterValMilSecs); } CheckEvent(codes.Select(a => a.Values.Count).Sum(), codes.Count, finished, PoolCnt, GroupResult.Count); continue; } System.Threading.Thread.Sleep(InterValMilSecs); } return(GroupResult); }
public static MongoDataDictionary <XDXRData> getAllXDXRDataAsync(string DataType, List <string[]> codeGrp) { if (GlobalClass.TypeDataPoints[DataType].NeedLoadAllXDXR == 0) { return(null); } DateTime now = DateTime.Now; //MongoDataDictionary<XDXRData> ret = new MongoDataDictionary<XDXRData>(); ////DateSerialCodeDataBuilder dcdb = new DateSerialCodeDataBuilder("CN_Stock_A",GlobalClass.TypeDataPoints["CN_Stock_A"].XDXRTable,codes); SecurityGrpReader <XDXRData> sgr = new SecurityGrpReader <XDXRData>(); sgr.CheckEvent = (a, b, c, d, f) => { }; MongoDataDictionary <XDXRData> data = sgr.GetResult(codeGrp, (a) => { XDXRReader reader = new XDXRReader(GlobalClass.TypeDataPoints[DataType].DataType, GlobalClass.TypeDataPoints[DataType].XDXRTable, a); MongoDataDictionary <XDXRData> res = reader.GetAllCodeDateSerialDataList <XDXRData>(true); return(res); }, GlobalClass.TypeDataPoints[DataType].MaxThreadCnt, 1); return(data); }
private void btn_TestDayData_Click(object sender, EventArgs e) { //string code = "600519"; ////if(!dtp.RuntimeInfo.SecurityCodes.Contains(code)) ////{ //// MessageBox.Show(string.Format("证券{0}不存在!",code)); //// return; ////} int MaxThrdCnt = int.Parse(this.txt_maxThreadCnt.Text); int GrpUnitCnt = int.Parse(this.txt_GrpUnitCnt.Text); int ThrdInterVal = int.Parse(this.txt_ThrdInterval.Text); CommMarketClass cmc = new CommMarketClass(dtp); string strendT = this.txt_endT.Text; string strbegT = this.txt_begT.Text; if (useCodes == null) { useCodes = cmc.GetMarketsStocks("000001", strendT, 500, true, true, false); } string[] currCodes = new string[useCodes.Length]; try { Array.Copy(useCodes, 0, currCodes, 0, currCodes.Length); List <string[]> codeGrps = GroupBuilder.ToGroup <string>(currCodes, currCodes.Length / dtp.ThreadUnitCnt); begT = DateTime.Now; DisplayCnt(currCodes.Length, codeGrps.Count, 0, 0, 0); SecurityGrpReader <StockMongoData> sgr = new SecurityGrpReader <StockMongoData>(); sgr.CheckEvent = DisplayCnt; MongoDataDictionary <StockMongoData> data = sgr.GetResult(codeGrps, (a) => { SecurityReader sr = new SecurityReader(dtp.DataType, dtp.HistoryTable, a); MongoDataDictionary <StockMongoData> res = sr.GetAllCodeDateSerialDataList <StockMongoData>(strbegT, strendT); return(res); }, dtp.MaxThreadCnt, 1); DisplayCnt(currCodes.Length, codeGrps.Count, MaxThrdCnt, 0, data.Count); begT = DateTime.Now; List <MongoDataDictionary <StockMongoData> > datalist = GroupBuilder.ToGroup <StockMongoData>(data, currCodes.Length / dtp.ThreadUnitCnt); sgr.CheckEvent = DisplayCnt; data = sgr.GetResult(datalist, (a) => { return(new SecurityReader(dtp.DataType).FQ(a, dtp.RuntimeInfo.XDXRList)); }, dtp.MaxThreadCnt, 1); DisplayCnt(currCodes.Length, codeGrps.Count, MaxThrdCnt, 0, data.Count); //// reader.GetAllCodeDateSerialDataList<StockMongoData>("2015-07-15", "2019-03-27"); ////data = reader.Stock_FQ(data, dtp.RuntimeInfo.XDXRList); ////MongoReturnDataList<StockMongoData> fqdata = reader.Stock_FQ(code, data); ////////int n = 0; ////////StockMongoData testobj = null; ////////var test = fqdata.Where(a => (a.date == "2015-07-15")); ////////testobj = test.First(); ////////MessageBox.Show(string.Format("{0},{1}", testobj.date, testobj.close)); ////////n = fqdata.Count/2; ////////MessageBox.Show(string.Format("{0},{1}", fqdata[n].date, fqdata[n].close)); ////////n = fqdata.Count-1; ////////MessageBox.Show(string.Format("{0},{1}", fqdata[n].date, fqdata[n].close)); ////EMA ema1 = new EMA(fqdata.ToList(a => a.close).ToArray(),12); ////EMA ema2 = new EMA(fqdata.ToList(a => a.close).ToArray(), 26); ////Matrix e1 = ema1.GetResult(); ////Matrix e2 = ema2.GetResult(); ////int n = fqdata.Count - 1; ////MessageBox.Show(string.Format("12:{0:f2},26:{1:f2}",e1[n-1,0],e2[n-1,0])); ////MACD macd = new MACD(fqdata.ToList(a => a.close).ToArray()); ////Matrix ret = macd.GetResult(); ////int cnt = 10; ////for (int i = 0; i < cnt; i++) ////{ //// MessageBox.Show(string.Format("{0}:{4:f2}=>Diff:{1:f2};DEA:{2:f2};MACD:{3:f2}", fqdata[n - i].date, ret.Detail[n - i, 0], ret.Detail[n - i, 1], ret.Detail[n - i, 2],fqdata[n-i].close)); ////} } catch (Exception ce) { MessageBox.Show(ce.Message); } }