2010年10月24日

AutoIT自動化證券下單伺服器

簡介:
去年開始開發自己的程式交易系統,目前還在開發中,而目前已經有一部分成果,下單伺服器便是其中一個重要的成果。
有鑑於下單伺服器需要長期的維護、更新,個人力量有限,因此將它Open出來,歡迎大家加入修改與使用。
目前「AutoIT自動化證券下單伺服器」已經註冊為自由軟體,並放置在http://www.openfoundry.org/of/projects/1741,歡迎大家使用、修改、更新,提出建議。

前言:
目前在網路上看到的下單系統通常有2類,一類是證券公司或第三方公司提供的API,利用API撰寫程式後開發而成;另一類則是利用AutoIT、按鍵精靈...等撰寫出獨立的UI下單程式。
第一類程式有些限制,證券公司提供的API,經常會限制每個月的交易額,以我這種少量長期且定期定額購買的人來說就不合適,第三方公司提供的API,則通常都要花錢,
最大的麻煩是,不論是證券公司提供的API或者第三方公司提供的API,幾乎都綁定Windows,要在Linux平台開發有其困難。

為了符合我想要的環境,我希望系統的核心部份能夠運作在Linux或Windows上,下單、資料擷取等子系統相互獨立在不同平台,且各子系統間能夠溝通,
因此想到了使用AutoIT為基礎開發一個TCP Socket的下單機,如此一來,我可以用獨立的電腦,或者虛擬電腦來安裝Win2000、XP(目前我使用Win2k+IE6),
以這台獨立的電腦來執行AutoIT的下單伺服器和證券軟體(網頁或應用程式),其他包括分析系統...等直接透過Socket(telnet)下指令給它,完成下單動作。

下單系統功能:
目前的下單機版本為0.2-beta版,是我目前在使用的版本,它有如下功能:
1. TCP Socket(telnet) 命令式交談介面
2. 支援寶來證券、日盛證券股票下單
3. 股票下單支援現貨、零股、盤後交易(盤後交易沒用過)
4. 寶來證券支援下單與成交回報;日盛證券僅支援下單
5. 下單系統的下單功能使用證券公司網頁下單(日盛證券的下單支援程式下單和網頁下單),網頁下單不會有多久沒交易後,停用系統的問題(日盛證券目前3個月沒交易,HTS禁止使用,網頁下單無此限制)。
6. 本系統正式註冊為「自由軟體」,為GPL3.0授權,可任意使用、傳播,唯一要求,修改過、增加功能後,請協助更新下單系統功能,至少請把程式碼公佈。

下單系統原理:
下單系統以AutoIT撰寫而成,原理很如下:
系統核心為一個AutoIT的TCP Socket Server,當連入後,可以以命令方式下達指令。
當系統收到指令後,按特定指令進行特定的操作,例如:login IEHTS2 A1234567890,xxxxxxxx。
便會自動的打開IE,自動登入到日盛證券。

下單系統系統需求:
1. 獨立的Windows系統(目前我使用Win2K)
2. IE6(IE7沒測試過)
3. AutoIT v3
4. 記憶體至少256MB
5. .Net 2.0(此為證券軟體、及之後其他相關程式需要)
6. Java 6(此為證券軟體、及之後其他相關程式需要)

我這邊的虛擬電腦分配給它的是:
Win2K+IE6+256MB RAM

下單系統簡單操作方法:
1. 拿到程式後,如果是.exe檔,直接執行即可;如果是整個SourceCode,直接執行StockServer.au3。
2. 連接埠預設為58890
3. telnet連入後(請使用linux的telnet或Windows的PieTTY,,不要使用Windows命令提示字元的telnet,會有顯示和輸入問題),可輸入help,即可顯示出使用的指令和參數說明。如下:
xxxx [/xxxx] -oooo- telnet 192.168.1.1 58890
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
help
200--
Command list:
login [HTS2|IEHTS2|IEFin|EWinner] [Account],[Password]
Ex: login HTS2 A123456789,12345678

logout [HTS2|IEHTS2|IEFin|EWinner]
Ex: logout HTS2

trade [HTS2|IEHTS2|IEFin] [buy|sell],[spot|fractional|afterhour],[StockID],[StockPrice],[StockCount]
Ex: trade IEFin buy,spot,2002,29.3,2

report
Ex: report

exit
Ex: exit

shutdown
Ex: shutdown
200--

4. HTS2表示日盛證券程式版;IEHTS2表示日盛證券網頁版;IEFin表示寶來網頁版;EWinner表示寶來程式版(寶來點金靈)
目前寶來點金靈只支援程式開啟,不支援下單與查詢動作。
IEFin支援下單與查詢。
HTS2和IEHTS2均支援下單,不支援查詢。

下單系統0.2-beta注意事項:
1.
這個版本雖然是beta版,但它是我目前正在使用的版本,穩定性我認為還算可以接受。

