2009年3月20日 星期五

在Excel中呼叫日盛HTS API

拖稿拖很久了阿...

這大概是2月就學問過菜籃的玩意了。

然後拖到現在,越來越懶了~

想搞這個主要是想看有沒有辦法可以讓人工下單更快。

有機會的話也許可以抓到一點套利機會。

不過套利大概只是作白日夢~

讓下單更快倒是可能作到。


日盛在HTS寫了一個HTSAPITradeClient.dll

每個HTS都有。

只要用 Excel VBA 把這個 dll 叫醒

就可以在 Excel 作下單動作

不過個人VBA不是很熟,用的方法都有點蠢。

所以有需要的就湊合著用吧。


首先:

先建立一個資料夾,把 HTSAPITradeClient.dll 丟進去

然後在建立一個Excel

如圖。


然後,打開建立的Excel

去 工具 -> 巨集 -> VB編輯器

然後選,插入 -> 模組

如圖。



再來把下列文字貼到新插入的模組中,如圖



喔,圖太小了,用放大鏡吧。

Declare Function HTSOrder Lib "C:\Documents and Settings\Administrator\桌面\Excel日盛下單\HTSAPITradeClient.dll" (ByVal X As String) As String

上列字串中,紅色部份是剛剛提到資料夾的位置,我自己是在桌面上。

若是位置不同,記得要改。

好了以後儲存關閉就好。

這樣以後啟動這Excel,啟用巨集後就會自動把 dll 叫醒。


然後就可以把DDE抓到Excel中

在表格中作判斷,然後丟下單字串。

看是要追價什麼的,都蠻方便的。

EX:



B2那一欄是DDE市價

就如同圖中,D2,D3是自行輸入的價位

當B2 大於D2 或是 小於D3 時

會市價丟多單或是空單

來個示範,現在是盤後所以可以亂搞,盤中請小心!!!

D2如圖中示,是5000,表示當DDE報價超過5000時

就會丟市價多單的字串。

現在手動把改成4920,看看丟單情況。如下圖。



糟糕!!! 這個圖也是要用放大鏡看。

就如上圖,把D2改成4920,API Trade Manager 就丟出下單字串了。

丟空單就不示範了。

而丟下單字串的方式一樣在VB編輯器中

上圖中的 大於多作 小於放空 的判斷如下

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("B2") > Range("D2") Then
Call HTSOrder("Market=F,Account=帳號,ContractName=商品,ContractDate=月份,OpenCloseAuto=A,BuySell=B,Lots=1,OrderType=M,Price=0,FokIocRod=F,DayTrade=N")
End If

If Range("B2") <>
Call HTSOrder("Market=F,Account=帳號,ContractName=商品,ContractDate=月份,OpenCloseAuto=A,BuySell=S,Lots=1,OrderType=M,Price=0,FokIocRod=F,DayTrade=N")
End If

End Sub


上列程式碼,紅色的部份就是丟下單字串給日盛API

藍色的部份就是Excel中欄位的判斷

應該不會很難懂 ~

以上 ~

我還是覺得 手癢下單機比較厲害XD
HEMiDEMi Technorati Del.icio.us MyShare?犖?貊惜 Yahoo