同花顺的RSI是移动平滑计算,折腾我半天了。为了算当前值,一定要把前面的值记下来。真麻烦
///LC := REF(CLOSE,1);
/// 当日上涨平均数 = 前一日涨幅平均数*5/6 + 当日涨幅/6 (若某日下跌时,则当日涨幅记为0)
/// RSI$1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;
public static double CalculateRSI(List<StockData> stockDataList, int period = 6)
{
if (stockDataList == null || stockDataList.Count < period)
throw new ArgumentException("Not enough data points to calculate RSI.");
int 前面的时间段 = period - 1;
StockData 今天的 = stockDataList[stockDataList.Count - 1];
StockData 前一天的 = stockDataList[stockDataList.Count - 2];
double 今天的涨 = Math.Round(Math.Max(0, 今天的.Close - 今天的.Pre_Close), 2);
double 今天的滑动涨 = 今天的.SMAMAX=(前一天的.SMAMAX * 前面的时间段 + 今天的涨)/ period;