Esempio n. 1
0
        /// <summary>
        /// 保存数据
        /// </summary>
        /// <param name="dataname"></param>
        /// <param name="tu"></param>
        public void Save(String dataname, TimeUnit tu)
        {
            if (dataname == null || dataname == "")
            {
                return;
            }
            //内存中是否已经存在
            if (!timeSerials.ContainsKey(tu))
            {
                timeSerials.Add(tu, new ConcurrentDictionary <string, object>());
            }
            ConcurrentDictionary <string, object> d = timeSerials[tu];

            if (!d.ContainsKey(dataname))
            {
                return;
            }
            IndicatorMeta meta = metas[dataname];

            if (meta == null)
            {
                throw new Exception("缺少" + dataname + "的元数据");
            }
            ((TimeSeries <ITimeSeriesItem>)d[dataname]).Save(this.GetFullFileName(meta, tu));
        }
Esempio n. 2
0
 /// <summary>
 /// 全文件名
 /// </summary>
 /// <param name="meta"></param>
 /// <param name="timeunit"></param>
 /// <returns></returns>
 private String GetFullFileName(IndicatorMeta meta, TimeUnit timeunit)
 {
     if (!datapath.EndsWith("\\"))
     {
         datapath += "\\";
     }
     return(datapath + meta.Path + "\\" + getFileName(meta.NameInfo.Name, timeunit));
 }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <param name="tu"></param>
        /// <returns></returns>
        public ITimeSeries this[String name, TimeUnit tu]
        {
            get
            {
                IndicatorMeta meta = metas[name];
                if (meta == null)
                {
                    return(null);
                }

                return((ITimeSeries)this.GetType().GetMethod("CreateOrLoad").MakeGenericMethod(new Type[] { meta.IndicatorType }).Invoke(this, new Object[] { name, tu }));
            }
            set
            {
                this.Put(value, name);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 注册
        /// </summary>
        /// <param name="meta"></param>
        public void Registe(IndicatorMeta meta)
        {
            if (meta == null)
            {
                return;
            }

            int index = elements.IndexOf(elements.FirstOrDefault(x => x.NameInfo.HasName(meta.NameInfo.Name)));

            if (index < 0)
            {
                elements.Add(meta);
            }
            else
            {
                elements[index] = meta;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 记录数据
        /// </summary>
        /// <param name="ts"></param>
        /// <param name="name"></param>
        public void Put(ITimeSeries ts, String name)
        {
            TimeUnit tu = ts.TimeUnit;

            if (!this.timeSerials.ContainsKey(tu))
            {
                this.timeSerials.Add(tu, new ConcurrentDictionary <string, object>());
            }
            ConcurrentDictionary <string, object> d = this.timeSerials[tu];

            d[name] = ts;

            IndicatorMeta meta = metas[name];

            if (meta == null)
            {
                throw new Exception("缺少" + name + "的元数据");
            }
            String filename = this.GetFullFileName(meta, tu);

            ts.Save(filename);
        }
Esempio n. 6
0
 /// <summary>
 /// 注册元信息
 /// </summary>
 /// <param name="meta"></param>
 public void RegisteMeta(IndicatorMeta meta)
 {
     this.metas.Registe(meta);
 }
Esempio n. 7
0
        /// <summary>
        /// 创建时序数据
        /// </summary>
        /// <param name="name"></param>
        /// <param name="timeunit"></param>
        /// <param name="forced">true表示如果数据已经有,会删除重建</param>
        /// <returns></returns>
        public ITimeSeries Create(String name, TimeUnit timeunit, bool forced = true)
        {
            //内存中是否已经存在
            if (!timeSerials.ContainsKey(timeunit))
            {
                timeSerials.Add(timeunit, new ConcurrentDictionary <string, object>());
            }
            ConcurrentDictionary <string, object> d = timeSerials[timeunit];

            if (d.ContainsKey(name) && ((IList)d[name]).Count > 0 && !forced)
            {
                return((ITimeSeries)d[name]);
            }
            //查找元信息
            if (name == null || name == "")
            {
                return(null);
            }
            IndicatorMeta meta = metas[name];

            if (meta == null)
            {
                throw new Exception("缺少" + name + "的元数据");
            }

            //文件中是否存在,存在则读取
            ITimeSeries result       = null;
            String      fullFilename = GetFullFileName(meta, timeunit);

            if (File.Exists(fullFilename) && !forced)
            {
                result = (ITimeSeries)meta.IndicatorType.GetConstructor(new Type[] { typeof(String), typeof(TimeUnit) }).Invoke(new Object[] { code, timeunit });
                result.Load(fullFilename);
                d[name] = result;
                return(result);
            }


            //文件中不存在,尝试用小周期创建大周期
            TimeUnit baseTU = timeunit >= TimeUnit.day ? TimeUnit.day : TimeUnit.minute;

            if (baseTU != timeunit)
            {
                ITimeSeries baseTS = Create(name, baseTU, false);//取得小周期
                if (baseTS != null)
                {
                    result = baseTS.Zoomout(timeunit);
                    if (result != null)
                    {
                        d[name] = result;
                        result.Save(this.GetFullFileName(meta, timeunit));
                        return(result);
                    }
                }
            }

            //尝试使用产生器产生
            if (meta.Geneartor == null)
            {
                return(null);
            }

            Properties props = new Properties();

            props.Put("TimeSerialsDataSet", this);
            props.Put("timeunit", timeunit);
            props.Put("name", name);
            props.Put("code", code);
            result = (ITimeSeries)meta.Geneartor(props);
            if (result != null)
            {
                this.Put(result, name);
            }
            return(result);
        }