2013年5月1日 星期三

取得期交所每日行情資料

 

建置交易系統的第一步就是要處理歷史報價了,有幾個重點需要注意

 

歷史報價資料是策略的基礎,不能馬虎,簡單道理就是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/

 

下載安裝開啟新程式,要作到我們的需求,只要兩行程式!

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檔怎麼處理。

 

當然,建議自己動手玩玩看,交易系統建置這還只是第一步…都還沒踩完。

 

 

5 則留言:

  1. L大您好,我想請問一下如果我要下載期交所的期貨成交資料

    用AUTOIT怎麼寫

    我試著修改你的程式碼但是都沒有成功

    想請問您正確的寫法是甚麼?

    https://www.taifex.com.tw/chinese/3/3_1_3.asp

    這個的rpt檔

    回覆刪除
  2. 我試成功了,但遇到一個問題
    就是我怎麼讓下載的檔案自動解壓縮?
    因為我的VBA要直接從資料夾讀取RPT檔
    但我下載下來的是zip,所以要手動解壓縮再放到本來的資料夾
    請問有自動壓縮的程式碼嗎?

    回覆刪除
  3. HI

    我以前的作法是找一個解壓縮的小執行檔,
    例如 unzip.exe,
    然後寫在批次檔裡用,
    再設定排程執行,就可以解決這些問題,
    對了,要先rename。

    L

    回覆刪除
  4. "期交所歷史資料下載網頁" 2016/2/26改版,我漏了1個月資料,有人有2016/2/26~2016/3/31, 可不可以轉送給我?

    回覆刪除
  5. 已經收到了,謝謝

    回覆刪除