序语
最近在开发一个股票项目中美股的盘前盘后榜模块,遇到了一个坑,因此在此记录一下。
美股的股市是有四个阶段的,分别是盘前——盘中——盘后——收盘。而我做的功能则是负责展示股票盘前与盘后的一些数据。其中有两个字段:盘前涨跌额、盘后涨跌额。这两个字段的计算逻辑着实把我绕晕了。
详细过程
盘前涨跌额 = 盘前价 - 收盘价
盘后涨跌额 = 盘后价 - 收盘价
看起来很简单的一个公式,却让我踩了不少坑。主要有以下几条原因:
- 在新一天的数据未产生之前,展示的是昨天的数据。产生之后,展示最新的数据。
- 展示昨天数据的时候,昨收其实是指的是前天的收盘价。
- 盘前与盘后计算公式中的收盘价,并不是同一个收盘价。
由于股票行业我以前没怎么接触,因此为了搞清这其中的奥秘,着实花了不少功夫,通过整理了一份文档,才摸清。
dynamicStatics:动态数据。
dynamic:动态行情。
preOrderDynamic:盘前数据。
postOrderDynamic:盘后数据。
每一种数据结构中都有字段为tradingDay,后文称作交易日。
昨收 = dynamicStastics.preClosePrice = 动态数据的昨收。
最新价 = dynamic.lastPrice = 动态行情的最新价。
盘前价 = preOrderDynamic.lastPrice = 盘前数据的最新价。
盘后价 = postOrderDynamic.lastPrice = 盘后数据的最新价。
美东3.26日,0:00~4:00,早间收盘。盘前涨跌额=3.25盘前价-3.24收盘价。盘后涨跌额=3.25盘后价-3.25收盘价。
此时:四种数据的交易日都为3.25日。
3.24的收盘价=动态数据的preClosePrice。3.25的收盘价为动态行情的lastPrice。
盘前涨跌额:preOrderDynamic.lastPrice - dynamicStastics.preClosePrice
盘后涨跌额:postOrderDynamic.lastPrice - dynamic.lastPrice
美东3.26日,4:00~9:30,盘前。盘前涨跌额=3.26盘前价-3.25收盘价。盘后涨跌额=3.25盘后价-3.25收盘价。
此时:盘前数据的交易日为3.26日,其余为3.25日。
3.25的收盘价为动态行情的lastPrice。
盘前涨跌额:preOrderDynamic.lastPrice - dynamic.lastPrice
盘后涨跌额:postOrderDynamic.lastPrice - dynamic.lastPrice
美东3.26日,9:30~16:00,盘中。盘前涨跌额=3.26盘前价-3.25收盘价。盘后涨跌额=3.25盘后价-3.25收盘价。
此时:盘后数据为3.25日,其余为3.26日。
3.25的收盘价=动态数据的preClosePrice。
盘前涨跌额:preOrderDynamic.lastPrice - dynamicStastics.preClosePrice
盘后涨跌额:postOrderDynamic.lastPrice - dynamicStastics.preClosePrice
美东3.26日,16:00~20:00,盘后。盘前涨跌额=3.26盘前价-3.25收盘价。盘后涨跌额=3.26盘后价-3.26收盘价。
此时:四种数据的交易日都为3。26日
3.25的收盘价=动态数据的preClosePrice。3.26的收盘价为动态行情的lastPrice。
盘前涨跌额:preOrderDynamic.lastPrice - dynamicStastics.preClosePrice
盘后涨跌额:postOrderDynamic.lastPrice - dynamic.lastPrice
美东3.26日,20:00~24:00,晚间收盘。盘前涨跌额=3.26盘前价-3.25收盘价。盘后涨跌额=3.26盘后价-3.26收盘价。
此时:四种数据的交易日都为3。26日
3.25的收盘价=动态数据的preClosePrice。3.26的收盘价为动态行情的lastPrice。
盘前涨跌额:preOrderDynamic.lastPrice - dynamicStastics.preClosePrice
盘后涨跌额:postOrderDynamic.lastPrice - dynamic.lastPrice
美东3.27日,0:00~4:00,早间收盘。盘前涨跌额=3.26盘前价-3.25收盘价。盘后涨跌额=3.26盘后价-3.26收盘价。
此时:四种数据的交易日都为3.26日。
3.25的收盘价=动态数据的preClosePrice。3.26的收盘价为动态行情的lastPrice。
盘前涨跌额:preOrderDynamic.lastPrice - dynamicStastics.preClosePrice
盘后涨跌额:postOrderDynamic.lastPrice - dynamic.lastPrice
将以上结果整合一下,
盘前涨跌额有两种情况。1⃣️盘前,2⃣️非盘前。
1⃣️:preOrderDynamic.lastPrice - dynamic.lastPrice
2⃣️:preOrderDynamic.lastPrice - dynamicStastics.preClosePrice
盘后涨跌额有两种情况。1⃣️盘中,2⃣️非盘中。
1⃣️:postOrderDynamic.lastPrice - dynamicStastics.preClosePrice
2⃣️:postOrderDynamic.lastPrice - dynamic.lastPrice
总结
归纳法虽然比较繁琐,但是扎实。经过这次经历,我意识到了实现一个需求之前,必须对其中的数据进行完整的分析。股票行业的数据十分敏感且复杂,不再是像其他项目,对数据不需要做过多的处理。因此将自己的感悟和过程在这里记录一笔,以便时时警醒自己。