二、常用免費資料來源
1、文化、TB、易盛、MC等平臺匯出資料。
其中我只用過易盛和MC的資料匯出功能,易盛的提供的歷史資料時間較短且不支援tick資料, MC支援tick資料,但是沒有持倉量和開平方向。資料質量三顆星。
2、透過程式爬取新浪、和訊的歷史資料。
透過爬蟲爬取網頁上的資料,這裡我曾經爬取過和訊的資料。其中tick資料儲存的時間很短,同樣沒有持倉和開平方向,過了時間點就沒有了。資料質量兩顆星。
3、自己寫程式採集。
開啟CTP介面的官網,簡陋的開發文件和demo,是不是有種想要撞牆的感覺。如果不是對整個報單業務非常熟悉,不跌坑裡才怪了。筆者曾經用c++開發ctp交易程式時,在持倉回報中有個叫YdPosition的欄位,弄得筆者還以為自己的程式出bug了。當然此次我們不涉及到交易介面的開發,不做過多討論。這裡我推薦使用quantbox的開源專案XAPI2,支援java、python、C#呼叫ctp介面,使用起來非常方便。資料質量4顆星
三、自建資料平臺
有了資料來源,只能算完成一半。期貨全市場tick大約每天250萬筆,一年就是6億多。要安全、方便的把這些tick存起來,方便研究開發策略、實盤交易時快速方便的呼叫,這裡我用mongo來儲存資料,暫時還沒有遇到瓶頸問題。程式語言我選擇的是c#,比python效能高,比java整潔,比c++優雅。
好了廢話不多說,新手趕緊上車,來不及解釋,老司機請後門下車。
首先開啟quantbox的github,QuantBox/XAPI2
找到language下的csharp,開啟demo看看。
step1:初始化介面
XApi mdApi = new XApi(“CTP_Quote_x86。dll”);
mdApi。Server。Address = “行情地址”;
mdApi。Server。BrokerID = “交易商程式碼”;
mdApi。User。UserID = “賬號”;
mdApi。User。Password = “密碼”;
step2:將資料接入mongo
mdApi。OnRtnDepthMarketData = (object sender, ref DepthMarketDataNClass marketData) =>
{
//建立資料連線
MongoClient client = new MongoClient(“mongo連線字串”);
MongoServer server = client。GetServer();
//獲取指定資料庫
MongoDatabase db = server。GetDatabase(“Futures”);
//獲取表
MongoCollection col = db。GetCollection(“Ticks”);
//插入資料
col。InsertBatch(marketData);
//關閉連線
server。Disconnect();
}
step3:連線伺服器,並開始訂閱行情
mdApi。Connect();
Thread。Sleep(5 * 1000);
mdApi。Subscribe(“rb1709”, “”);
step4:把程式編譯執行一下,點燃一支香菸,源源不斷的資料就過來了,是不是感覺超簡單。
setp5:
上面的程式雖然可以執行,但是還有些要最佳化的地方,比如怎麼動態得獲取當日交易的所有合約、這樣寫mongo是不是有效能問題,是不是應該緩衝一部分批次寫入、能不能開機自動後臺啟動,每天自動定時採集、行情回報這麼多欄位,怎麼過濾一下。如果你實在太懶不想寫程式碼,直接下載下來編譯一下可好:goodluck028/datareceiver - 碼雲 - 開源中國
四、配置執行環境
mongo的安裝配置:請自行百度。
五、最後說一句