在保卫了3000点后,
A股已经打响了2700点保卫战,
照这个趋势, 2500点保卫战应该也不远了,
那么如何利用sql来计算我们的股票或者基金的收益率?
收益率的计算方式为:
收益率= (今日价格-昨日价格)/ 昨日价格
假如我们有股票价格表:
1. create table stock_price (
2. id int ,
3. stock varchar ( 40 ), // 股票名称
4. price float , // 股票价格
5. date_ date // 日期
6. );
股票价格:
|
id |
stock |
price |
date_ |
|
1 |
ABC |
100 |
2023-01-01 |
|
2 |
ABC |
101.5 |
2023-01-02 |
|
3 |
ABC |
99.8 |
2023-01-03 |
|
4 |
ABC |
95.5 |
2023-01-04 |
|
5 |
ABC |
78 |
2023-01-05 |
|
6 |
XYZ |
11.5 |
2023-01-01 |
|
7 |
XYZ |
12.1 |
2023-01-02 |
|
8 |
XYZ |
13.15 |
2023-01-03 |
|
9 |
XYZ |
14.1 |
2023-01-04 |
|
10 |
XYZ |
15.55 |
2023-01-05 |
那么如何利用sql计算股票收益率?
其中的关键是如何在取一天的价格时, 同时取前一天的价格,
这里我们可以使用lag函数,
lag函数可以获取前一行数据:
1. SELECT stock, date_, price,
2. ((price / lag(price, 1 ) OVER ( PARTITION BY stock ORDER BY date_)) - 1 )* 100 AS daily_return
3. FROM stock_price
4. Order by stock, date_;
lag(price, 1) over (partition by stock order by date_)
意思是取price列的上一行数据,
最终我们可以得到结果:
|
stock |
date_ |
price |
daily_return |
|
ABC |
2023-01-01 |
100 |
null |
|
ABC |
2023-01-02 |
101.5 |
1.4999999999999902 |
|
ABC |
2023-01-03 |
99.8 |
-1.6748768472906406 |
|
ABC |
2023-01-04 |
95.5 |
-4.308617234468937 |
|
ABC |
2023-01-05 |
78 |
-18.324607329842934 |
|
XYZ |
2023-01-01 |
11.5 |
null |
|
XYZ |
2023-01-02 |
12.1 |
5.217391304347818 |
|
XYZ |
2023-01-03 |
13.15 |
8.677685950413228 |
|
XYZ |
2023-01-04 |
14.1 |
7.22433460076044 |
|
XYZ |
2023-01-05 |
15.55 |
10.283687943262422 |