Example #1
0
        /// <summary>
        /// 初始化计划,将数据类型和运算类型相同的计划分组
        /// </summary>
        public static Dictionary <string, CalcStragGroupClass <T> > InitCalcStrags <T>(DataTypePoint dpt, ref Dictionary <string, CalcStragGroupClass <T> > AllStatusStrags, Dictionary <string, BaseStragClass <T> > AllStrags, Dictionary <string, StragRunPlanClass <T> > list, Dictionary <string, AssetUnitClass> AssetUnits, bool StartTheAuto, bool IsBackTest) where T : TimeSerialData
        {
            if (AllStatusStrags == null)
            {
                AllStatusStrags = new Dictionary <string, CalcStragGroupClass <T> >();
            }
            foreach (string key in list.Keys) //按相同类型+视图分类,相同类分在一组
            {
                StragRunPlanClass <T> spc = list[key];
                if (AllStatusStrags.SelectMany(t => t.Value.UseSPlans.Select(a => a.GUID)).Contains(key))//支持后续加入计划,只要状态合适都可以加入
                {
                    continue;
                }
                if (!AllStrags.ContainsKey(spc.PlanStrag.GUID))
                {
                    ToLog(string.Format("计划{0}非法", spc.PlanStrag.StragScript), "计划所对应策略已注销");

                    continue;
                }
                BaseStragClass <T> sc = AllStrags[spc.PlanStrag.GUID];
                spc.PlanStrag = sc;
                if (spc.AssetUnitInfo != null)//分配资产单元号
                {
                    sc.AssetUnitId = spc.AssetUnitInfo.UnitId;
                }
                ///更新为首先按数据源分类,然后按类和视图分类
                //string strModel = "Type_{0}_ViewBySerial_{1}";//按类和数据视图分类
                //string strKey = string.Format(strModel, sc.GetType().Name, sc.BySer);
                string strModel = "DS_{2}Type_{0}_ViewBySerial_{1}";//更新为首先按数据源分类,然后按类和视图分类
                string strKey   = string.Format(strModel, sc.GetType().Name, sc.BySer, spc.UseDataSource);
                if (!IsBackTest)
                {
                    if (spc.ExpiredTime < DateTime.Now)
                    {
                        ToLog("计划时间不匹配", "超过计划过期时间");
                        continue;
                    }
                    if (!JudgeInRunTime(DateTime.Now, spc))//没在指定运行时间内,跳过
                    {
                        ToLog("计划时间不匹配", "未在指定时间区间内");
                        continue;
                    }
                }
                if (StartTheAuto)//如果第一次运行,将此标志设为真,将自动启动策略
                {
                    spc.Running = spc.AutoRunning;
                }
                if (!spc.Running && !IsBackTest)
                {
                    continue;
                }
                if (spc.UseDataSource != dpt.DataType && !IsBackTest)
                {
                    ToLog("计划不属于使用的数据源", strKey);
                    continue;
                }


                CalcStragGroupClass <T> csg = null;
                if (!AllStatusStrags.ContainsKey(strKey) || IsBackTest)
                {
                    if (GlobalClass.TypeDataPoints.ContainsKey(spc.UseDataSource) || IsBackTest)//如果计划不属于数据源,不加载
                    {
                        csg = new CalcStragGroupClass <T>(GlobalClass.TypeDataPoints[spc.UseDataSource]);
                        if (!AllStatusStrags.ContainsKey(strKey))
                        {
                            AllStatusStrags.Add(strKey, csg);
                        }
                    }
                }
                if (!AllStatusStrags.ContainsKey(strKey))
                {
                    ToLog("计划未登记!", strKey);
                    continue;
                }
                csg = AllStatusStrags[strKey];
                if (spc.AssetUnitInfo != null)//必须加资产单元信息
                {
                    string uid = spc.AssetUnitInfo.UnitId;
                    if (AssetUnits.ContainsKey(uid))
                    {
                        if (!csg.UseAssetUnits.ContainsKey(uid))
                        {
                            csg.UseAssetUnits.Add(uid, AssetUnits[uid]); //注意,一定是要用全局设置的单元资产,才有动态的金额等信息
                        }
                    }
                    else
                    {
                        ToLog("计划资产单元不匹配", "计划所属资产单元不存在");
                    }
                }
                //csg = AllStatusStrags[strKey];
                csg.UseSPlans.Add(spc);
                ToLog("加入计划", spc.StragDescript);
                csg.UseStrags.Add(sc.GUID, sc);
                csg.UseSerial = sc.BySer;
                //ToLog("初始化待计算的计划", string.Format("准备运行的计划数为:{0};", AllStatusStrags.Count));
            }
            return(AllStatusStrags);
        }
