2016-08-08 40 views
-1

我正在寻找一种方法,使下面的代码工作股价波动:计算从3列CSV

import pandas 

path = 'data_prices.csv' 
data = pandas.read_csv(path, sep=';') 
data = data.sort_values(by=['TICKER', 'DATE'], ascending=[True, False]) 
data.columns 

我有三列的2维数组,该数据是这样的:

DATE;TICKER;PRICE 
20151231;A UN Equity;41.81 
20151230;A UN Equity;42.17 
20151229;A UN Equity;42.36 
20151228;A UN Equity;41.78 
20151224;A UN Equity;42.14 
20151223;A UN Equity;41.77 
20151222;A UN Equity;41.22 
20151221;A UN Equity;40.83 
20151218;A UN Equity;40.1 
20091120;PCG UN Equity;42.1 
20091119;PCG UN Equity;41.53 
20091118;PCG UN Equity;41.86 
20091117;PCG UN Equity;42.23 
20091116;PCG UN Equity;42.6 
20091113;PCG UN Equity;41.93 
20091112;PCG UN Equity;41.6 
20091111;PCG UN Equity;42.01 

现在,我想计算x日实现的波动率,其中x来自输入字段,x不应大于观察值的数量。要采取

需要的步骤:

  • 计算每行的对数收益
  • 把这些收益和255平方根在其上运行
  • 乘顶部的标准偏差以标准化为每年波动
+1

请提供您收到的错误消息,如您所说'已经崩溃'。 – albert

+0

它看起来像需要'data.reset_index(inplace = True)',因为第一列是索引。 – jezrael

+0

添加了错误消息。重置索引不会减轻错误。也许我把它放在了错误的地方?我在排序前就把它放好了。 – Spurious

回答

0

道歉,它不是那种输出你希望的,所以我一直认为完全清楚自己想要进入股票和周期(x)和看到CURR波动率数字。下面我也使用了numpy,以防你没有这个库。

本质上,我创建了一个所有原始数据的DataFrame,然后为给定的股票行情筛选出一个新的DF(用户只需要键入'A'或'PCG'部分,因为'UN Equity'假定不变)。在这个新的DF中,在检查您的期间(x)输入不太高之后,它将输出最近的年化波动率值。

import numpy as np 
import pandas as pd 

data = pd.read_csv('dump.csv', sep=';') 
data = data.sort_values(by=['TICKER','DATE'],ascending=[True,True]) 


def vol(ticker, x): 
    df = pd.DataFrame(data) 
    df['pct_chg'] = df.PRICE.pct_change() 
    df['log_rtn'] = np.log(1 + df.pct_chg) 

    df_filtered = df[df.TICKER==ticker+' UN Equity'] 

    max_x = len(df_filtered) - 1 
    if x > max_x: 
     print('Too many periods. Reduce x') 

    df_filtered['vol'] = pd.rolling_std(df_filtered.log_rtn, window=x) * (255**0.5) 

    print(df_filtered.vol.iloc[-1]) 

作为一个例子,与体积的输入(“PCG”,6)输出为0.187855386042

可能不是最优雅和道歉,如果我误解您的请求。

+0

我仍然得到错误,我认为这是由于数据集太大的事实。我会尽力让它工作,看看你的解决方案是否也能解决它。 – Spurious

+0

与此同时,我解决了我的问题,您的代码很有帮助。这里的问题是我无法输入日期。 – Spurious