在台指期、台指選中,結算日通常訂為第三個禮拜三,如果我們今天有選擇權的資料,欲計算其時間價值,就需要找出結算日。
使用版本為 Python3.51
需要安裝套件 datetime
程式碼如下:
import datetime as dt
def third_wen(y,m): # 此函數需參數 年 及 月
day=21-(dt.date(y,m,1).weekday()+4)%7 # weekday函數 禮拜一為0;禮拜日為6
return dt.date(y,m,day)
print(third_wen(2016,5)) # 會 print 出 2016-5-18 為五月份第三個禮拜三
以這個月為例,五月份第一天為禮拜日,第一行dt.date(y,m,1).weekday()回傳值為6;
帶入運算 (6+4)%7 餘數為 3;
再用原來的21-3=18,得出五月份的結算日5月18日
接著來找尋剩餘天數
print(third_wen(2016,5)-dt.date.today()) # 今天持有201605 契約的時間價值
如要將此時間價值帶入B-S model 中,須再將時間年化(天數除以365)
目前測試日期都可依此函示推倒出來,不過假如結算日>21 或 小於14,
本函式將會無效,可能需要額外手動判斷。
python小小作品
2016年4月30日 星期六
2016年3月18日 星期五
Python 以歷史模擬法估計VAR值
歷史模擬法(History Simulation Method),是一種常見的估計風險值(value at risk)的方式。
優點為:計算相較其他方法簡單。
缺點則為:需要龐大的歷史資料才會準確。
本篇以台灣股市之加權指數範例,回測期間為10年
滾動式窗(200天)之方式估算VAR值附圖及總穿透次數。
將會引用到Python 裏頭的 pandas 及 numpy 模組
程式碼如下:
輸出結果如下:
結果來看,總資料比數 2902,穿透次數163次 大致接近95%信心水準。
優點為:計算相較其他方法簡單。
缺點則為:需要龐大的歷史資料才會準確。
本篇以台灣股市之加權指數範例,回測期間為10年
滾動式窗(200天)之方式估算VAR值附圖及總穿透次數。
將會引用到Python 裏頭的 pandas 及 numpy 模組
程式碼如下:
import pandas as pd
import numpy as np
'滾動天數'
rday=200
'信心水準95%'
Z=-1.645
cof=0.05
dat=2
'建立衰退因子及計數器'
dc=0.94
cont=0
'用pd這個函數讀資料excel檔'
Dat=pd.read_excel('fund_2.xlsx','sheet'+str(dat))
Dat.columns=[['date','close']]
Dat['return']=(Dat['close']/Dat['close'].shift(1)-1)
Dat['rstd']=pd.rolling_std(Dat['return'],window=int(rday))
a=[]
c=0
d=200
i=0
'滾動標準差'
while i
if i < 200:
c=0
if i ==200:
c=Dat['rstd'][200]**2
if i >200:
c=((Dat['rstd'][i-1])**2)*dc+(1-dc)*(Dat['return'][i-2])**2
i+=1
a.append(c)
Dat['EWM']=a
Dat['EWMA']=abs(Dat['EWM'])**0.5*Z
Dat['minus']=Dat['return']-Dat['EWMA']
'計算穿透次數'
for j in range(len(Dat['minus'])):
if j>200 and Dat['minus'][j]<0: br="">
cont+=1
print('穿透次數為'+str(cont)+'次')
Dat[['return','EWMA',]][199:3102].plot(figsize=(12,8),lw=0.5,color=['b', 'r'],title='CVAR and VAR')
0:>
輸出結果如下:
結果來看,總資料比數 2902,穿透次數163次 大致接近95%信心水準。
訂閱:
文章 (Atom)