/// <summary> /// Calculated primary indicator data. If an indicator has several output,one is called "primary data" /// and others are calles "exatra data". /// </summary> /// <param name="myData"> Data used to calculate indicator data.</param> /// <param name="meta">Indicator meta data</param> /// <param name="periods">List of indicator parametters</param> /// <returns></returns> public static DataSeries GetIndicatorData(application.AnalysisData myData, Meta meta) { string cacheName = myData.DataStockCode + "-" + meta.ClassType.Name; object[] para = new object[1]; if (meta.InputDataType == typeof(DataBars)) { para[0] = myData.Bars; } else { para[0] = myData.Close; } for (int idx = 0; idx < meta.Parameters.Length; idx++) { Array.Resize(ref para, para.Length + 1); para[para.Length - 1] = meta.Parameters[idx]; cacheName += "-" + meta.Parameters[idx].ToString(); } Array.Resize(ref para, para.Length + 1); para[para.Length - 1] = meta.Name; DataSeries indicatorSeries = (DataSeries)dataCache.Find(cacheName); if (indicatorSeries == null) { indicatorSeries = (DataSeries)Activator.CreateInstance(meta.ClassType, para); dataCache.Add(cacheName, indicatorSeries); } return(indicatorSeries); }
/// <summary> /// Calculated indicator data. If an indicator has several output,one is called "primary data" /// and others are calles "exatra data". /// </summary> /// <param name="myData"> Data used to calculate indicator databases.</param> /// <param name="meta">Indicator meta data</param> /// <param name="periods">List of indicator parametters</param> /// <returns></returns> public static DataValues[] GetIndicatorData(application.AnalysisData myData, Meta meta) { string cacheName = myData.DataStockCode + "-" + meta.ClassType.Name; object[] para = new object[1]; if (meta.InputDataType == typeof(DataBars)) { para[0] = myData.Bars; } else { para[0] = myData.Close; } for (int idx = 0; idx < meta.Parameters.Length; idx++) { Array.Resize(ref para, para.Length + 1); para[para.Length - 1] = meta.Parameters[idx]; cacheName += "-" + meta.Parameters[idx].ToString(); } Array.Resize(ref para, para.Length + 1); para[para.Length - 1] = meta.Name; DataValues[] indicatorValues = (DataValues[])dataCache.Find(cacheName); if (indicatorValues == null) { indicatorValues = new DataValues[meta.Output.Length]; DataSeries mainSeries = (DataSeries)Activator.CreateInstance(meta.ClassType, para); indicatorValues[0] = new DataValues(); indicatorValues[0].Values = mainSeries.Values; indicatorValues[0].FirstValidValue = mainSeries.FirstValidValue; // Some indicator such as MACD having more than one output series. // In such case, indicator form MUST have [form.ExtraInfo] propery to provide information for the output series. if (meta.Output.Length > 1) { PropertyInfo propertyInfo = meta.ClassType.GetProperty("ExtraSeries"); if (propertyInfo != null) { DataSeries[] extraSeries = (DataSeries[])propertyInfo.GetValue(mainSeries, null); for (int idx = 0, metaIdx = 1; idx < extraSeries.Length && metaIdx < meta.Output.Length; idx++, metaIdx++) { indicatorValues[metaIdx] = new DataValues(); indicatorValues[metaIdx].Values = extraSeries[idx].Values; indicatorValues[metaIdx].FirstValidValue = extraSeries[idx].FirstValidValue; } } } dataCache.Add(cacheName, indicatorValues); } return(indicatorValues); }
override protected void StrategyExecute() { int Bar = data.Close.Count - 1; if (Bar <= 1) { return; } // Dong sau tao mot data moi cua ^VNINDEX application.AnalysisData vnidxData = data.New("^VNINDEX"); int Barindex = vnidxData.Close.Count - 1; if (Barindex <= 1) { return; } // if (Bar == vnidxData.Close.Count - 1) { int period = (int)parameters[0]; Indicators.ROCR100 roc = Indicators.ROCR100.Series(data.Close, period, ""); Indicators.ROCR100 roc_index = Indicators.ROCR100.Series(vnidxData.Close, period, ""); if (roc_index[Barindex] != 0) { double rs = roc[Bar] / roc_index[Barindex]; BusinessInfo info = new BusinessInfo(); info.Weight = rs * 100; SelectStock(Bar, info); } //if (roc_index[Bar] != 0) //{ // double rs = roc[Bar] / roc_index[Bar]; // BusinessInfo info = new BusinessInfo(); // info.Weight = rs * 100; // SelectStock(Bar, info); //} } }
//public static int CreateTradeAlert() //{ // CreateTradeAlert(null, null, null); //} public static int CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc) { DateTime frDate = common.Consts.constNullDate; DateTime toDate = DateTime.Now; //Run all strategy analysis for all stocks. databases.tmpDS.stockCodeDataTable stockCodeTbl = new databases.tmpDS.stockCodeDataTable(); databases.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable); application.AnalysisData data = new application.AnalysisData(); data.DataTimeRange = AppTypes.TimeRanges.None; data.DataMaxCount = Settings.sysGlobal.AlertDataCount; TradeAlertItem[] tradeAlertList = new TradeAlertItem[0]; StringCollection strategyList = new StringCollection(); for (int idx = 0; idx < StrategyData.MetaList.Values.Length; idx++) { application.Strategy.StrategyMeta meta = (application.Strategy.StrategyMeta)StrategyData.MetaList.Values[idx]; if (meta.Type != AppTypes.StrategyTypes.Strategy) { continue; } strategyList.Add(((application.Strategy.StrategyMeta)StrategyData.MetaList.Values[idx]).Code); } if (onStartFunc != null) { onStartFunc(stockCodeTbl.Count); } DateTime alertDate; DateTime alertFrDate = toDate.Date; DateTime alertToDate = toDate; for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++) { if (onProcessItemFunc != null) { if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code)) { break; } } //foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales) //??? AppTypes.TimeScale timeScale = AppTypes.TimeScaleFromType(AppTypes.TimeScaleTypes.Day); { data.DataStockCode = stockCodeTbl[stockCodeIdx].code; data.DataTimeScale = timeScale; data.LoadData(); for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++) { StrategyData.ClearCache(); TradePoints advices = application.Strategy.StrategyLibs.AnalysisStrategy(data, strategyList[strategyIdx].Trim()); if ((advices == null) || (advices.Count == 0)) { continue; } //Only check the last advices for alert TradePointInfo tradeInfo = (TradePointInfo)advices[advices.Count - 1]; alertDate = DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]); //Ignore alerts that out of date range. if (alertDate < alertFrDate || alertDate > alertToDate) { continue; } Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1); tradeAlertList[tradeAlertList.Length - 1] = new TradeAlertItem(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(), timeScale, alertDate, data.Close[tradeInfo.DataIdx], data.Volume[tradeInfo.DataIdx], tradeInfo); } } } //Create alerts in the day int noAlertCreated = CreateTradeAlert(tradeAlertList); //Save last lun date //SaveLastRunTime(toDate); if (onEndFunc != null) { onEndFunc(); } stockCodeTbl.Dispose(); return(noAlertCreated); }
//public static int CreateTradeAlert() //{ // CreateTradeAlert(null, null, null); //} public static int CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc) { DateTime frDate = common.Consts.constNullDate; DateTime toDate = DateTime.Now; //Run all strategy analysis for all stocks. databases.tmpDS.stockCodeDataTable stockCodeTbl = new databases.tmpDS.stockCodeDataTable(); databases.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable); application.AnalysisData data = new application.AnalysisData(); data.DataTimeRange = AppTypes.TimeRanges.None; data.DataMaxCount = Settings.sysGlobal.AlertDataCount; TradeAlertItem[] tradeAlertList = new TradeAlertItem[0]; StringCollection strategyList = new StringCollection(); for (int idx = 0; idx < application.Strategy.StrategyData.MetaList.Values.Length; idx++) { application.Strategy.StrategyMeta meta = (application.Strategy.StrategyMeta)application.Strategy.StrategyData.MetaList.Values[idx]; if (meta.Type != AppTypes.StrategyTypes.Strategy) continue; strategyList.Add(((application.Strategy.StrategyMeta)application.Strategy.StrategyData.MetaList.Values[idx]).Code); } if (onStartFunc != null) onStartFunc(stockCodeTbl.Count); DateTime alertDate; DateTime alertFrDate = toDate.Date; DateTime alertToDate = toDate; for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++) { if (onProcessItemFunc != null) if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code)) break; //foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales) //??? AppTypes.TimeScale timeScale = AppTypes.TimeScaleFromType(AppTypes.TimeScaleTypes.Day); { data.DataStockCode = stockCodeTbl[stockCodeIdx].code; data.DataTimeScale = timeScale; data.LoadData(); for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++) { application.Strategy.StrategyData.ClearCache(); application.Strategy.StrategyData.TradePoints advices = application.Strategy.StrategyLibs.AnalysisStrategy(data, strategyList[strategyIdx].Trim()); if ( (advices == null) || (advices.Count==0)) continue; //Only check the last advices for alert TradePointInfo tradeInfo = (TradePointInfo)advices[advices.Count-1]; alertDate = DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]); //Ignore alerts that out of date range. if (alertDate < alertFrDate || alertDate > alertToDate) continue; Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1); tradeAlertList[tradeAlertList.Length - 1] = new TradeAlertItem(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(), timeScale, alertDate, data.Close[tradeInfo.DataIdx], data.Volume[tradeInfo.DataIdx],tradeInfo); } } } //Create alerts in the day int noAlertCreated = CreateTradeAlert(tradeAlertList); //Save last lun date //SaveLastRunTime(toDate); if (onEndFunc != null) onEndFunc(); stockCodeTbl.Dispose(); return noAlertCreated; }
/// <summary> /// Get data and store in cache. Depend on forceReadNew, cached data can be used to boost perfomance /// </summary> /// <param name="timeRange"></param> /// <param name="timeScaleCode"></param> /// <param name="code"></param> /// <param name="forceReadNew"> if true always read from database, ignore the cached data</param> /// <returns>Data key used for data accessing</returns> public string LoadAnalysisData(string code,commonClass.DataParams dataParam, bool forceReadNew) { try { string cacheName = MakeCacheKey(code, dataParam); if (forceReadNew || sysDataCache.Find(cacheName) == null) { application.AnalysisData myData = new application.AnalysisData(code, dataParam); sysDataCache.Add(cacheName, myData); } return cacheName; } catch (Exception ex) { WriteSysLogLocal("WS002",ex); } return null; }
public static void CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc) { DateTime frDate = common.Consts.constNullDate; DateTime toDate = DateTime.Now; //Run all strategy analysis for all stocks. data.tmpDS.stockCodeDataTable stockCodeTbl = new data.tmpDS.stockCodeDataTable(); application.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable); application.AnalysisData data = new application.AnalysisData(); TradeAlert[] tradeAlertList = new TradeAlert[0]; StringCollection strategyList = new StringCollection(); for (int idx = 0; idx < application.Strategy.Data.MetaList.Values.Length; idx++) { application.Strategy.Meta meta = (application.Strategy.Meta)application.Strategy.Data.MetaList.Values[idx]; if (meta.Type != AppTypes.StrategyTypes.Strategy) continue; strategyList.Add(((application.Strategy.Meta)application.Strategy.Data.MetaList.Values[idx]).Code); } if (onStartFunc != null) onStartFunc(stockCodeTbl.Count); //Alert on last month data data.DataTimeRange = Settings.sysAlertTimeRange; ; DateTime alertDate; DateTime alertFrDate = toDate.Date; DateTime alertToDate = toDate; for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++) { if (onProcessItemFunc != null) if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code)) break; foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales) //?? { data.DataStockCode = stockCodeTbl[stockCodeIdx].code; data.DataTimeScale = timeScale; data.LoadData(); for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++) { application.Strategy.Data.ClearCache(); application.Strategy.Data.TradePoints advices = application.Strategy.Libs.Analysis(data, strategyList[strategyIdx].Trim()); if (advices == null) continue; for (int idx3 = 0; idx3 < advices.Count; idx3++) { TradePointInfo tradeInfo = (TradePointInfo)advices[idx3]; alertDate = DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]); //Ignore alerts that out of date range. if (alertDate < alertFrDate || alertDate > alertToDate) continue; Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1); tradeAlertList[tradeAlertList.Length-1] = new TradeAlert(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(), timeScale, alertDate, data.Close[tradeInfo.DataIdx], data.Volume[tradeInfo.DataIdx],tradeInfo); } } } } stockCodeTbl.Dispose(); //Create alerts in the day CreateTradeAlert(tradeAlertList); //Save last lun date SaveLastRunTime(toDate); if (onEndFunc != null) onEndFunc(); }
public static void CreateTradeAlert(onProcessStart onStartFunc, onProcessItem onProcessItemFunc, onProcessEnd onEndFunc) { DateTime frDate = common.Consts.constNullDate; DateTime toDate = DateTime.Now; //Run all strategy analysis for all stocks. data.tmpDS.stockCodeDataTable stockCodeTbl = new data.tmpDS.stockCodeDataTable(); application.DbAccess.LoadData(stockCodeTbl, AppTypes.CommonStatus.Enable); application.AnalysisData data = new application.AnalysisData(); TradeAlert[] tradeAlertList = new TradeAlert[0]; StringCollection strategyList = new StringCollection(); for (int idx = 0; idx < application.Strategy.Data.MetaList.Values.Length; idx++) { application.Strategy.Meta meta = (application.Strategy.Meta)application.Strategy.Data.MetaList.Values[idx]; if (meta.Type != AppTypes.StrategyTypes.Strategy) { continue; } strategyList.Add(((application.Strategy.Meta)application.Strategy.Data.MetaList.Values[idx]).Code); } if (onStartFunc != null) { onStartFunc(stockCodeTbl.Count); } //Alert on last month data data.DataTimeRange = Settings.sysAlertTimeRange;; DateTime alertDate; DateTime alertFrDate = toDate.Date; DateTime alertToDate = toDate; for (int stockCodeIdx = 0; stockCodeIdx < stockCodeTbl.Count; stockCodeIdx++) { if (onProcessItemFunc != null) { if (!onProcessItemFunc(stockCodeTbl[stockCodeIdx].code)) { break; } } foreach (AppTypes.TimeScale timeScale in AppTypes.myTimeScales) //?? { data.DataStockCode = stockCodeTbl[stockCodeIdx].code; data.DataTimeScale = timeScale; data.LoadData(); for (int strategyIdx = 0; strategyIdx < strategyList.Count; strategyIdx++) { application.Strategy.Data.ClearCache(); application.Strategy.Data.TradePoints advices = application.Strategy.Libs.Analysis(data, strategyList[strategyIdx].Trim()); if (advices == null) { continue; } for (int idx3 = 0; idx3 < advices.Count; idx3++) { TradePointInfo tradeInfo = (TradePointInfo)advices[idx3]; alertDate = DateTime.FromOADate(data.DateTime[tradeInfo.DataIdx]); //Ignore alerts that out of date range. if (alertDate < alertFrDate || alertDate > alertToDate) { continue; } Array.Resize(ref tradeAlertList, tradeAlertList.Length + 1); tradeAlertList[tradeAlertList.Length - 1] = new TradeAlert(stockCodeTbl[stockCodeIdx].code.Trim(), strategyList[strategyIdx].Trim(), timeScale, alertDate, data.Close[tradeInfo.DataIdx], data.Volume[tradeInfo.DataIdx], tradeInfo); } } } } stockCodeTbl.Dispose(); //Create alerts in the day CreateTradeAlert(tradeAlertList); //Save last lun date SaveLastRunTime(toDate); if (onEndFunc != null) { onEndFunc(); } }