本節(jié)講解并通過(guò)Python代碼逐步驗(yàn)證Tony Cooper關(guān)于VIX衍生品VXX及XIV的量化分析方法和實(shí)踐策略 原論文請(qǐng)參考: Easy Volatility Investing: Tony Cooper, Feb 2013 簡(jiǎn)介 該論文嘗試以波動(dòng)率指數(shù)(VIX Index)衍生的ETP產(chǎn)品建立波動(dòng)率投資策略,。 論文結(jié)構(gòu)大致如下:
1. 引言 論文總結(jié)了以下幾點(diǎn)VIX波動(dòng)率指數(shù)的既有規(guī)律(典型化事實(shí)):
論文目錄
2. 波動(dòng)率的誘惑 關(guān)于CBOE VIX指數(shù),我們?cè)赩IX衍生品系列講座中已經(jīng)涉及(http:///2lcQIEb),,這里不再重復(fù),著重陳述一下論文中的觀點(diǎn),。 論文認(rèn)為:VIX是可以預(yù)測(cè)的,,這是基于VIX具有均值回歸特性這一假設(shè)作出的推斷。
論文指出:VIX的變化與S&P500的變化為負(fù)相關(guān)
下圖是我們用Python代碼進(jìn)行的驗(yàn)證,圖形顯示VIX與S&P指數(shù)SPX日收益的移動(dòng)一年相關(guān)系數(shù),。注意二者負(fù)相關(guān)性逐漸趨強(qiáng),。 In [2]:
import pandas as pd import pandas_datareader as web import numpy as np import matplotlib.pyplot as plt %matplotlib inline vix = web.DataReader('^vix','yahoo','1990-01-01') spx = web.DataReader('^GSPC','yahoo','1990-01-01') xiv = web.DataReader('xiv','yahoo','2010-10-30') data = pd.DataFrame() data['VIX'] = vix['Adj Close'] data['SPX'] = spx['Adj Close'] data['XIV'] = xiv['Adj Close'] data['VIX_Ret'] = data['VIX'].pct_change() data['SPX_Ret'] = data['SPX'].pct_change() data['VIX_Ret'].rolling(252).corr(data['SPX_Ret']).plot(figsize=(15,4)) Out[2]:
<matplotlib.axes._subplots.AxesSubplot at 0x107e1ce10> 論文中展示VIX和XIV在2012-04-03至2012-10-01間的走勢(shì)圖,我們用以下代碼實(shí)現(xiàn),。 In [3]:
data_scaled = pd.DataFrame() data_scaled['VIX'] = data['VIX']/data.ix['2012-04-03']['VIX'] data_scaled['XIV'] = data['XIV']/data.ix['2012-04-03']['XIV'] data_scaled.ix['2012-04-01':'2012-10-01'][['VIX','XIV']].plot(figsize=(15,8)) Out[3]:
<matplotlib.axes._subplots.AxesSubplot at 0x1049e0790> 如上圖所示,,期間VIX基本回到初始值,但XIV升幅近40%,。 3. 波動(dòng)率風(fēng)險(xiǎn)溢價(jià)(The Volatility Risk Premium) 論文在這一章節(jié)主要解釋及論證VRP的存在,。 論文認(rèn)為:在波動(dòng)率交易雙方,對(duì)沖套保交易員情愿付錢給投機(jī)交易員,,用于減少自身的波動(dòng)率風(fēng)險(xiǎn),。
In [4]:
data['SPX_HV21'] = data['SPX_Ret'].rolling(21).std() * np.sqrt(252) * 100 data['SPX_HV21_Shift'] = data['SPX_HV21'].shift(-21) data[['VIX','SPX_HV21_Shift']].plot(figsize=(15,8)) Out[4]:
<matplotlib.axes._subplots.AxesSubplot at 0x10ae9b350> 我們進(jìn)一步用下圖顯示二者之間的差異。按論文陳述,,我們?nèi)《邔?duì)數(shù)差,,使顯示更加清晰。 In [5]:
(np.log(data['VIX']) - np.log(data['SPX_HV21_Shift'])).plot(figsize=(15,8),grid=1) Out[5]:
<matplotlib.axes._subplots.AxesSubplot at 0x1049e2850> 4. VIX期貨 關(guān)于VIX期貨,,讀者可以參考我們的專題(http:///2lX0iIF),。 VIX衍生品ETP是建立在VIX期貨基礎(chǔ)上的。因?yàn)閂IX指數(shù)沒(méi)有現(xiàn)貨產(chǎn)品,,不能直接交易,,因此VIX期貨價(jià)格代表市場(chǎng)對(duì)未來(lái)VIX水平的共同期待值。 下圖顯示的是2017年2月23日VIX期貨的展期結(jié)構(gòu)曲線,,這一天呈明顯的溢價(jià)形態(tài)(Contango),。 In [6]:
import sys sys.path.append("/Users/valley11/Google Drive/Projects/Python/Samples") import cboe_vx as cboe VXF = pd.DataFrame() VXF['VIX'] = data['VIX'] f = cboe.getCboeData(2017,3) VXF['Mar'] = f['Settle'] f = cboe.getCboeData(2017,4) VXF['Apr'] = f['Settle'] f = cboe.getCboeData(2017,5) VXF['May'] = f['Settle'] f = cboe.getCboeData(2017,6) VXF['Jun'] = f['Settle'] f = cboe.getCboeData(2017,7) VXF['Jul'] = f['Settle'] f = cboe.getCboeData(2017,8) VXF['Aug'] = f['Settle'] f = cboe.getCboeData(2017,9) VXF['Sep'] = f['Settle'] f = cboe.getCboeData(2017,10) VXF['Oct'] = f['Settle'] VXF.ix['2017-02-23'].plot(figsize=(15,5)) Out[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x10c0aa950> 下圖我們?cè)僬故練v史上展期結(jié)構(gòu)呈逆向形態(tài)的曲線,這是發(fā)生在金融危機(jī)中的2008年10月3日,。 In [7]:
VXF = pd.DataFrame() VXF['VIX'] = data['VIX'] f = cboe.getCboeData(2008,10) VXF['Oct'] = f['Settle'] f = cboe.getCboeData(2008,11) VXF['Nov'] = f['Settle'] f = cboe.getCboeData(2008,12) VXF['Dec'] = f['Settle'] f = cboe.getCboeData(2009,1) VXF['Jan'] = f['Settle'] f = cboe.getCboeData(2009,2) VXF['Feb'] = f['Settle'] f = cboe.getCboeData(2009,3) VXF['Mar'] = f['Settle'] f = cboe.getCboeData(2009,4) VXF['Apr'] = f['Settle'] f = cboe.getCboeData(2009,5) VXF['May'] = f['Settle'] f = cboe.getCboeData(2009,6) VXF['Jun'] = f['Settle'] VXF.ix['2008-10-03'].plot(figsize=(15,5)) Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x10c080d50> 前文通過(guò)VIX與SPX歷史波動(dòng)率的比對(duì),,論證了VRP的存在;但因?yàn)閂IX不可直接交易,,無(wú)法獲取這一交易優(yōu)勢(shì),。 在介紹VIX期貨后,論文提出問(wèn)題:VRP在VIX期貨市場(chǎng)中存在么,? 這個(gè)驗(yàn)證有點(diǎn)難度,,因?yàn)閂IX期貨產(chǎn)品距到期日時(shí)間是逐漸減少的,,無(wú)法用VIX即期價(jià)格(30日估值)和沒(méi)有準(zhǔn)確時(shí)間的期貨直接比較。 論文借鑒了S&P500 VIX短期期貨指數(shù)的一個(gè)方法,,即建立一個(gè)假設(shè)的恒定一個(gè)月到期的VIX期貨產(chǎn)品,,該期貨30天后會(huì)以當(dāng)時(shí)VIX即期作為結(jié)算價(jià)格。因此恒定一個(gè)月到期的期貨與30天后的VIX之間具有了可比性,。 下面的代碼及圖形嘗試描述兩者間的關(guān)系:
In [8]:
import Quandl VXF30 = pd.DataFrame() x = Quandl.get("CHRIS/CBOE_VX1") # continuous F1 VXF30['F1'] = x['Settle'] x = Quandl.get("CHRIS/CBOE_VX2") # continuous F2 VXF30['F2'] = x['Settle'] calendar = pd.read_csv('f1_f2_ttm.csv') # read in expiry dates and days till maturity calendar = calendar.set_index('Date') VXF30 = pd.merge(VXF30, calendar, how = 'left', left_index = True, right_index = True) VXF30['X1'] = 30 - VXF30['TTM1'] VXF30['X2'] = VXF30['TTM2'] - 30 VXF30['W1'] = VXF30['X2'] / (VXF30['X1'] + VXF30['X2']) VXF30['W2'] = VXF30['X1'] / (VXF30['X1'] + VXF30['X2']) VXF30['VXF30'] = VXF30['F1'] * VXF30['W1'] + VXF30['F2'] * VXF30['W2'] VXF30['VIX'] = data['VIX'] VXF30['VIX_ShiftF21'] = data['VIX'].shift(-21) #VXF30['VIX'] = data['VIX'].shift(-21) VXF30[['VXF30','VIX_ShiftF21']].ix['2007-10-01':].plot(figsize=(15,8)) Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x10c576790> 可以看出,多數(shù)時(shí)間里,,假設(shè)的恒定30天期貨價(jià)格高于30天后VIX的即期價(jià)格,。 論文認(rèn)為這意味著VRP在VIX期貨市場(chǎng)中同樣存在。 下圖進(jìn)一步顯示二者間的對(duì)數(shù)差,。 In [9]:
(np.log(VXF30['VXF30'].ix['2007-10-01':]) - np.log(VXF30['VIX_ShiftF21'].ix['2007-10-01':])).plot(figsize=(15,8),grid=True) (np.log(VXF30['VXF30'].ix['2007-10-01':]) - np.log(VXF30['VIX_ShiftF21'].ix['2007-10-01':])).mean() Out[9]:
0.07111734832772859 5. 滾動(dòng)收益(Roll Yield) 在明確了VIX與VIX期貨間的關(guān)系后,,論文提出以下問(wèn)題:
這個(gè)問(wèn)題實(shí)際就是即期與期貨,哪個(gè)對(duì)預(yù)測(cè)未來(lái)波動(dòng)率更有效,。 論文繼續(xù)陳述以下觀點(diǎn): - 滾動(dòng)收益描述的是VIX即期與期貨價(jià)格之間的差值 - 滾動(dòng)收益可以精確測(cè)量,,但VRP不能 - 當(dāng)期貨展期呈溢價(jià)形態(tài)(Contango)時(shí),滾動(dòng)收益為正,;反之為負(fù) 我們用下圖顯示滾動(dòng)收益的表現(xiàn),。 In [11]:
VXF['F1_VIX_Yield'] = (VXF30['F1'] - VXF30['VIX']) / VXF30['VIX'] / VXF30['TTM1'] VXF['F1_VIX_Yield'].ix['2007-10-01':].plot(figsize=(15,8),grid = True) Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0x10ce45f90> 從2007年10月1日至今,首月期貨與即期價(jià)格間的滾動(dòng)收益率日均大約為0.34%,,相對(duì)于每月7%,。 In [12]:
VXF['F1_VIX_Yield'].ix['2007-10-01':].mean() Out[12]:
0.0033657100890936895 6. 基于VIX期貨的ETP產(chǎn)品 關(guān)于基于VIX期貨的ETP產(chǎn)品,我們有專題講解,,這里不做過(guò)多陳述,。簡(jiǎn)單列舉論文中涉及的幾個(gè)產(chǎn)品。 基于S&P 500 VIX短期期貨指數(shù)的ETP:正向VXX,,反向XIV 基于S&P 500 VIX中期期貨指數(shù)的ETP:正向VXZ,,反向ZIV 除此以外,還有很多正向,、反向,、單倍、與多倍的ETP產(chǎn)品,,但基本遵從非常近似的產(chǎn)品結(jié)構(gòu),。 7. XIV 動(dòng)態(tài)特性 XIV的產(chǎn)品設(shè)計(jì)為跟蹤S&P500 VIX短期期貨指數(shù),希望通過(guò)持有VIX前兩個(gè)月期貨的空倉(cāng),,實(shí)現(xiàn)每日反向的指數(shù)收益率:
XIV每日在第一與第二月期貨產(chǎn)品間調(diào)倉(cāng),,維持恒定的一個(gè)月到期的期貨。 下面我們用Python代碼展示XIV相對(duì)于VIX的回歸分析,。 In [14]:
import OLS_Regression as ols data['XIV_Ret'] = data['XIV'].pct_change() ols.linreg(data['VIX_Ret'].ix['2010-12-01':].values, data['XIV_Ret'].ix['2010-12-01':].values) Out[14]:
論文進(jìn)一步定義:
下圖我們嘗試?yán)L制該期待值自XIV發(fā)布以來(lái)的時(shí)間序列以及累計(jì)效果,。 In [15]:
VXF30['F2_F1_Yield'] = (VXF30['F2'] - VXF30['F1'])/(VXF30['F1'])/30 (VXF30['F2_F1_Yield'].ix['2010-10-30':]*100).plot(figsize=(15,8), grid = True) Out[15]:
<matplotlib.axes._subplots.AxesSubplot at 0x1100d6710> 上圖同時(shí)清晰的顯示了首月與次月呈溢價(jià)與逆向結(jié)構(gòu)的階段:
In [240]:
VXF30['F2_F1_Yield'].ix['2010-10-30':].add(1).cumprod().plot(figsize=(15,8),grid=True) Out[240]:
<matplotlib.axes._subplots.AxesSubplot at 0x12a2aed50> 上圖為日滾動(dòng)收益期待值的累積效果,。如圖所示,如果滾動(dòng)收益的期待值可以實(shí)現(xiàn),,XIV會(huì)在短短幾年獲得巨大收益,。顯然,事實(shí)并非如此,。 8. 更多的XIV動(dòng)態(tài)特性 我們先展示VXX與XIV自發(fā)布之日起至今的2009-01-29與2010-11-30間的走勢(shì)圖,。 In [16]:
data['VXX'] = web.DataReader('vxx','yahoo','2009-01-29')['Adj Close'] data[['VXX']].ix['2009-01-29':].plot(figsize=(15,4)) Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x110220710> In [17]:
data[['XIV']].ix['2010-11-30':].plot(figsize=(15,4)) Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x110514690> 從上面兩個(gè)圖,我們看出:
下面我們用代碼演示回撤計(jì)算,。 In [22]:
ret = data['XIV_Ret'].add(1).cumprod() dd = ret.div(ret.cummax()).sub(1) mdd = dd.min() end = dd.argmin() start = ret.loc[:end].argmax() print "Maximum Drawdown:", mdd print "Peak Date:", start print "Trough Date:", end Maximum Drawdown: -0.743870631195 Peak Date: 2011-07-07 00:00:00 Trough Date: 2011-11-25 00:00:00 9. 交易策略 論文闡述了5種交易策略,,每種策略包含多種交易信號(hào)。 策略一:買入持有
策略二:動(dòng)量策略 (i) 計(jì)算并比較過(guò)去k日中收益最高的ETN,,買入并持有 (ii) 當(dāng)所有k日收益為零,保持空倉(cāng) 論文建議使用83天作為參數(shù),。 策略三:溢價(jià)/逆向滾動(dòng)收益策略(Contango-Backwardation Roll Yield) 策略尋求獲取最大的滾動(dòng)收益:在展期為溢價(jià)(Contango)時(shí),,買入XIV, 當(dāng)展期為逆向(Backwardation)時(shí),,買入VXX 該策略信號(hào)清晰,,比較容易把握(VXV為90日波動(dòng)率指數(shù)):
論文同時(shí)給出多個(gè)信號(hào)變種:
論文建議使用Vratio或10日均值的Vratio10 信號(hào)組合:
論文推薦使用HVOL10S,即10日歷史波動(dòng)率附加5日移動(dòng)平均值 該策略對(duì)于ETN的發(fā)行者有利,因?yàn)樯婕俺掷m(xù)的對(duì)沖與調(diào)倉(cāng),,我們不做過(guò)多解釋,。 既然波動(dòng)率拖拉對(duì)XIV投資有阻礙作用,論文建議可以講VIX本事波動(dòng)率引入策略開(kāi)發(fā)之中,,用來(lái)提高收益,。例如: stdlVIX 定義為VIX對(duì)數(shù)的標(biāo)準(zhǔn)差,對(duì)上述策略的一個(gè)改進(jìn)就是: 當(dāng)Vratio > 1,,并且在stdlVIX < 0.14,,買入XIV。 10. 交易風(fēng)險(xiǎn) 論文提到上述策略在截止至2013年2月的歷史回測(cè)中都獲得了很好的收益,。我們需要指出,,2013年以前和以后的波動(dòng)率市場(chǎng)不盡相同,如果回測(cè)自VXX/XIV發(fā)布之日至今,,結(jié)論并不一致。我們本節(jié)的講解主要針對(duì)熟悉分析方法,,所以并不做過(guò)多評(píng)論,。 在探討交易風(fēng)險(xiǎn)時(shí),論文主要談及以下兩個(gè)方面: 1) 未來(lái)難以獲得同樣收益的風(fēng)險(xiǎn)(類似于統(tǒng)計(jì)中的過(guò)度適應(yīng)問(wèn)題Overfitting) 2) 將這些策略引入已有投資組合中的帶來(lái)的裨益 VRP會(huì)持續(xù)么,?論文認(rèn)為:
論文列舉以下幾點(diǎn)實(shí)證分析中的風(fēng)險(xiǎn)因素:
波動(dòng)率拖拉 波動(dòng)率指的是日收益率的年化波動(dòng)率,。 論文指出,,當(dāng)日收益率的波動(dòng)率增加時(shí),復(fù)利累計(jì)的收益會(huì)減少,,也就是收益率波動(dòng)率越高,,累計(jì)收益越低。 我們參考下圖,。 In [23]:
data.ix['2012-03-25':'2012-08-15'][['VIX','XIV']].plot(figsize=(15,8)) Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x110571250> 上圖顯示的是VIX指數(shù)與XIV在2012年3月25日至2012年8月15日間的走勢(shì)圖,。論文指出:
下面我們分析期間的滾動(dòng)收益,。 In [24]:
VXF30.ix['2012-03-25':'2012-08-15']['F2_F1_Yield'].plot(figsize=(15,4)) VXF30.ix['2012-03-25':'2012-08-15']['F2_F1_Yield'].mean() Out[24]:
0.0032925691048866844 如上圖所示,,日滾動(dòng)收益的期待值非常顯著:
我們?cè)儆孟聢D展示VIX,首月F1,, 次月F2期貨在此期間的走勢(shì),。 In [25]:
data = pd.merge(data, VXF30[['F1','F2','F2_F1_Yield']], how='left',left_index=True,right_index=True) data.ix['2012-03-25':'2012-08-15'][['F1','F2','VIX']].plot(figsize=(15,8)) Out[25]:
<matplotlib.axes._subplots.AxesSubplot at 0x10ab32190> 聯(lián)系上面三張圖,我們很難解釋為什么XIV在此期間收益幾乎為零。 論文指出,,其中的原因是因?yàn)椴▌?dòng)率拖拉抵消了滾動(dòng)收益,。 關(guān)于波動(dòng)率拖拉的計(jì)量方法,我們這里暫不做詳細(xì)討論,。 時(shí)間同步風(fēng)險(xiǎn) 論文指出: 當(dāng)展期結(jié)構(gòu)在溢價(jià)與逆向間頻繁變化時(shí),,每次依照信號(hào)執(zhí)行的投資很有可能連續(xù)踏空。例如展期每天調(diào)轉(zhuǎn)方向,,依照信號(hào)會(huì)造成每日投資損失,。 同步風(fēng)險(xiǎn)是周期性風(fēng)險(xiǎn),只發(fā)生在溢價(jià)與逆向結(jié)構(gòu)調(diào)換的時(shí)候,。 在操作中,,可以用10日均線來(lái)避免頻繁波動(dòng)。 VRP/滾動(dòng)收益風(fēng)險(xiǎn)(VRP-RYR) 論文指出,,當(dāng)我們追求滾動(dòng)收益,,而不是VRP時(shí),我們會(huì)面臨該風(fēng)險(xiǎn),。雖然兩者相關(guān),,但這種相關(guān)性會(huì)弱化或消失-特別是在VIX指數(shù)頻繁做均值回歸運(yùn)動(dòng)時(shí)(即拒絕滾動(dòng)收益時(shí))。我們可以嘗試這樣理解:當(dāng)展期為溢價(jià)時(shí),,VIX有上升趨勢(shì),,但此時(shí)我們持倉(cāng)XIV(做空VIX);當(dāng)展期為逆向時(shí),,VIX有下降趨勢(shì),,但此時(shí)我們持倉(cāng)VXX(做多VIX)。 VIX體制變化 VIX體制是通過(guò)觀察VIX長(zhǎng)期走勢(shì)圖,,根據(jù)VIX水平及發(fā)展方向,,大致按時(shí)間段區(qū)分的具有不同特性的階段。例如2008年金融危機(jī)前后,,VIX處于20以上的高位,;而2012年后至今,VIX呈下降趨勢(shì),,并逐漸降至12以下水平,。 不同的VIX特性階段,適用于不同的交易策略,。因此判斷VIX體制的變化,,也是ETP交易的重要一環(huán)。論文特此將體制變化最為交易風(fēng)險(xiǎn)之一,。 回撤風(fēng)險(xiǎn) 前面論述關(guān)于XIV高達(dá)-74%的回撤值,,充分說(shuō)明VIX ETP交易屬于高風(fēng)險(xiǎn)品種,。 11. 分散投資 論文認(rèn)為VIX衍生品交易可以作為獨(dú)立投資資產(chǎn)類別,依靠其與股指的負(fù)相關(guān)性,,可以為已有投資組合帶來(lái)分散投資的優(yōu)勢(shì),。論文論證通過(guò)上升策略,可以幫助投資組合減少收益波動(dòng)率,,增加收益,,減小回撤,提升Sharpe,。 12. 未來(lái)研究課題 論文探討通過(guò)矢量回歸算法預(yù)測(cè)VRP作為將來(lái)的研究課題,,希望避免過(guò)度適應(yīng),提高Sharpe至2~3之間,。 13. 總結(jié) 總結(jié)上述五種策略: 1 - 買入持有 2 - 動(dòng)量方法 3 - 基于溢價(jià)/逆向結(jié)構(gòu)的滾動(dòng)收益:優(yōu)勢(shì)是交易頻率非常低,,通常一年幾次交易
4 - VRP基于波動(dòng)率風(fēng)險(xiǎn)溢價(jià):交易比較頻繁
5 - 對(duì)沖: 需要頻繁調(diào)倉(cāng),以及特殊軟件,,適用于ETP發(fā)行機(jī)構(gòu) 下面我們舉例如何生成交易信號(hào) 在交易信號(hào)產(chǎn)生后,,可以在回測(cè)平臺(tái)(例如Quantopian)進(jìn)行回測(cè)。 In [26]:
# show Vratio10 smoothed by 10 day moving average # If the 10 day moving average of VXV/VIX > 1, long XIV; otherwise, long VXX Vratio = pd.DataFrame() Vratio['VIX'] = web.DataReader('^vix','yahoo','2000-01-01')['Adj Close'] Vratio['VXV'] = web.DataReader('^vxv','yahoo','2000-01-01')['Adj Close'] Vratio['VXV/VIX'] = Vratio['VXV']/Vratio['VIX'] Vratio['VXV/VIX MA10'] = Vratio['VXV/VIX'].rolling(10).mean() Vratio.ix['2011-08-01':]['VXV/VIX MA10'].plot(figsize=(15,8)) Vratio['VXV/VIX MA10'].to_csv('vratio_ma10.csv') In [27]:
# show VRP # If the 5 day moving average of (VIX - HV10) > 0, long XIV; otherwise, long VXX VRP = pd.DataFrame() VRP['VIX'] = web.DataReader('^vix','yahoo','2000-01-01')['Adj Close'] VRP['SPX'] = web.DataReader('^gspc','yahoo','2000-01-01')['Adj Close'] VRP['SPX_Ret'] = VRP['SPX'].pct_change() VRP['HV10'] = VRP['SPX_Ret'].rolling(10).std() * np.sqrt(252) VRP['HV10 MA5'] = VRP['HV10'].rolling(5).mean() (VRP['VIX'] - VRP['HV10 MA5']*100).plot(figsize=(15,8),grid=True) (VRP['VIX'] - VRP['HV10 MA5']*100).to_csv('vrp_hv10_ma5.csv') |
|
來(lái)自: 追夢(mèng)文庫(kù) > 《期權(quán)》