private static void GetMeta(Assembly indicatorAss, common.DictionaryList MetaList) { Type[] mTypes = indicatorAss.GetTypes(); Meta meta; string HelpersTypeName = typeof(Helpers).Name; foreach (Type type in mTypes) { if (type.BaseType.Name != HelpersTypeName) { continue; } // get info about property Type indicatorType = indicatorAss.GetType(type.FullName); object indicatorInstance = Activator.CreateInstance(indicatorType); meta = (Meta)indicatorType.InvokeMember("GetInfo", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, indicatorInstance, null); if (meta.Name.Trim() == "") { continue; } MetaList.Add(meta.ClassType.Name, meta); } return; }
private static void GetMeta(Assembly strategyAss, common.DictionaryList MetaList) { Type[] mTypes = strategyAss.GetTypes(); Meta Meta; string strategyHelperTypeName = typeof(baseHelper).Name; foreach (Type type in mTypes) { if (type.BaseType.Name != strategyHelperTypeName) { continue; } // get info about property Type strategyType = strategyAss.GetType(type.FullName); try { object strategyInstance = Activator.CreateInstance(strategyType); Meta = (Meta)strategyType.InvokeMember("GetInfo", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, strategyInstance, null); if (Meta.Code.Trim() == "") { continue; } MetaList.Add(Meta.ClassType.Name, Meta); } catch (Exception er) { commonClass.SysLibs.WriteSystemLog(er.Message); } } return; }
/// <summary> /// Get Meta from all indicator DDL in a drectory /// </summary> /// <param name="path"></param> /// <param name="files"></param> /// <param name="MetaList"></param> public static void GetMeta(string path, string files, common.DictionaryList MetaList) { string[] dllFileList = Directory.GetFiles(path, files); for (int idx1 = 0; idx1 < dllFileList.Length; idx1++) { GetMeta(dllFileList[idx1], MetaList); } }
/// <summary> /// Find/Get indicator by name. Return null if not found /// </summary> /// <param name="MetaList">List keeps meta data</param> /// <param name="name">Indicator name to find</param> /// <returns></returns> private static Meta FindMetaByName(common.DictionaryList MetaList, string name) { object obj = MetaList.Find(name); if (obj == null) { return(null); } return((Meta)obj); }
/// <summary> /// Find/Get strategy by code. Return null if not found /// </summary> /// <param name="MetaList">List keeps meta data</param> /// <param name="name">strategy code to find</param> /// <returns>Null if not found</returns> private static Meta FindMetaByCode(common.DictionaryList MetaList, string code) { for (int idx = 0; idx < MetaList.Values.Length; idx++) { if (((Meta)MetaList.Values[idx]).Code == code) { return((Meta)MetaList.Values[idx]); } } return(null); }
/// <summary> /// Set Parameters property from a formated string. /// </summary> /// <param name="str">String in the format <key=value>,...,<key=value></param> private static common.DictionaryList String2ParameterList(string str) { double para = 0; common.DictionaryList list = new common.DictionaryList(); common.myKeyValueItem[] keyValues = common.system.String2KeyValueList(str, ",", "="); for (int idx = 0; idx < keyValues.Length; idx++) { if (!double.TryParse(keyValues[idx].Value, out para)) continue; list.Add(keyValues[idx].Key, para); } return list; }
/// <summary> /// Create menu listing all strategies with click events. /// - strategy having category existed in strategyCat table are grouped to that category /// - strategy having category NOT existed in strategyCat are placed under the category menus /// </summary> /// <param name="Metas">Meta infomation of plug-in strategy</param> /// <param name="toMenu">Menu where strategy menus are added</param> /// <param name="handler">Function fired on Click Event</param> private static void CreateMenu(common.DictionaryList Metas, AppTypes.StrategyTypes strategyType, ToolStripMenuItem toMenu, System.EventHandler handler) { for (int idx1 = 0; idx1 < Data.myCatList.Count; idx1++) { Meta[] tmpMetas = FindMetaByCat(Metas, strategyType, Data.myCatList[idx1].Code); if (tmpMetas == null || tmpMetas.Length == 0) { continue; } ToolStripMenuItem catMenuItem = new ToolStripMenuItem(); catMenuItem.Name = toMenu.Name + "-group-" + Data.myCatList[idx1].Code; catMenuItem.Text = Data.myCatList[idx1].Description; toMenu.DropDownItems.Add(catMenuItem); for (int idx2 = 0; idx2 < tmpMetas.Length; idx2++) { ToolStripMenuItem menuItem = new ToolStripMenuItem(); menuItem.Name = toMenu.Name + "-" + tmpMetas[idx2].ClassType.Name; menuItem.Tag = tmpMetas[idx2]; menuItem.Text = tmpMetas[idx2].Name; if (handler != null) { menuItem.Click += new System.EventHandler(handler); } catMenuItem.DropDownItems.Add(menuItem); } } Meta meta; for (int idx2 = 0; idx2 < Metas.Values.Length; idx2++) { meta = (Meta)Metas.Values[idx2]; if (meta.Type != strategyType) { continue; } if (Data.myCatList.Find(meta.Category.Trim()) != null) { continue; } ToolStripMenuItem menuItem = new ToolStripMenuItem(); menuItem.Name = toMenu.Name + "-group-" + meta.ClassType.Name; menuItem.Tag = meta; menuItem.Text = meta.Name; toMenu.DropDownItems.Add(menuItem); if (handler != null) { menuItem.Click += new System.EventHandler(handler); } } }
/// <summary> /// Set Parameters property from a formated string. /// </summary> /// <param name="str">String in the format <key=value>,...,<key=value></param> private static common.DictionaryList String2ParameterList(string str) { double para = 0; common.DictionaryList list = new common.DictionaryList(); common.myKeyValueItem[] keyValues = common.system.String2KeyValueList(str, ",", "="); for (int idx = 0; idx < keyValues.Length; idx++) { if (!double.TryParse(keyValues[idx].Value, out para)) { continue; } list.Add(keyValues[idx].Key, para); } return(list); }
/// <summary> /// Find/Get all indicator of the same category /// </summary> /// <param name="metasList">List keeps meta data </param> /// <param name="category">What category to find/get </param> /// <returns></returns> private static Meta[] FindMetaByCat(common.DictionaryList metasList, string category) { Meta[] retMetas = new Meta[0]; category = category.Trim().ToLower(); for (int idx = 0; idx < metasList.Values.Length; idx++) { Meta meta = (Meta)metasList.Values[idx]; if (meta.Category.Trim().ToLower() != category) { continue; } Array.Resize(ref retMetas, retMetas.Length + 1); retMetas[retMetas.Length - 1] = meta; } return(retMetas); }
/// <summary> /// Load all strategies of scpecific type. /// - strategy having category existed in strategyCat table are grouped to that category /// - strategy having category NOT existed in strategyCat are placed under the category menus /// </summary> /// <param name="strategyType"></param> /// <param name="toObj"></param> public static void LoadStrategy(AppTypes.StrategyTypes strategyType, ToolStripComboBox toObj) { common.DictionaryList Metas = Data.MetaList; toObj.Items.Clear(); for (int idx1 = 0; idx1 < Data.myCatList.Count; idx1++) { Meta[] tmpMetas = FindMetaByCat(Metas, strategyType, Data.myCatList[idx1].Code); if (tmpMetas == null || tmpMetas.Length == 0) { continue; } toObj.Items.Add(new common.myComboBoxItem("--" + Data.myCatList[idx1].Description.Trim() + "--", "")); for (int idx2 = 0; idx2 < tmpMetas.Length; idx2++) { toObj.Items.Add(new common.myComboBoxItem(tmpMetas[idx2].Name, tmpMetas[idx2].Code)); } } //Donot have category Meta meta; bool flag = true; for (int idx2 = 0; idx2 < Metas.Values.Length; idx2++) { if (flag) { toObj.Items.Add(new common.myComboBoxItem("--" + Languages.Libs.GetString("others") + "--", "")); flag = false; } meta = (Meta)Metas.Values[idx2]; if (meta.Type != strategyType) { continue; } if (Data.myCatList.Find(meta.Category.Trim()) != null) { continue; } toObj.Items.Add(new common.myComboBoxItem(meta.Name, meta.Code)); } }
/// <summary> /// Find/Get strategy by name. Return null if not found /// </summary> /// <param name="MetaList">List keeps meta data</param> /// <param name="name">strategy name to find</param> /// <returns>Null if not found</returns> private static Meta FindMetaByName(common.DictionaryList MetaList, string name) { object obj = MetaList.Find(name); //TUAN - 29 Sept 2012 fix bug profit detail and all profit details foreach (application.Strategy.Meta item in MetaList.Values) { if (item.Name.Equals(name)) { obj = item; break; } } //TUAN - 29 Sept 2012 fix bug profit detail and all profit details if (obj == null) { return(null); } return((Meta)obj); }
/// <summary> /// Create menu listing all indictors with click events. /// - Indicators having category existed in indicatorCat table are grouped to that category /// - Indicators having category NOT existed in indicatorCat are placed under the category menus /// </summary> /// <param name="Metas">Meta infomation of plug-in indicators</param> /// <param name="toMenu">Menu where indicator menus are added</param> /// <param name="ShowIndicatorHandler">Function fired on Click Event</param> private static void CreateIndicatorMenu(common.DictionaryList Metas, ToolStripMenuItem toMenu, System.EventHandler ShowIndicatorHandler) { for (int idx1 = 0; idx1 < Data.myIndicatorCatList.Count; idx1++) { Indicators.Meta[] tmpMetas = Libs.FindMetaByCat(Metas, Data.myIndicatorCatList[idx1].Code); if (tmpMetas == null || tmpMetas.Length == 0) { continue; } ToolStripMenuItem catMenuItem = new ToolStripMenuItem(); catMenuItem.Name = toMenu.Name + "-group-" + Data.myIndicatorCatList[idx1].Code; catMenuItem.Text = Data.myIndicatorCatList[idx1].Description; toMenu.DropDownItems.Add(catMenuItem); for (int idx2 = 0; idx2 < tmpMetas.Length; idx2++) { ToolStripMenuItem menuItem = new ToolStripMenuItem(); menuItem.Name = toMenu.Name + "-" + tmpMetas[idx2].ClassType.Name; menuItem.Tag = tmpMetas[idx2].ClassType.Name; menuItem.Text = tmpMetas[idx2].Name; menuItem.Click += new System.EventHandler(ShowIndicatorHandler); catMenuItem.DropDownItems.Add(menuItem); } } Indicators.Meta meta; for (int idx2 = 0; idx2 < Metas.Values.Length; idx2++) { meta = (Indicators.Meta)Metas.Values[idx2]; if (Data.myIndicatorCatList.Find(meta.Category.Trim()) != null) { continue; } ToolStripMenuItem menuItem = new ToolStripMenuItem(); menuItem.Name = toMenu.Name + "-group-" + meta.ClassType.Name; menuItem.Tag = meta.ClassType.Name; menuItem.Text = meta.Name; toMenu.DropDownItems.Add(menuItem); menuItem.Click += new System.EventHandler(ShowIndicatorHandler); } }
/// <summary> /// Set Output property from a formated string. /// </summary> /// <param name="str"> In the format ([key]=[Color]:[Weight*]:[ChartType*]) </param> /// <returns></returns> private static common.DictionaryList String2OutputList(string str) { common.DictionaryList list = new common.DictionaryList(); common.myKeyValueItem[] keyValues = common.system.String2KeyValueList(str, ",", "="); Color color = Data.sysDefaultLineColor; int weight = 1; AppTypes.ChartTypes chartType = Data.sysDefaultLineChartType; for (int idx = 0; idx < keyValues.Length; idx++) { string[] parts = common.system.String2List(keyValues[idx].Value, ":", StringSplitOptions.None); color = (parts.Length > 0 ? ColorTranslator.FromHtml(parts[0]) : Data.sysDefaultLineColor); weight = Data.sysDefaultLineWeight; if (parts.Length > 1) { int.TryParse(parts[1], out weight); } chartType = (parts.Length > 2 ? AppTypes.Text2ChartType(parts[2]) : Data.sysDefaultLineChartType); list.Add(keyValues[idx].Key, new Meta.OutputInfo(color, weight, chartType)); } return(list); }
public static databases.baseDS.tradeAlertDataTable MakeAlertSummary(databases.baseDS.tradeAlertDataTable tbl) { SummaryItem buyCount, sellCount; databases.baseDS.tradeAlertRow sumRow; databases.baseDS.tradeAlertDataTable sumTbl = new databases.baseDS.tradeAlertDataTable(); sumTbl.DefaultView.Sort = sumTbl.onTimeColumn.ColumnName + "," + sumTbl.stockCodeColumn.ColumnName; DataRowView[] foundRows; common.DictionaryList buyCountList = new common.DictionaryList(); common.DictionaryList sellCountList = new common.DictionaryList(); object obj; //Sum for (int idx = 0; idx < tbl.Count; idx++) { foundRows = sumTbl.DefaultView.FindRows(new object[] { tbl[idx].onTime.Date, tbl[idx].stockCode }); if (foundRows.Length != 0) { sumRow = (databases.baseDS.tradeAlertRow)foundRows[0].Row; } else { sumRow = sumTbl.NewtradeAlertRow(); databases.AppLibs.InitData(sumRow); sumRow.onTime = tbl[idx].onTime.Date; sumRow.stockCode = tbl[idx].stockCode; sumTbl.AddtradeAlertRow(sumRow); } AppTypes.TradeActions action = (AppTypes.TradeActions)tbl[idx].tradeAction; switch (action) { case AppTypes.TradeActions.Buy: case AppTypes.TradeActions.Accumulate: obj = buyCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode); if (obj == null) { buyCount = new SummaryItem(sumRow.stockCode, sumRow.onTime); } else { buyCount = (SummaryItem)obj; } buyCount.Qty++; buyCountList.Add(sumRow.onTime.ToString() + sumRow.stockCode, buyCount); break; case AppTypes.TradeActions.Sell: case AppTypes.TradeActions.ClearAll: obj = sellCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode); if (obj == null) { sellCount = new SummaryItem(sumRow.stockCode, sumRow.onTime); } else { sellCount = (SummaryItem)obj; } sellCount.Qty++; sellCountList.Add(sumRow.onTime.Date.ToString() + sumRow.stockCode, sellCount); break; } } //Make summary message for (int idx = 0; idx < sumTbl.Count; idx++) { sumTbl[idx].msg = ""; obj = buyCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode); if (obj != null) { sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("buyAlert"); } obj = sellCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode); if (obj != null) { sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("sellAlert"); } } return(sumTbl); }
/// <summary> ///Get Meta from a DDL file name /// </summary> /// <param name="assemblyFile"></param> /// <param name="MetaList"></param> public static void GetMeta(string assemblyFile, common.DictionaryList MetaList) { GetMeta(Assembly.LoadFile(assemblyFile), MetaList); }
public static databases.baseDS.tradeAlertDataTable MakeAlertSummary(databases.baseDS.tradeAlertDataTable tbl) { SummaryItem buyCount, sellCount; databases.baseDS.tradeAlertRow sumRow; databases.baseDS.tradeAlertDataTable sumTbl = new databases.baseDS.tradeAlertDataTable(); sumTbl.DefaultView.Sort = sumTbl.onTimeColumn.ColumnName + "," + sumTbl.stockCodeColumn.ColumnName; DataRowView[] foundRows; common.DictionaryList buyCountList = new common.DictionaryList(); common.DictionaryList sellCountList = new common.DictionaryList(); object obj; //Sum for (int idx = 0; idx < tbl.Count; idx++) { foundRows = sumTbl.DefaultView.FindRows(new object[] { tbl[idx].onTime.Date, tbl[idx].stockCode }); if (foundRows.Length != 0) sumRow = (databases.baseDS.tradeAlertRow)foundRows[0].Row; else { sumRow = sumTbl.NewtradeAlertRow(); databases.AppLibs.InitData(sumRow); sumRow.onTime = tbl[idx].onTime.Date; sumRow.stockCode = tbl[idx].stockCode; sumTbl.AddtradeAlertRow(sumRow); } AppTypes.TradeActions action = (AppTypes.TradeActions)tbl[idx].tradeAction; switch (action) { case AppTypes.TradeActions.Buy: case AppTypes.TradeActions.Accumulate: obj = buyCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode); if (obj == null) buyCount = new SummaryItem(sumRow.stockCode, sumRow.onTime); else buyCount = (SummaryItem)obj; buyCount.Qty++; buyCountList.Add(sumRow.onTime.ToString() + sumRow.stockCode, buyCount); break; case AppTypes.TradeActions.Sell: case AppTypes.TradeActions.ClearAll: obj = sellCountList.Find(sumRow.onTime.ToString() + sumRow.stockCode); if (obj == null) sellCount = new SummaryItem(sumRow.stockCode, sumRow.onTime); else sellCount = (SummaryItem)obj; sellCount.Qty++; sellCountList.Add(sumRow.onTime.Date.ToString() + sumRow.stockCode, sellCount); break; } } //Make summary message for (int idx = 0; idx < sumTbl.Count; idx++) { sumTbl[idx].msg = ""; obj = buyCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode); if (obj != null) sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("buyAlert"); obj = sellCountList.Find(sumTbl[idx].onTime.ToString() + sumTbl[idx].stockCode); if (obj != null) sumTbl[idx].msg += (sumTbl[idx].msg.Trim() != "" ? " , " : "") + (obj as SummaryItem).Qty.ToString() + " " + Languages.Libs.GetString("sellAlert"); } return sumTbl; }
/// <summary> ///Get Meta from a DDL file name /// </summary> /// <param name="assemblyFile"></param> /// <param name="MetaList"></param> private static void GetMeta(string assemblyFile, common.DictionaryList MetaList) { GetMeta(Assembly.LoadFrom(assemblyFile), MetaList); }