首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算该股票开盘价与收盘价的滚动差值?

如何计算该股票开盘价与收盘价的滚动差值?
EN

Stack Overflow用户
提问于 2015-12-29 07:45:29
回答 1查看 1K关注 0票数 0

我有30多年的股票数据。我想做的是用rolling_apply().计算股票在一年中是涨是跌。

频率为1天,窗为252,min_period为2天。

由于大量的数据,我试图避免一个for循环,因为它大大减慢了执行速度,熊猫似乎是最好的选择。

这里是样本数据的图像。

数据

例如,我想要实现的是,在输入日期(如2015-12-22 )之后,滚动函数应该计算从2015年开始的年份--12-22到2014-12-22,值open_price(在2015-12-2 )-- close_price( 2014-12-22 )的增加或减少,然后将从2014-12-22到2013-12-22的数值返回到1997年。然后在2015-12-23,一直到2015年-12-31,也要这样做。

回报的价值应该是股票上涨的年数。例如,给出的第一个日期(比如2015年12月-22日)的开盘价为663.xx,而在2014-12-22年收盘价为660.00,,股票上涨了,因此增加了一个计数器。然后,如果股票从2014-12-22上升到2013-12-22,那么它应该增加计数器,直到数据达到最后一年,也就是说,如果有30年的时间,并且该数据上涨了14,那么它就应该转到其他日期,并做同样的事情。

代码语言:javascript
运行
复制
import pandas as pd
import numpy  as np

Data = pd.io.parsers.read_csv( "amzn.csv" ) # Reading data from the csv

def append_date( Data ):                    # Appending year mont and day column
    data = Data
    data['date'] = pd.to_datetime( data.Date )
    data['year'], data['month'], data['day'] = data['date'].dt.year, \
                                               data['date'].dt.month, \
                                               data['date'].dt.day
    num_of_yrs   = np.size( np.where( ( np.unique( data['year'].values ))))
    data.ix[:,0] = pd.to_datetime( data.ix[:,0] )
    del data['date']
    return data, num_of_yrs

Data_datetime, num_of_years= a ppend_date( Data )

        Date        Open        High         Low       Close   Volume  \
     0 2015-12-23  666.500000  666.599976  656.630005  663.700012  2714900   
     1 2015-12-22  666.830017  668.489990  659.260010  663.150024  2664000   
     2 2015-12-21  668.500000  669.900024  658.929993  664.510010  3197500   
     3 2015-12-18  668.650024  676.840027  664.130005  664.140015  6765900   
     4 2015-12-17  680.000000  682.500000  670.650024  670.650024  3663500   

   Adj Close  year  month  day  
0  663.700012  2015     12   23  
1  663.150024  2015     12   22  
2  664.510010  2015     12   21  
3  664.140015  2015     12   18  
4  670.650024  2015     12   17  
EN

回答 1

Stack Overflow用户

发布于 2015-12-29 11:09:28

这就是你想做的吗?

代码语言:javascript
运行
复制
import pandas as pd

def up_over_period(s):
    """Check if most recent value in Series is greater than the earliest.
    """
    return s[0] > s[-1]

#Reading data from the csv
df = pd.read_csv("amzn.csv")

period = 253

df['UpOnYear'] = pd.rolling_apply(
    df['Close'], 
    window=period, 
    func=up_over_period, 
    )

编辑回应评论

代码语言:javascript
运行
复制
s = pd.rolling_apply(
    df['Close'], 
    window=period, 
    func=up_over_period, 
    ).shift(-period + 1)[::-1]

s = (s.groupby((s != s.shift()).cumsum()).cumsum() / (period - 1)).apply(math.ceil)

df['ConsecPeriodsUp'] = s
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34506717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档