void fillBonusChart()
        {
            List <BonusRange> bonusRangeList = new List <BonusRange>();

            for (int i = -10; i < 10; i++)
            {
                bonusRangeList.Add(new BonusRange(i, i + 1));
            }
            List <SelectItem> selItems = re_.runMode_ == RunMode.RM_Asset ? re_.buyItems_ : re_.selItems_;

            foreach (var item in selItems)
            {
                var bonus = item.getColumnVal("bonus");
                if (bonus != "")
                {
                    float bonusValue = Utils.GetBonusValue(bonus);
                    int   iIndex     = (int)Math.Floor(bonusValue) + 10;
                    if (iIndex < 0)
                    {
                        iIndex = 0;
                    }
                    else if (iIndex >= bonusRangeList.Count)
                    {
                        iIndex = bonusRangeList.Count - 1;
                    }
                    bonusRangeList[iIndex].nTradeCount_ += 1;
                }
                var nsh = item.getColumnVal("nsh");
                if (nsh != "")
                {
                    float nshValue = Utils.GetBonusValue(nsh);
                    int   iIndex   = (int)Math.Floor(nshValue) + 10;
                    if (iIndex < 0)
                    {
                        iIndex = 0;
                    }
                    else if (iIndex >= bonusRangeList.Count)
                    {
                        iIndex = bonusRangeList.Count - 1;
                    }
                    bonusRangeList[iIndex].nHfCount_ += 1;
                }
                var nsc = item.getColumnVal("nsc");
                if (nsc != "")
                {
                    float nscValue = Utils.GetBonusValue(nsc);
                    int   iIndex   = (int)Math.Floor(nscValue) + 10;
                    if (iIndex < 0)
                    {
                        iIndex = 0;
                    }
                    else if (iIndex >= bonusRangeList.Count)
                    {
                        iIndex = bonusRangeList.Count - 1;
                    }
                    bonusRangeList[iIndex].nCfCount_ += 1;
                }
            }
            SUtils.FillBonusChart(chart_, bonusRangeList);
        }
        public void fillHistoryDataChart()
        {
            if (re_.selItems_.Count == 0)
            {
                return;
            }
            ChartXUnit xUnit;

            selItemsHistoryDataToChart(chart_, re_.selItems_, re_.dateRangeList_, re_.runMode_, out xUnit);
            chart_.Titles[0].Text = chart_.Titles[0].Text + ", " + SUtils.ToUnitName(xUnit) + ", " + re_.getTradeDayCount() + "days";
        }
        void fillRateItemChart()
        {
            if (re_.runMode_ != RunMode.RM_Raw)
            {
                return;
            }
            List <HistoryData> dataList;
            List <String>      rateItemList;

            if (App.asset_.collectRateItemHistory(re_, out strategyRateItemHistoryData_, out dataList, out rateItemList))
            {
                SUtils.FillHistoryDataToChart(chart_, dataList, rateItemList);
            }
        }
        public void selItemsHistoryDataToChart(Chart chart, List <SelectItem> selItems, List <DateRange> dateRangeList, RunMode runMode, out ChartXUnit xUnit)
        {
            List <HistoryData>    dataList = new List <HistoryData>();
            List <DateSelectItem> items    = RegressResult.ToDaySelectItemList(selItems, dateRangeList);

            xUnit = SUtils.DetermineXUnit(items.Count);
            if (items.Count == 0)
            {
                return;
            }
            if (xUnit == ChartXUnit.CXU_Year)
            {
                items.Reverse();
                int startDate        = items[0].date_;
                int endDate          = items[items.Count - 1].date_;
                int startYear        = Utils.Year(startDate);
                int endYear          = Utils.Year(endDate);
                int iSearchStartHint = 0;
                for (int iYear = startYear; iYear <= endYear; iYear++)
                {
                    int iStartIndex = -1;
                    int nDaySpan    = 0;
                    for (int i = iSearchStartHint; i < items.Count; i++)
                    {
                        if (iStartIndex == -1 && Utils.Year(items[i].date_) == iYear)
                        {
                            iStartIndex = i;
                        }
                        if (iStartIndex != -1)
                        {
                            if (Utils.Year(items[i].date_) == iYear)
                            {
                                nDaySpan++;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    iSearchStartHint = iStartIndex + nDaySpan;
                    HistoryData data = StrategyAsset.GetHistoryData(items, iStartIndex, nDaySpan, runMode);
                    dataList.Add(data);
                }
            }
            else
            {
                int nDaySpan    = SUtils.ToDayCount(xUnit);
                int iStartIndex = 0;
                do
                {
                    if (iStartIndex + nDaySpan - 1 > items.Count)
                    {
                        break;
                    }
                    HistoryData data = StrategyAsset.GetHistoryData(items, iStartIndex, nDaySpan, runMode);
                    dataList.Add(data);
                    iStartIndex += nDaySpan;
                } while (iStartIndex < items.Count);
                dataList.Reverse();
            }

            List <String> xDescList = new List <string>();

            foreach (var item in dataList)
            {
                xDescList.Add(SUtils.ToXDesc(xUnit, item.startDate_, item.endDate_));
            }
            SUtils.FillHistoryDataToChart(chart, dataList, xDescList);
            re_.reHistory_ = StrategyAsset.GetHistoryData(items, 0, items.Count, re_.runMode_);
        }