Dictionary <String, String> selectFor(DataStoreHelper dsh, SelectMode selectMode, ref String sigInfo, int iIndex, out bool isTwoDownMode) { isTwoDownMode = false; var zf = dsh.Ref(Info.ZF, iIndex); if (zf > -0.05 || zf < -0.095) { return(null); } if (!dsh.IsRealDown()) { return(null); } if (zf < -0.09 && dsh.Ref(Info.ZF, iIndex + 1) < -0.08) { return(null); } int iSigDateIndex = -1; int nUStopCount = 0; int nDStopCount = 0; float sigDateVol = 0; float sigZF = 0; int nMeetMinus5PercentCount = 0; int iFirstMinus5PercentIndex = -1; int iTwoMinus5PercentIndex = -1; int nPlus5PercentCount = 0; bool bDanger = false; for (int i = iIndex + 1; i < SearchDayCount; ++i) { var curOf = dsh.Ref(Info.OF, i); var curHf = dsh.Ref(Info.HF, i); var curZf = dsh.Ref(Info.ZF, i); var curLf = dsh.Ref(Info.LF, i); var curPreZf = dsh.Ref(Info.ZF, i + 1); var vol = dsh.Ref(Info.V, i); if (dsh.IsUpStopEveryDay(EveryUpCount, i)) { iSigDateIndex = i; sigDateVol = vol; sigZF = curZf; break; } if (curHf > 0.095 && curZf < 0) { bDanger = true; } } for (int i = iSigDateIndex + EveryUpCount; i < iSigDateIndex + EveryUpCount + SearchDayCount; i++) { if (dsh.IsUpStopEveryDay(EveryUpCount, i)) { return(null); } } for (int i = iSigDateIndex - 1; i > iIndex; --i) { var curOf = dsh.Ref(Info.OF, i); var curHf = dsh.Ref(Info.HF, i); var curZf = dsh.Ref(Info.ZF, i); var curLf = dsh.Ref(Info.LF, i); var curPreZf = dsh.Ref(Info.ZF, i + 1); var vol = dsh.Ref(Info.V, i); if (curZf > 0.095) { nUStopCount++; } else if (curZf < -0.095) { nDStopCount++; } if (curZf < -0.05) { if (iFirstMinus5PercentIndex == -1) { iFirstMinus5PercentIndex = i; } ++nMeetMinus5PercentCount; if (nMeetMinus5PercentCount == 2) { iTwoMinus5PercentIndex = i; } } if (curZf > 0.06) { ++nPlus5PercentCount; } } if (iSigDateIndex == -1) { return(null); } int orgThreshold = 3; int nThreshold = orgThreshold; if (iTwoMinus5PercentIndex != -1) { bool bHasUp = false; for (int i = iIndex + 1; i < iTwoMinus5PercentIndex; i++) { if (dsh.Ref(Info.ZF, i) > 0.01) { bHasUp = true; break; } } if (!bHasUp) { nThreshold++; } } if (nThreshold == orgThreshold) { if (dsh.Ref(Info.ZF, 1 + iIndex) < 0 && dsh.Ref(Info.ZF, 2 + iIndex) < 0) { nThreshold++; } } // if (nDStopCount > 1) // { // return null; // } nThreshold += nPlus5PercentCount; nThreshold += nDStopCount; if (dsh.UpShadow(1) > 0.04 && dsh.Ref(Info.ZF, 1) < 0 && dsh.Ref(Info.ZF) > -0.08) { ++nThreshold; } // nThreshold += (int)Math.Ceiling(nPlus5PercentCount*0.5); if (nMeetMinus5PercentCount < nThreshold - 1) { return(null); } if (nMeetMinus5PercentCount > nThreshold - 1) { if (dsh.Ref(Info.ZF, iIndex + 1) > 0) { return(null); } } var preZF = dsh.Ref(Info.ZF, iIndex + 1); if (preZF > 0.02) { isTwoDownMode = true; return(null); } if (dsh.AccZF(3, iIndex + 1) > 0.02 && dsh.EveryUp(iIndex + 1) >= 3) { isTwoDownMode = true; } if (bDanger) { return(null); } // if (dsh.Ref(Info.C, iIndex) > dsh.Ref(Info.O, iIndex)) // { // return null; // } var ret = new Dictionary <String, String>(); ret[String.Format("Threshold/{0}", nThreshold)] = ""; ret[String.Format("Meet/{0}", nMeetMinus5PercentCount == nThreshold - 1 ? "1" : "0")] = ""; return(ret); }
Dictionary <String, String> IStrategy.select(DataStoreHelper dsh, SelectMode selectMode, ref String sigInfo) { var zf = dsh.Ref(Info.ZF); if (zf > 0.095 || zf < -0.095) { return(null); } if (zf < 0.02 || zf > 0.03) { return(null); } if (dsh.IsLikeSTStop()) { return(null); } if (dsh.Ref(Info.OF) < -0.015) { return(null); } if (dsh.EveryDown(1) >= 3) { return(null); } if (dsh.Ref(Info.ZF, 1) > -0.02 || dsh.Ref(Info.ZF, 1) < -0.05) { return(null); } if (dsh.UpShadow() > 0.04) { return(null); } if (dsh.Ref(Info.CO) / dsh.Ref(Info.C, 1) < 0.01) { return(null); } if (dsh.AccZF(8) > -0.1) { return(null); } if (dsh.AccZF(2) > 0) { return(null); } if (dsh.HH(Info.V, 8) == 0) { return(null); } if (dsh.DownShadow() < -0.04) { return(null); } if (dsh.Ref(Info.ZF, 2) < -0.01) { return(null); } if (!dsh.IsReal()) { return(null); } for (int i = 1; i < 8; ++i) { var curZF = dsh.Ref(Info.ZF, i); var curOF = dsh.Ref(Info.OF, i); if (curZF < -0.095 || curZF > 0.095) { return(null); } if (curOF > 0.04 && dsh.IsGreen(i)) { return(null); } if (dsh.IsUpStopEveryDay(3, i)) { return(null); } } if (!selectBySZ(dsh)) { return(null); } return(EmptyRateItemButSel); }