コード例 #1
0
        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"));
        }
コード例 #2
0
ファイル: SecurityReader.cs プロジェクト: samuelyi/PK10Tracer
        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"));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: SecurityReader.cs プロジェクト: samuelyi/PK10Tracer
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 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]);
                 }
             }
         }
     }
 }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: Form2.cs プロジェクト: samuelyi/PK10Tracer
        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);
            }
        }