//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; }
//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 databases.tmpDS.priceDiagnoseDataTable DiagnosePrice_CloseAndNextOpen(DateTime frDate, DateTime toDate, string timeScaleCode, string exchangeCode,string code, double variancePerc, double variance,byte precision) { try { databases.baseDS.priceDataDataTable priceDataTbl = new databases.baseDS.priceDataDataTable(); databases.tmpDS.priceDiagnoseDataTable priceDiagnoseTbl = new databases.tmpDS.priceDiagnoseDataTable(); if (code != null && code.Trim() != "") { priceDataTbl.Clear(); databases.DbAccess.LoadData(priceDataTbl, timeScaleCode, frDate, toDate, code.Trim()); application.AppLibs.DiagnosePrice_CloseAndNextOpen(priceDataTbl, variancePerc, variance,precision, priceDiagnoseTbl); } else { databases.tmpDS.stockCodeDataTable codeTbl = new databases.tmpDS.stockCodeDataTable(); databases.DbAccess.LoadStockCode_ByStockExchange(codeTbl, exchangeCode, AppTypes.CommonStatus.Enable); for (int idx = 0; idx < codeTbl.Count; idx++) { priceDataTbl.Clear(); databases.DbAccess.LoadData(priceDataTbl, timeScaleCode, frDate, toDate, codeTbl[idx].code); application.AppLibs.DiagnosePrice_CloseAndNextOpen(priceDataTbl, variancePerc, variance,precision, priceDiagnoseTbl); } codeTbl.Dispose(); } priceDataTbl.Dispose(); return priceDiagnoseTbl; } catch (Exception ex) { WriteSysLogLocal("WS088", ex); } return null; }