示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        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));
        }
示例#3
0
        /// <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();
        }
示例#4
0
        //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);
        }
示例#5
0
        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);
        }