Dictionary <String, String> IStrategy.select(DataStoreHelper dsh, SelectMode selectMode, ref String sigInfo) { IStrategy stra = (IStrategy)this; var zf = dsh.Ref(Info.ZF); if (zf > 0.095 || zf < -0.095) { return(null); } if (dsh.birthCount() > 50) { return(null); } int iOpenUpStopIndex = -1; int nDayCount = 0; for (int i = dsh.dataList_.Count - 2; i > 0; --i) { if (dsh.ds_.Ref(Info.ZF, dsh.dataList_, i) < 0.095) { iOpenUpStopIndex = i - dsh.iIndex_; break; } ++nDayCount; } if (nDayCount < 3) { return(null); } if (iOpenUpStopIndex == -1) { return(null); } int iTopMostIndex = -1; iTopMostIndex = iOpenUpStopIndex + 1; float topMostSimpleC = Math.Max(dsh.Ref(Info.O, iTopMostIndex), dsh.Ref(Info.C, iTopMostIndex)); int iSerarchBeginIndex = -1; for (int i = iOpenUpStopIndex; i > 0; --i) { float curTop = Math.Max(dsh.Ref(Info.O, i), dsh.Ref(Info.C, i)); if (curTop > topMostSimpleC) { topMostSimpleC = curTop; iTopMostIndex = i; } if ( (dsh.Ref(Info.C, i) < dsh.Ref(Info.O, i)) && dsh.MaxCO(i) > dsh.MaxCO(i - 1)) { iSerarchBeginIndex = i; break; } } if (iTopMostIndex == -1 || iSerarchBeginIndex == -1) { return(null); } for (int i = 3; i >= 1; --i) { bool bContinue = true; if (dsh.Ref(Info.ZF, iTopMostIndex - i) > 0.095) { for (int j = iTopMostIndex - i; j > 0; --j) { if (dsh.Ref(Info.ZF, j) < 0) { bContinue = false; break; } float curTop = Math.Max(dsh.Ref(Info.O, j), dsh.Ref(Info.C, j)); if (curTop > topMostSimpleC) { topMostSimpleC = curTop; iTopMostIndex = iTopMostIndex - i; } } } if (!bContinue) { break; } } int iSearchIndex2 = iSerarchBeginIndex; float topMostC = topMostSimpleC; sigInfo = dsh.Date(iTopMostIndex).ToString(); int iStruggleUpIndex = -1; float maxUpZF = float.MinValue; for (int i = iSearchIndex2; i >= 0; --i) { if (iStruggleUpIndex == -1) { if (dsh.Ref(Info.C, i + 2) < topMostC && (dsh.Ref(Info.C, i + 1) - topMostC) / topMostC > 0) { iStruggleUpIndex = i; } } float curZF = (dsh.Ref(Info.C, i) - topMostC) / topMostC; maxUpZF = Math.Max(curZF, maxUpZF); } if (iStruggleUpIndex == -1) { return(null); } return(selectForHStrugle(dsh, topMostC, maxUpZF)); }