2017年1月29日 星期日

操盤人學C# (7) foreach

[前言]

foreach是一個迴圈語法,在操作大量同性質資料時非常好用,他跟for極為類似,for的用法大家可以參考Multicharts教學的書,這邊介紹foreach的性質讓大家了解,算是為下篇文章做準備吧。

[觀念解釋]

foreach主要使用情況是你要對一個陣列(串列)裡面的所有元素做「相同操作」時會用到,假設我現在要對三檔股票下單,並且對這三檔股票都要做查價、送單、回報的動作,一個方法是土法煉鋼如下表示:


輸出入下:

另一個方法是先把三檔股票加進一個股票清單,並使用foreach對股票清單每一檔股票做這三個動作:


這個就是foreach迴圈的基本寫法
string 代表StockList裡面的元素是字串型態,而stock是自定義變數名稱,stock在每跑一次迴圈時就會變成StockList裡面的另一個元素,以上面例子來說,第一次進入迴圈時stock是"台積電",第二次進入迴圈時stock是"鴻海",第三次進入迴圈時stock是"大立光"。

[衍生提示]

這邊在把股票加入StockList的時候是用Add一筆一筆加,其實更多時候Add是會寫在迴圈裡面,一次做多筆加入的動作。

2017年1月20日 星期五

操盤人學C# (6) 週選擇權樂透策略2

[前言]

延續上次課程,這次講如何用Multicharts產生週選擇權買賣文件

[觀念解釋]

<波動率>

波動率在學術上有所謂「均值回歸」的特性,而翻譯成白話就是「盤久必噴、噴久必盤」。而要操作波動率可以用選擇權的跨式價差、勒式價差來操作,關於操作概念網路上可以找到很多資料這邊就不在詳述。

<週選擇權策略-運用波動率>

假設我現在要選擇一個點進週選擇權,並且我認為盤久必噴,我訂了一個策略「台指期五日高點-五日低點<200點,則用最近期週選擇權買進價平附近履約價間隔100點的勒式價差,放到結算」,系列課程(5)我們已經建立每日週選放到結算的進出場點位表,用那個表則可以算出損益,我們只剩下要知道我們哪天進場、做哪個履約價就可以了。

上述策略在Multicharts裡面可以這樣寫:



再次說明,在這個策略中Multicharts的功用在於幫我們「產生買賣點文件」。
而輸出結果會如下方:


有了系列課程(5)的文件,我們就可以比對每天產生訊號時的損益了。


[衍生提示]

如上面方法一筆一筆用眼睛對進場點跟損益,眼睛一定找到脫窗,下次繼續介紹如何用程式把兩個文件結合起來快速產生回測結果。

2017年1月14日 星期六

操盤人學C# (5) 週選擇權樂透策略1

[前言]

所謂週選擇權樂透策略,是當你對未來行情有看法,花小錢買一個週選擇權放到到期,賭他可以一次漲個好幾倍的策略,因為以小搏大的性質跟樂透很像,所以才會有買樂透不如買週選的說法。
選擇權策略的回測用Multicharts不容易完成,如果搭配C#做一些檔案處理,會發現容易許多,本文即教大家實作好用的回測輔助文件。

[程式使用]

1. 將「2015_4_opt.csv」放進D槽,這個文件是由期貨交易所「選擇權每日行情下載」下載之2015年第四季檔案。
        下載位置:https://drive.google.com/open?id=0BwqcpF06v4J4dEpBZVhVY01XRkE
原始資料位置:https://www.taifex.com.tw/chinese/3/3_2_3.asp
2. 將「結算價.txt」放進D槽,這個文件是由期貨交易所抓取。
        下載位置:https://drive.google.com/open?id=0BwqcpF06v4J4TW45ZmQwVGtUUFU
原始資料位置:https://www.taifex.com.tw/chinese/5/FutIndxFSP.asp
3. 執行下方程式


4. 結果「Result.txt」輸出至D槽


[觀念解釋]

<樂透策略開發>

本策略只做選擇權買方,所以不會有價格被拉出去大賠問題,頂多就是選擇權價值歸零,所以在回測的時候可以想像成,我要在某個日期買進某履約價的選擇權,接下來就不再管他放至到期結算,並比較買進價格跟結算價格即是最終損益數字。
基於上述觀念,我如果有一個文件,裡面有日期、買進價格、結算價格,那我就可以知道我在那天進場買進這個樂透放至到期損益到底是多少(我們這次產生的Result.txt就是這個文件)。至於實際上那天有沒有進場,則可以用Multicharts寫一個策略,產生應該有進場的日期,兩個文件對照就可以產生樂透策略回測結果。

<Dictionary物件>

Dictionary是一個「字典」物件,可以把值加進這個字典,並在加進去的時候給他一個索引方便取出
Dictionary<string, int> result = new Dictionary<string, int>();
這行是建立一個叫做「result」的字典
result.Add(ary[1], Convert.ToInt16(ary[2]));
這行把「契約月份」當索引;「結算價」當值,
這樣以後我要取得某一個契約月份的結算價,我不用一個一個找,可以使用如result["2015W2"]的方式取出。

<選擇權買進價格>

QT選擇期交所提供的「最後最佳賣價」當作買進價格而不是選擇「收盤價」

<選擇權結算價值>

還記得選擇權結算價值怎麼算嗎?忘記快Google「選擇權內含價值」,
除了這個地方以外其他就是一些瑣碎的處理了。

[衍生提示]

在這個策略中,Multicharts的功用在於產生買賣訊號文字檔,下次會介紹如何搭配使用。
當有個這兩個文字檔,建立一個小程式讀取這兩個檔案,即可以計算回測結果,如果對C#不熟,用EXCEL的「VLOOKUP」等函數也可以辦到。
如果不太明白程式運作,Visual Studio有好用的Debug功能,可以一步一步看變數的變化,GOOGLE一下怎麼設斷點跟逐步執行吧,千萬要知道這個功能如何使用。

[工商時間]

QT會盡量在網站上寫上大部分程式碼及觀念,如果還是有不懂,可以參考實體課程
http://quanttrade168.blogspot.tw/2016/12/cmulticharts.html