首页 涨跌幅复权与前复权
文章
取消

涨跌幅复权与前复权

以前我总结过 前复权,现在简单拓展一下其应用。

涨跌幅复权因子只要被记录下来,就无需变动 —— 或者具体地说,新一天的复权因子只与前一天复权因子和当日前收盘价、当日收盘价有关。 这对更新数据十分友好,因为只需从数据库拉取最新一条数据(即前一个交易日的数据),然后计算当天数据就可以入库,完全不需要获取大量数据,也不需要重算任何数据。

日期前收盘价收盘价复权因子(及计算方式)前复权价
上市首日$P_1$$C_1$$f_1 = \frac{C_1}{P_1}$$m \times f_1$
上市次日$P_2$$C_2$$f_2 = f_1 \times \frac{C_2}{P_2}$$m \times f_1$
上月末$P_{n-1}$$C_{n-1}$$f_{n-1} = f_{n-2} \times \frac{C_{n-1}}{P_{n-1}}$$m \times f_{n-1}$
本月初$P_n$$C_n$$f_n = f_{n-1} \times \frac{C_n}{P_n}$$m \times f_n$
最新日期$P_m$$C_m$$f_m$$m \times f_m$

其中系数 $m$ 为

\[m = \frac{C_m}{f_m}\]

上市首日的前收盘价为当日的收盘价,即 $P_1 == C_1, f_1 == 1$。

最新日期的前复权价为当日的收盘价,即 $m \times f_m == C_m$。

此外,涨跌幅复权容易计算涨跌幅数据,比如计算最新日期的月涨跌幅,只需取“最新日期”和“本月初”两行数据,这降低了获取数据的难度:

\[\text{最新月涨幅} = \text{最新日期的前复权价 / 上月末的前复权价}\]

\[\text{最新月涨幅} = \frac{C_m}{m \times f_{n-1}} = \frac{m \times f_m}{m \times f_{n-1}} = \frac{f_m}{f_{n-1}} = \frac{f_m}{\frac{f_n}{\frac{C_n}{P_n}}} = \frac{f_m}{f_n} \times \frac{C_n}{P_n}\]

相应的 Clickhouse SQL 语句(注意,以下代码计算所有股票的所有历史月涨幅):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    code,
    toYYYYMM(date) AS m,
    ((LAST_VALUE(factor) / FIRST_VALUE(factor)) * FIRST_VALUE(close)) / FIRST_VALUE(preclose) AS mgrowth
FROM rustdx.factor
GROUP BY
    code,
    m
ORDER BY
    code ASC,
    m DESC

┌─code───┬──────m─┬─────────────mgrowth─┐
 000001  202303   0.9092888050051663 
 000001  202302   0.9192795159024402 
 000001  202301    1.139057746574816 
...

同样地,你可以轻易计算任何周期的涨跌幅。

本文由作者按照 CC BY 4.0 进行授权

【R 语言】技巧整理

在 Windows 下使用 NeoVim