2.
因為我自己是在寶來松山分行開戶的,因為寶來網頁的分行選擇是用select group,不大會處理,因此當時就先寫死了。
目前暫時性的解法是,先連上寶來的
https://trade.finairport.com/FinTradeSys/Utility/login/login_page.asp
然後按選擇分公司,然後看自己是哪個分公司,接著數數看,是0-base,這表示「忠孝分公司」是0,接著往下數,目前預設是「松山分公司」,是「17」,如果是「土城分公司」,就是「4」。
確定數值後,下載「AutoStockServer-src.7z」,並解開,修改「IELogin.au3」,把
_IEFormElementOptionSelect ($oUNITNO, 17, 1, "byIndex")
改為(以「土城分公司」為例)
_IEFormElementOptionSelect ($oUNITNO, 4, 1, "byIndex")
即可正常使用IEFin下單。
如果要透過AutoStockServer啟動EWinner,同樣的,要修改分公司,
啟動EWinner後,看看自己分公司,假設還是「土城分公司」,則複製「9794 - 土 城」,然後修改「EWinnerLogin.au3」,把
ControlSetText("系統登入", "", "[CLASS:Edit; INSTANCE:2]", "979H - 松 山")

改為
ControlSetText("系統登入", "", "[CLASS:Edit; INSTANCE:2]", "9794 - 土 城")
即可登入EWinner。

3.
這個版本我忘了把GPL3.0 Licenses File加入,此時成為GPL3.0授權。

4.
操作方法、說明目前還沒準備好,應該會在下週或下下週處理。

5.
這個專案還很新,還有不少需要修改的部份,也歡迎會或熟AutoIT並對程式交易有興趣的同好加入修改,雖然code有點醜,但想寫新功能或其他證券公司支援的,都歡迎加入。

6.
雖然目前還沒寫使用說明,但操作原則上如下:
a. 先確定有安裝AutoIT v3,如果沒有,請到
http://www.autoitscript.com/autoit3/downloads.shtml
下載安裝,這是免費的,不需要花錢或註冊。
b. src要執行,解壓縮到某個目錄後,直接執行「StockServer.au3」,右下角狀態列出現AutoIT圖示,即表示執行中。
c. 目前預設的TCP Port是58890(要改,請修改StockServer.au3,改Global Const $Port = 58890),要使用,可用Linux上的telnet連入58890(Windows可以使用PieTTY,不要使用Windows命令提示字元的telnet,顯示會有問題)
d. 連入後,可直接打help,即可出現所有操作的說明

7.
目前功能中的report,僅支援寶來證券的IEFin(寶來網頁)的回報,且回報部份文字顯示的分隔還有些問題。
日盛證券的部份,目前report遇到瓶頸,還沒辦法成功實做出來。

8.
目前僅支援「股票下單」,不支援期貨下單;股票下單支援「現貨」、「零股」,程式支援盤後交易,但我自己沒玩過。

9.
本程式因為使用AutoIT操作系統,會類比的模擬鍵盤和滑鼠的輸入,因此強烈建議讓程式執行在獨立電腦或者虛擬電腦上,避免人為介入後影響程式動作。
如果有興趣又有些無聊,可以跟我一樣,下指令後,看著它操作程式。

10.
本程式僅供測試、研究使用,如果因為錯誤操作造成巨大損失(例如下單買現貨或賣現貨,單位/數量輸入錯誤);又如果因為證券公司網頁修改、作業系統不穩、個人憑證沒更新...等問題導致下單失敗,作者概不負責。

下單系統專案網站與下載連結:
專業網站:http://www.openfoundry.org/of/projects/1741
下載位置:http://www.openfoundry.org/of/projects/1741/download

5 則留言:

George 提到...

請問版大,
您有無AUTOIT 的元大 API 下單碼? 能提供給我嗎?
我問了我的元大的營業員, 但他們沒提供 AUTOIT 的示範程式.
謝謝.

Cody 提到...

這個不是呼叫API,這個是模擬網頁操作下單。
另外,這個是針對「股市」,就我的瞭解,API好像都只提供期貨。

Eddie 提到...

版大您好
我在執行您的StockServer檔時,會顯示”Server unable to initialize”(不管是.exe檔或是從AutoStockServer-src解壓縮的StockServer.au3), 您知道會是甚麼原因嗎? 感謝指導!!

Cody 提到...

您好。
StockServer執行後,會在「系統列」顯示AutoIT的圖示(我好像更改過.exe的圖示),那就表示已經成功執行了。
「Server unable to initialize」意思是,Server已經執行了,重複執行,則該TCP Port已經被佔用,所以顯示「Server unable to initialize」。

匿名 提到...

不好意思~請問一下 你有幫別人寫程式ㄇ?? 要多少錢?