建置交易系統的第一步就是要處理歷史報價了,有幾個重點需要注意
歷史報價資料是策略的基礎,不能馬虎,簡單道理就是garbage in garbage out,拿不正確的資料來作回溯測試,可想而知開發出來的策略也不正確。google 搜尋 “台指期歷史資料”,可以找到蠻多相關資料,但是資料的正確性如何,可能有點問題。
所以若是在網路上取得的歷史資料,需要進行確認後才能開始使用。另一種可信的方法,就是完全由期交所提供的行情來製作一份歷史資料。
從期交所的資料轉檔使用,在實作上的問題不是資料正確性,只要寫好轉檔,輸出TXT或XPO來用,它就是正確的。問題是即時的報價和期交所盤後公布的行情資料一定是不同的,關於這點,只能儘量使我們自己的報價來源更快速穩定,更去貼近實際行情。不過基本工作仍是一樣,我們需要一份正確的歷史資料作為回溯測試之用。
行情歷史資料有兩個部份要處理,一個是從以前到今天,一個是今天的行情資料要怎麼加進去歷史資料裡。
期交所每日下午約三點半之後會提供成交資料檔,例如圖中,點一下”下載”,就可以取得一個例如Daily_2013_04_22.zip,這個壓縮檔解開後是一個rpt檔,裡面就是我們要的行情資料。
一天一個檔案,期交所只提供前30個交易日的檔案,所以往之前的沒有,要就和期交所申請,不知要多少錢。
以L的作法是先收集來所有歷史行情的檔案,再寫程式轉需要的資料到資料庫裡,之後每日再設定排程抓取當日資料後轉檔入資料庫。嗯,歷史部份的轉檔需要先收集完原始資料再寫程式才有用,這邊不再繼續寫下去。就先以每日的轉檔作紀錄吧。
下載很容易,只要知道了每日下載的URL,就完成了。以期交所下載的每日zip檔,它的格式是 http://www.taifex.com.tw/DailyDownload/Daily_2013_04_22.zip
我們只要把年月日改成今日,然後就可以下載,以c# 為例,原始碼如下:
using System;
using System.Net;
namespace Daily_download_Taifex_quote
{
class Program
{
static void Main(string[] args)
{
string Dmonth = "0" + DateTime.Today.Month.ToString();
string Ddate = "0" + DateTime.Today.Day.ToString();
string url = "http://www.taifex.com.tw/DailyDownload/" + "Daily_" +
DateTime.Today.Year.ToString() + "_" +
Dmonth.Substring(Dmonth.Length - 2) + "_"
+ Ddate.Substring(Ddate.Length - 2) + ".zip";
WebClient wc = new WebClient();
wc.DownloadFile(url, "D:\\Daily.zip");
}
}
}
作的事情只有兩件,一是設定好今日URL,二是使用WebClient 的DownloadFile方法,下載剛寫的URL的檔案,存成指定目錄的檔案(D:\\Daily.zip )
生成好的執行檔再設定排程,就可以每日下載檔案。
嗯,C#不是人人有裝,這個執行檔也需要安裝.net framework才可使用。L 後來想到更簡單的方法下載檔案,就是AutoIt,這個程式輕薄短小,又很簡單,完全免費,推薦給大家使用,它本來是作鍵盤和滑鼠控制為主的,不過功能很多。
內容和下載可以參考這裡
http://www.autoitscript.com/site/autoit/
下載安裝開啟新程式,要作到我們的需求,只要兩行程式!
第一行 要去哪裡的URL抓
dim $url = "http://www.taifex.com.tw/DailyDownload/Daily_" & @YEAR & "_" & @Mon & "_" & @MDAY & ".zip"
第二行 去那URL抓,抓完存去哪
InetGet($url,"D:\Future\daily.zip" )
不用宣告什麼、連日期也剛好不用處理0的問題 (前例C# 沒有RIGHT才又看起來很亂),總之,兩行搞定,這麼好的程式不用嗎?就算不是期交所URL下載,其它地方也可能派上用場,值得筆記。
當然,這些都是為了自行建構報價資料才需要的功夫,每日下載的資料在報價出狀況時就很有用,至少有正確的資料可以回補。L分享了兩種下載方式,接下來再看下載後的zip檔怎麼處理。
當然,建議自己動手玩玩看,交易系統建置這還只是第一步…都還沒踩完。
L大您好,我想請問一下如果我要下載期交所的期貨成交資料
回覆刪除用AUTOIT怎麼寫
我試著修改你的程式碼但是都沒有成功
想請問您正確的寫法是甚麼?
https://www.taifex.com.tw/chinese/3/3_1_3.asp
這個的rpt檔
我試成功了,但遇到一個問題
回覆刪除就是我怎麼讓下載的檔案自動解壓縮?
因為我的VBA要直接從資料夾讀取RPT檔
但我下載下來的是zip,所以要手動解壓縮再放到本來的資料夾
請問有自動壓縮的程式碼嗎?
HI
回覆刪除我以前的作法是找一個解壓縮的小執行檔,
例如 unzip.exe,
然後寫在批次檔裡用,
再設定排程執行,就可以解決這些問題,
對了,要先rename。
L
"期交所歷史資料下載網頁" 2016/2/26改版,我漏了1個月資料,有人有2016/2/26~2016/3/31, 可不可以轉送給我?
回覆刪除已經收到了,謝謝
回覆刪除