private void DoRankingDB() { this.myValueType = ValueTypes.Amount; this.Amount2PercentDenominator = Settings.sysStockTotalCapAmt; resultTab.TabPages.Clear(); StringCollection stockCodeList = codeListLb.myValues; StringCollection timeRangeList = timeRangeLb.myCheckedValues; string[] strategyList = common.system.Collection2List(strategyClb.myCheckedValues); progressBar.Value = 0; progressBar.Minimum = 0; progressBar.Maximum = stockCodeList.Count * timeRangeList.Count; EstimateOptions estimateOption = new EstimateOptions(); for (int stockCodeId = 0; stockCodeId < stockCodeList.Count; stockCodeId++) { string stockCode = stockCodeList[stockCodeId].ToString(); DataTable testRetsultTbl = CreateDataTable(timeRangeList, strategyList); common.controls.baseDataGridView resultGrid = CreateResultGrid(stockCode, testRetsultTbl); for (int colId = 0; colId < timeRangeList.Count; colId++) { try { progressBar.Value++; Application.DoEvents(); this.ShowReccount(progressBar.Value.ToString() + "/" + progressBar.Maximum.ToString()); AppTypes.TimeRanges timeRange = AppTypes.TimeRangeFromCode(timeRangeList[colId]); application.AnalysisData analysisData = new application.AnalysisData(timeRange, timeScaleCb.myValue, stockCode, commonClass.DataAccessMode.WebService); for (int rowId = 0; rowId < strategyList.Length; rowId++) { testRetsultTbl.Rows[rowId][colId + 1] = 0; //Analysis cached data so we MUST clear cache to ensure the system run correctly application.Strategy.Data.ClearCache(); application.Strategy.Data.TradePoints advices = application.Strategy.Libs.Analysis(analysisData, strategyList[rowId]); if (advices != null) { testRetsultTbl.Rows[rowId][colId + 1] = application.Strategy.Libs.EstimateTrading_Profit(analysisData, application.Strategy.Libs.ToTradePointInfo(advices), estimateOption); } } } catch (Exception er) { this.WriteError(stockCodeList[stockCodeId] + " : " + timeRangeList[colId] + " : " + strategyList[colId], er.Message); //this.ShowError(er); } } } }
private void DoBackTestUseDB() { this.myValueType = ValueTypes.Amount; this.Amount2PercentDenominator = Settings.sysStockTotalCapAmt; StringCollection strategyList = strategyClb.myCheckedValues; StringCollection stockCodeList = codeSelectLb.myValues; DataTable testRetsultTbl = CreateEstimateTbl(strategyList); SetDataGrid(resultDataGrid, testRetsultTbl); progressBar.Value = 0; progressBar.Minimum = 0; progressBar.Maximum = stockCodeList.Count; EstimateOptions estOptions = new EstimateOptions(); for (int rowId = 0; rowId < stockCodeList.Count; rowId++) { application.AnalysisData analysisData = new application.AnalysisData(periodicityEd.myTimeRange, periodicityEd.myTimeScale, stockCodeList[rowId], commonClass.DataAccessMode.WebService); DataRow row = testRetsultTbl.Rows.Add(stockCodeList[rowId]); for (int colId = 0; colId < strategyList.Count; colId++) { try { //Analysis cached data so we MUST clear cache to ensure the system run correctly application.Strategy.Data.ClearCache(); application.Strategy.Data.TradePoints advices = application.Strategy.Libs.Analysis(analysisData, strategyList[colId]); if (advices != null) { row[colId + 1] = application.Strategy.Libs.EstimateTrading_Profit(analysisData, application.Strategy.Libs.ToTradePointInfo(advices), estOptions); } else { row[colId + 1] = 0; } } catch (Exception er) { this.WriteError(stockCodeList[rowId] + " : " + strategyList[colId], er.Message); this.ShowError(er); } } progressBar.Value++; this.ShowReccount(progressBar.Value.ToString() + "/" + progressBar.Maximum.ToString()); Application.DoEvents(); } SetEstimateDataGrid(application.Strategy.Libs.GetStrategyStats(testRetsultTbl)); }
/// <summary> /// /// </summary> protected void PlotStrategyTradepoints(application.Strategy.Data.TradePoints tradePoints, baseClass.controls.graphPanel toPanel) { ClearStrategyTradepoints(toPanel); Charts.DrawCurve[] curveList = myCurveList.CurveInPane(toPanel.Name); if (curveList.Length == 0) { return; } CurveItem curveItem = curveList[0].Curve; TradePointInfo tradePointInfo; for (int idx = 0; idx < tradePoints.Count; idx++) { tradePointInfo = (TradePointInfo)tradePoints[idx]; if (!tradePointInfo.isValid) { continue; } TextObj obj = new TextObj(); obj.FontSpec.Size = Settings.sysTradePointMarkerFontSize; obj.FontSpec.IsBold = true; obj.FontSpec.Border.IsVisible = true; obj.FontSpec.Fill.IsVisible = true; obj.FontSpec.Fill.Color = Settings.sysTradePointMarkerColorBG; switch (toPanel.myGraphObj.myViewportState.myAxisType) { case Charts.AxisType.DateAsOrdinal: obj.Location.X = tradePointInfo.DataIdx + 1; break; default: obj.Location.X = curveItem.Points[tradePointInfo.DataIdx].X; break; } obj.Location.Y = curveItem.Points[tradePointInfo.DataIdx].Y; obj.Location.CoordinateFrame = CoordType.AxisXYScale; obj.Location.AlignH = AlignH.Center; switch (tradePointInfo.TradeAction) { case AppTypes.TradeActions.Buy: case AppTypes.TradeActions.Accumulate: obj.Text = Settings.sysTradePointMarkeBUY; obj.FontSpec.FontColor = Settings.sysTradePointMarkerColorBUY; break; case AppTypes.TradeActions.Sell: case AppTypes.TradeActions.ClearAll: obj.Text = Settings.sysTradePointMarkerSELL; obj.FontSpec.FontColor = Settings.sysTradePointMarkerColorSELL; break; default: obj.Text = Settings.sysTradePointMarkerOTHER; obj.FontSpec.FontColor = Settings.sysTradePointMarkerColorOTHER; break; } toPanel.myGraphObj.myGraphPane.GraphObjList.Add(obj); } toPanel.myGraphObj.UpdateChart(); }
//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.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); } 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.Data.ClearCache(); application.Strategy.Data.TradePoints advices = application.Strategy.Libs.Analysis(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); }
private void DoScreeningDB() { decimal weight = 0; StringCollection stockCodeList = stockCodeLb.myValues; StringCollection strategyList = new StringCollection(); for (int idx = 0; idx < tmpDS.screeningCriteria.Count; idx++) { if (tmpDS.screeningCriteria[idx].code != "" && tmpDS.screeningCriteria[idx].selected) { if (strategyList.Contains(tmpDS.screeningCriteria[idx].code)) { continue; } strategyList.Add(tmpDS.screeningCriteria[idx].code); } } DataTable testRetsultTbl = CreateDataTable(strategyList); SetDataGrid(resultDataGrid, testRetsultTbl); progressBar.Value = 0; progressBar.Minimum = 0; progressBar.Maximum = stockCodeList.Count; data.tmpDS.stockCodeRow stockCodeRow; bool fMatched = false; for (int rowId = 0; rowId < stockCodeList.Count; rowId++) { fMatched = false; stockCodeRow = DataAccess.Libs.myStockCodeTbl.FindBycode(stockCodeList[rowId]); if (stockCodeRow == null) { continue; } DataRow row = testRetsultTbl.NewRow(); row[0] = stockCodeList[rowId]; application.AnalysisData analysisData = new application.AnalysisData(timeRangeCb.myValue, timeScaleCb.myValue, stockCodeRow.code, commonClass.DataAccessMode.WebService); for (int colId = 0; colId < strategyList.Count; colId++) { try { //Analysis cached data so we MUST clear cache to ensure the system run correctly application.Strategy.Data.ClearCache(); application.Strategy.Data.TradePoints tradePoints = application.Strategy.Libs.Analysis(analysisData, strategyList[colId]); // BusinessInfo.Weight value is used as estimation value. The higher value, the better chance to match user need. if (tradePoints != null && tradePoints.Count > 0) { weight = (decimal)(tradePoints[tradePoints.Count - 1] as TradePointInfo).BusinessInfo.Weight; DataView criteriaView = new DataView(tmpDS.screeningCriteria); criteriaView.RowFilter = tmpDS.screeningCriteria.codeColumn + "='" + strategyList[colId] + "' AND " + tmpDS.screeningCriteria.selectedColumn + "=1"; Data.tmpDataSet.screeningCriteriaRow criteriaRow; // If there is more than one criteria for the same code, // matching one criteria is viewed as MATCHED , as OR operaror. for (int idx = 0; idx < criteriaView.Count; idx++) { criteriaRow = (Data.tmpDataSet.screeningCriteriaRow)criteriaView[idx].Row; if (weight < criteriaRow.min || weight > criteriaRow.max) { continue; } row[colId + 1] = weight; fMatched = true; break; } } } catch (Exception er) { this.WriteError(stockCodeList[rowId] + " : " + strategyList[colId], er.Message); this.ShowError(er); } } if (fMatched) { testRetsultTbl.Rows.Add(row); } progressBar.Value++; this.ShowReccount(progressBar.Value.ToString() + "/" + progressBar.Maximum); Application.DoEvents(); } this.ShowReccount(resultDataGrid.Rows.Count); }