2014年5月6日 星期二

●利用VIX 交易S&P100指數 (含程式碼)

     在網上看到一個2001年就出現的策略,是利用VIX index 來交易OEX(S&P100指數),應該是一個以日為單位的交易策略。讓我先稍微描述一下他的做法,最後在寫下我的看法。
     策略細節:
     進場條件很簡單,是利用VIX21日收盤價布林通道(兩個標準差)為主要條件。
▼濾網:收盤在10MA之上做多,收盤在10MA之下做空。

▼多單訊號:6日前的VIX大於BB上限且5日前的VIX小於BB上限,在當根K收盤的時候買進。
▼空單訊號:10前的VIX大於BB下限且11日前的VIX大於BB上限,在當根K收盤的時候賣出。
▼出場訊號:進場後超過5根K後,如果收盤價來看還沒有獲利,就出場
請注意,多空單進場的條件並不是對稱的,這部分應該是因為特殊的經驗或市場慣性而調整而成。

     看法:
首先我們先了解一下VIX是什麼,根據維基百科,這邊指的VIXCBOE根據某一個價格範圍內的SP500指數選擇權,經過加權後所計算出來的,而詳細的計算方式可以參考CBOEVIX白皮書

原則上,VIX沒有方向性的,因為它基本上只是變異量的開根號。換句話說,(維基百科的例子)如果VIX=15,只是代表未來30天以內,SP500指數有68%的機會是以價位為中心的-4.33% ~ +4.33%之間。所以VIX越大,只是代表波動區間越大而已。


那為什麼VIX也被稱為恐慌指標?可能有兩個原因:

1.    跟計算VIX的方式有關:
要計算VIX,跟幾個變數有關:到期時間、無風險利率、forward price (接近價平價格)Call/Put的價格、Call/Put 的履約價格。這裡面最重要的是forward priceCall/Put 的履約價。

計算VIX的公式來看,除了每檔Call/Put 履約價格差之外,還需要除以履約價格的平方。也就是說,如果目前價平在9000,那麼計算VIX所需的表格資訊長這樣:

8700
Put 價格
8800
Put 價格
8900
Put 價格
9000(價平)
Call+Put 平均價格
9100
Call 價格
9200
Call 價格

而VIX平方正比於 相近兩檔履約價格的差額和履約價格平方的比值。也就是說,在簡單的假設遠價外的CallPut 的波動幅度會差不多時,履約價格越小的檔次(價外的Put)對於VIX的計算影響的越大。也就是說,當市場上在搶買Put的時候,比市場上搶買Call的時候,VIX增加的速度要快一些。

換句話說,雖然VIX在設計上是「沒有方向性的」(變異量的開根號),但是因為設計上的特性,造成當指數向下的時候,增加率先天上會比指數向上的時候增加要稍大。

2.    跟市場特性有關(猜測)
一般來說,市場可能傾向緩漲急跌,而且股票市場本質上是籌資市場,也就是以多方為主,所以一般做多的時候可能傾向以股票甚至是期貨為主,但做空或是有危險的時候,反而以空期貨和買Put 避險較有利。也因為這樣,指數緩漲的時候,Call的波動反而不會太過於劇烈,但指數有危險甚至已經向下噴的時候,搶買Put的力量會讓VIX暴增。實務上,根據CBOE的研究,過去幾年VIXSP500的關聯性的確在-0.75~-0.85之間。

但是必須強調的是:相關性不等於因果關係。負相關性高,有可能是因為市場預期下跌,所以讓VIX先飆高,隨後市場再下跌;也有可能是市場先下跌後,大家再搶買Put 造成VIX飆高,雖然最後得到的相關性結果或許會很相近,但因果關係卻是完全不同的。

     結論:

所以原作者的做法,(以做多為例)基本上是想在趨勢確定的時候(價格在10MA之上),等待短線上急速拉回之後回穩的時候進場(VIX先飆高越過BB上限再掉回區間中)。可能是可以改良發展的方向。


TS code:

TradeStation (EasyLanguage) for "Trading the VIX" by Price Headley, starting on p. 52:
Data1 is the OEX (S&P 100) and Data2 is the VIX index.

{Code by Price Headley, BigTrends.com}

If Close of Data1 > Average(Close of Data1, 10) and Close of Data2[5] < BollingerBand(Close of Data2, 21, 2)[5] and Close of Data2[6] > BollingerBand(Close of Data2, 21, 2)[6] Then

Buy on Close of Data1;
If BarsSinceEntry = 5 and Close of Data1 < Close of Data1[5] Then
ExitLong on Close of Data1;

If Close of Data1 < Average(Close of Data1, 10) and Close of Data2[10] > BollingerBand(Close of Data2, 21, -2)[10] and Close of Data2[11] < BollingerBand(Close of Data2, 21, -2)[11] Then

Sell on Close of Data1;
If BarsSinceEntry = 5 and Close of Data1 > Close of Data1[5] Then

ExitShort on Close of Data1;



0 留言:

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------