Example #2
0
        /// <summary>
        /// 初始化计划,将数据类型和运算类型相同的计划分组
        /// </summary>
        public static Dictionary <string, CalcStragGroupClass> InitCalcStrags(ref Dictionary <string, CalcStragGroupClass> AllStatusStrags, Dictionary <string, StragClass> AllStrags, Dictionary <string, StragRunPlanClass> list, Dictionary <string, AssetUnitClass> AssetUnits, bool StartTheAuto, bool IsBackTest)
        {
            if (AllStatusStrags == null)
            {
                AllStatusStrags = new Dictionary <string, CalcStragGroupClass>();
            }
            foreach (string key in list.Keys) //按相同类型+视图分类,相同类分在一组
            {
                StragRunPlanClass spc = list[key];
                if (AllStatusStrags.SelectMany(t => t.Value.UseSPlans.Select(a => a.GUID)).Contains(key))//支持后续加入计划,只要状态合适都可以加入
                {
                    continue;
                }
                if (!AllStrags.ContainsKey(spc.PlanStrag.GUID))
                {
                    ToLog("计划非法", "计划所对应策略已注销");
                    continue;
                }
                StragClass sc = AllStrags[spc.PlanStrag.GUID];
                spc.PlanStrag = sc;
                if (spc.AssetUnitInfo != null)//分配资产单元号
                {
                    sc.AssetUnitId = spc.AssetUnitInfo.UnitId;
                }
                string strModel = "Type_{0}_ViewBySerial_{1}";//按类和数据视图分类
                string strKey   = string.Format(strModel, sc.GetType().Name, sc.BySer);
                if (!IsBackTest)
                {
                    if (spc.ExpiredTime < DateTime.Now)
                    {
                        ToLog("计划时间不匹配", "超过计划过期时间");
                        continue;
                    }
                    if (!JudgeInRunTime(DateTime.Now, spc))//没在指定运行时间内,跳过
                    {
                        ToLog("计划时间不匹配", "未在指定时间区间内");
                        continue;
                    }
                }
                if (StartTheAuto)//如果第一次运行,将此标志设为真,将自动启动策略
                {
                    spc.Running = spc.AutoRunning;
                }
                if (!spc.Running)
                {
                    continue;
                }

                CalcStragGroupClass csg = null;
                if (!AllStatusStrags.ContainsKey(strKey))
                {
                    csg = new CalcStragGroupClass();
                    AllStatusStrags.Add(strKey, csg);
                }
                csg = AllStatusStrags[strKey];
                if (spc.AssetUnitInfo != null)
                {
                    string uid = spc.AssetUnitInfo.UnitId;
                    if (AssetUnits.ContainsKey(uid))
                    {
                        if (!csg.UseAssetUnits.ContainsKey(uid))
                        {
                            csg.UseAssetUnits.Add(uid, AssetUnits[uid]); //注意,一定是要用全局设置的单元资产,才有动态的金额等信息
                        }
                    }
                    else
                    {
                        ToLog("计划资产单元不匹配", "计划所属资产单元不存在");
                    }
                }
                //csg = AllStatusStrags[strKey];
                csg.UseSPlans.Add(spc);
                ToLog("加入计划", spc.StragDescript);
                csg.UseStrags.Add(sc.GUID, sc);
                csg.UseSerial = sc.BySer;
                //ToLog("初始化待计算的计划", string.Format("准备运行的计划数为:{0};", AllStatusStrags.Count));
            }
            return(AllStatusStrags);
        }