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

私は3列の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回のボラティリティのために正規化する
+1

「既にクラッシュしています」というエラーメッセージを入力してください。 – albert

+0

最初のカラムはインデックスなので、 'data.reset_index(inplace = True)'が必要です。 – jezrael

+0

がエラーメッセージを追加しました。リセットインデックスはエラーを緩和しませんでした。多分私はそれを間違った場所に置いたでしょうか?私はその並べ替えの直前に置いた。 – Spurious

答えて

0

謝罪、あなたが望む出力の種類では完全にはっきりしないので、私はティッカーとピリオド(x)を入力してcurrを見たいと思っていますボラティリティナンバー。以下では、あなたがそのライブラリを持っていない場合に備えて、numpyを使用しました。

本来、すべてのオリジナルデータのDataFrameを作成し、指定されたティッカー用にフィルタリングされた新しいDFを作成しました( 'UN Equity'は 'A'または 'PCG'一定と仮定する)。この新しい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

関連する問題