[前言]
要做程式回測一開始需要的是歷史資料,歷史資料錯那接下來什麼都免談了。目前市面上較易取得的資料為分鐘資料,但如果將Multicharts的set系列指令用在分鐘資料上會出現回測不準確問題。(參考:http://www.yctseng.net/2013/02/setpercenttrailing.html)QT假設期交所提供的歷史資料無誤,那最好的tick資料當然是從期交所提供的資料轉出。期交所提供的tick資料是以.rpt檔格式提供(近期已有提供.csv檔),本篇QT將教大家如何處理rpt檔。
[程式使用]
1. 開新專案,輸入下方程式碼2. 將範例rpt檔(2016/12/27資料)放入D槽,檔案位置:https://drive.google.com/open?id=0BwqcpF06v4J4SzNyRnM4TFh1TDg
3. 執行程式碼,輸出結果「Result.txt」會放在D槽中
[觀念解釋]
<.rpt格式>
其實期交所提供的rpt檔是一種文字檔格式,只要把他當成文字檔處理即可。<文字讀取物件>
我們需要運用StreamReader這個物件來讀取文字檔。還記得第二課的物件概念嗎?
StreamReader sr = new StreamReader(@"D:\Daily_2016_12_27.rpt");
這邊的StreamReader就像是我們當初創造一個操盤人一樣,但是我們這次創造的是一個「文字讀取人」。
[語法補給:建立某些物件的時候可以傳進參數,這邊的檔案路徑就是參數]
string line = sr.ReadLine();
而這行就像我們當初叫操盤人買期貨、買股票一樣,但是這次我們是叫這個文字讀取人「讀取一行文字檔」並傳給參數line,會寫Multicharts的朋友應該可以輕鬆理解。
<分割文字檔>
string[] strs = line.Split(',');這行是將rpt檔以逗號分割,可以參考系列課程第三課。
if (strs[1].Trim() == "TX" && strs[2].Trim()=="201701")
判斷要的商品跟月份,這邊假設是要台指期、到期月份為2017/01的資料。
[語法補給:Multicharts的and=C#的&]
<文字寫入物件>
StreamWriter sw = new StreamWriter(@"D:\Result.txt");觀念等同文字讀取物件,但這次建立的是文字寫入物件
sw.WriteLine(line);
運用文字寫入物件將文字檔寫入
[ 該學會什麼 ]
這是本系列課程第一個應用實例,大家應該稍微瞭解學習正統程式語言的用意在哪了。到目前為止,你應該要會一次處理一個rpt檔,並且你可以取得這個rpt檔的任何一個商品,任何一個月份的資料,這個檔案換成選擇權rpt檔,你也應該要會處理。
[ 延伸提示 ]
本篇教的是如何處理單一文字檔,如何處理多個文字檔,請搜尋「Directory」物件、「foreach」。本篇並沒有將輸出做處理,所以「Result.txt」不能直接被Multicharts使用,如何才能讓「Result.txt」被Multicharts使用,請參考系列課程第三課。
[ 工商時間 ]
QT會盡量在網站上寫上大部分程式碼及觀念,如果還是有不懂,可以參考實體課程http://quanttrade168.blogspot.tw/2016/12/cmulticharts.html
沒有留言:
張貼留言