public static List <DateSelectItem> ToDaySelectItemList(List <SelectItem> selItems, List <DateRange> dateRangeList) { List <DateSelectItem> retList = new List <DateSelectItem>(); List <int> dateList = Utils.TraverTimeDay(dateRangeList); dateList.Reverse(); foreach (int date in dateList) { if (!Utils.IsTradeDay(date)) { continue; } DateSelectItem item = new DateSelectItem(); item.date_ = date; var rawitems = SelectResult.OfDate(date, selItems, true); Dictionary <String, int> uniqueItemDict = new Dictionary <String, int>(); item.selItems_ = new List <SelectItem>(); foreach (var ritem in rawitems) { if (!uniqueItemDict.ContainsKey(ritem.code_)) { item.selItems_.Add(ritem); uniqueItemDict[ritem.code_] = 0; } } item.goodSampleSelItems_ = GetGoodSampleSelectItems(item.selItems_); retList.Add(item); } return(retList); }
public static HistoryData GetHistoryData(List <DateSelectItem> dateItems, int iStartIndex, int nCount, RunMode runMode) { List <SelectItem> allItems = new List <SelectItem>(); for (int i = 0; i < nCount; i++) { if (iStartIndex + i >= dateItems.Count) { break; } DateSelectItem dayData = dateItems[iStartIndex + i]; allItems.AddRange(dayData.selItems_); } HistoryData data = new HistoryData(); data.backBonusValue_ = GetBackBonus(allItems); for (int i = 0; i < allItems.Count; ++i) { SelectItem item = allItems[i]; var bonus = item.getColumnVal("bonus"); if (bonus == "") { continue; } data.nHoldStockDays_ += Utils.ToType <int>(item.getColumnVal("tradespan")); float bonusValue = Utils.GetBonusValue(bonus); data.allBonusValue_ += bonusValue; } allItems.Clear(); for (int i = 0; i < nCount; i++) { if (iStartIndex + i >= dateItems.Count) { break; } DateSelectItem dayData = dateItems[iStartIndex + i]; allItems.AddRange(dayData.goodSampleSelItems_); } data.gbackBonusValue_ = GetBackBonus(allItems); for (int i = 0; i < allItems.Count; ++i) { SelectItem item = allItems[i]; var bonus = item.getColumnVal("bonus"); var strNsh = item.getColumnVal("nsh"); if (bonus == "" || strNsh == "") { continue; } data.nGoodSampleHoldStockDays_ += Utils.ToType <int>(item.getColumnVal("tradespan")); float bonusValue = Utils.GetBonusValue(bonus); data.allGoodSampleBonusValue_ += bonusValue; float nsh = Utils.GetBonusValue(strNsh); if (nsh > 0.5) { data.nPlusCount_++; } else if (nsh < -1.5) { data.nMinusCount_++; if (nsh < -0.095) { data.nDeadCount_++; } } else if (bonusValue < 0.2) { data.nPartialMinusCount_++; } } data.nDayCount_ = iStartIndex + nCount - 1 >= dateItems.Count ? dateItems.Count - iStartIndex : nCount; int date0 = dateItems[iStartIndex].date_; int date1 = dateItems[iStartIndex + data.nDayCount_ - 1].date_; data.startDate_ = Math.Min(date0, date1); data.endDate_ = Math.Max(date0, date1); for (int i = 0; i < nCount; i++) { if (iStartIndex + i >= dateItems.Count) { break; } DateSelectItem dayData = dateItems[iStartIndex + i]; foreach (var selItem in dayData.selItems_) { var bonus = selItem.getColumnVal("bonus"); if (bonus == "") { continue; } float bounusValue = Utils.GetBonusValue(bonus); var envBonus = selItem.getColumnVal("envbonus"); if (envBonus != "") { float envBonusValue = Utils.GetBonusValue(envBonus); if (envBonusValue < 0) { ++data.nAntiEnvCheckCount_; if (bounusValue > 0) { ++data.nAntiEnvCount_; } } } } data.nGoodSampleSelectCount_ += dayData.goodSampleSelItems_.Count; data.nAllSampleSelectCount_ += dayData.selItems_.Count; data.nDayMaxSelectCount_ = Math.Max(data.nDayMaxSelectCount_, dayData.selItems_.Count); foreach (var selItem in dayData.goodSampleSelItems_) { var bonus = selItem.getColumnVal("bonus"); if (bonus == "") { continue; } float bounusValue = Utils.GetBonusValue(bonus); if (bounusValue > 0) { ++data.nSelectSucCount_; } } if (runMode == RunMode.RM_Asset) { var buyItem = dayData.getBuyItem(); if (buyItem != null) { var bonus = buyItem.getColumnVal("bonus"); if (bonus != "") { float bounusValue = Utils.GetBonusValue(bonus); if (bounusValue > 0) { data.nTradeSucCount_++; } data.tradeBonusValue_ += bounusValue; } ++data.nTradeCount_; } float dayAllBonusValue = 0; foreach (var item in dayData.selItems_) { var bonus = item.getColumnVal("bonus"); if (bonus != "") { float bonusValue = Utils.GetBonusValue(bonus); dayAllBonusValue += bonusValue; } } if (dayAllBonusValue > 0) { data.nTradeAllSucCount_++; } } else { if (dayData.selItems_.Count > 0) { float dayAllBonusValue = 0; foreach (var item in dayData.goodSampleSelItems_) { var bonus = item.getColumnVal("bonus"); if (bonus != "") { float bonusValue = Utils.GetBonusValue(bonus); dayAllBonusValue += bonusValue; } } if (dayAllBonusValue > 0) { data.nTradeSucCount_++; data.nTradeAllSucCount_++; } data.tradeBonusValue_ += dayAllBonusValue / dayData.goodSampleSelItems_.Count; if (dayData.goodSampleSelItems_.Count > 0) { data.nTradeCount_++; } } } } data.refrestStatistics(); return(data); }