【发布时间】:2016-04-03 01:57:45
【问题描述】:
我有超过 30 年的股票数据。我要做的是使用 rolling_apply() 计算股票在一年中是上涨还是下跌。
频率为 1 天,窗口为 252,min_period 为 2 天。
由于大量数据,我试图避免 for 循环,因为它大大减慢了执行速度,pandas 似乎是最好的选择。
这里是样本数据的图像。
the data
我想要实现的是例如在输入日期(例如 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 strong> 2014 年 12 月 22 日收盘价为660.00,股价上涨,增仓。然后,如果股票从 2014 年 12 月 22 日上涨到 2013 年 12 月 22 日,它应该增加计数器,直到达到数据中的最后一年,即如果有 30 年并且上涨了 14,那么返回的值是 14日期然后它应该滚动到其他日期并执行相同的操作。
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
【问题讨论】:
-
你能发布你的数据框来代替图片吗?
-
刚刚添加了代码来显示我是如何获取数据的