在SQL中计算每日库存提取
我有一张股票价格表,我想从中计算提款在SQL中计算每日库存提取,sql,stocks,Sql,Stocks,我有一张股票价格表,我想从中计算提款 Ticker Date price ABC 01/01/13 100.00 ABC 01/02/13 101.50 ABC 01/03/13 99.80 ABC 01/04/13 95.50 ABC 01/05/13 78.00 XYZ 01/01/13 11.50 XYZ 01
Ticker Date price
ABC 01/01/13 100.00
ABC 01/02/13 101.50
ABC 01/03/13 99.80
ABC 01/04/13 95.50
ABC 01/05/13 78.00
XYZ 01/01/13 11.50
XYZ 01/02/13 12.10
XYZ 01/03/13 13.15
XYZ 01/04/13 14.10
XYZ 01/05/13 15.55
我将提款定义为截至该日期(含该日期)的最高价格减去当前价格除以最高价格的差额
以下是每日最高价格和每日支取的情况:
Ticker Date price max drawdown
ABC 01/01/13 100.00 100.00 0.0%
ABC 01/02/13 101.50 101.50 0.0%
ABC 01/03/13 99.80 101.50 1.7%
ABC 01/04/13 95.50 101.50 5.9%
ABC 01/05/13 78.00 101.50 23.2%
XYZ 01/01/13 11.50 11.50 0.0%
XYZ 01/02/13 12.10 12.10 0.0%
XYZ 01/03/13 13.15 17.15 0.0%
XYZ 01/04/13 14.10 14.10 17.8%
XYZ 01/05/13 15.55 15.55 9.3%
我知道如何计算整个数据集的一个最大支取,但我正在努力完善适用于单个股票的最大支取,并将其作为每日支取
;WITH x AS
( SELECT [drop] = ((s.price-e.price)/s.price) *100
FROM [temp] AS s
INNER JOIN [temp] AS e
ON s.[Date] < e.[Date]
AND s.price > e.price
)
SELECT [Largest Drawdown] = MAX([drop]) FROM x;
Largest Drawdown
87.900000000000000
此提取是计算整个数据集ABC的最大价格101.50,以及数据集XYZ=11.50的最低价格,以获得其最大提取87.9%
如何计算每种股票的每日提取额?这听起来像一个窗口函数:
select t.*,
max(t.price) over (partition by ticker order by date) as max_price,
(t.price / max(t.price) over (partition by ticker order by date)) - 1 as ratio
from temp t;
这听起来像一个窗口函数:
select t.*,
max(t.price) over (partition by ticker order by date) as max_price,
(t.price / max(t.price) over (partition by ticker order by date)) - 1 as ratio
from temp t;
用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。@Coding\u Newbie。当一个答案满足你的需要时,你应该考虑接受它。当一个答案满足你的需要时,你应该考虑接受它。