python计算股票累计收益率 (sql计算利息和本金)

在保卫了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