/// <summary> /// 计算一个股票的 BOLL突破上轨、BOLL突破中轨 /// </summary> /// <param name="lstRet"></param> private static void CalcOneStockBool(List <RSIResult> lstRet, int param) { for (int i = 2; i < lstRet.Count; i++) { if (i < param - 1) { continue; } RSIResult cur16 = lstRet[i]; RSIResult pre15 = lstRet[i - 1]; RSIResult pre14 = lstRet[i - 2]; //RSI金叉 if (pre15.RSI == pre15.RSI6) { cur16.RSIGoldX = (pre14.RSI6 <pre14.RSI12 && cur16.RSI6> cur16.RSI12); } else { cur16.RSIGoldX = (pre15.RSI6 <pre15.RSI12 && cur16.RSI6> cur16.RSI12); } //RSI死叉 if (pre15.RSI6 == pre15.RSI12) { cur16.RSIBlackX = (pre14.RSI6 > pre14.RSI12 && cur16.RSI6 < cur16.RSI12); } else { cur16.RSIBlackX = (pre15.RSI6 > pre15.RSI12 && cur16.RSI6 < cur16.RSI12); } } }
/// <summary> /// 计算一个股票的RSI /// </summary> /// <param name="lstRet">计算数据</param> /// <param name="param">入参</param> public static void CalcOneStock(List <RSIResult> lstRet, int param = 14) { for (int i = 0; i < lstRet.Count; i++) { RSIResult cur = lstRet[i]; if (i < 5) { cur.RSI6 = 100; } else { var lst6 = lstRet.Skip(i - 5).Take(6).ToList(); cur.RSI6 = CalcRsi(lst6); } if (i < 11) { cur.RSI12 = 100; } else { var lst12 = lstRet.Skip(i - 11).Take(12).ToList(); cur.RSI12 = CalcRsi(lst12); } if (i < param - 1) { cur.RSI = 100; } else { var lst = lstRet.Skip(i - param + 1).Take(param).ToList(); cur.RSI = CalcRsi(lst); } } CalcOneStockBool(lstRet, param); }