计算SQL中的每日股票下跌

时间:2018-02-11 16:00:13

标签: 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/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%

如何计算每只股票的每日下跌?

1 个答案:

答案 0 :(得分:1)

这听起来像一个窗口功能:

[]