2016-08-08 82 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