免費的電腦化自動下單方法(autoit, macro express, 自動排程)

Robot on Flickr - Photo Sharing!
(photo by genewolf)

這篇會寫很多,覺得有用的看倌要多多支持本站啊。應該知道怎麼支持吧。 🙂

前言:
此篇文章在探討如何將您手上的電腦變成可以自動下單的機器,而不用守在電腦前面,不用經過 API 程式/自動下單機來下單,只用簡單的 EXCEL 檔案,就可以結合 autoit, macro express, 自動排程等程式來作自動下單。如此一來,就可以省去下單機的費用(大多是一季 3000 元台幣)。

我會這麼做,也是希望日盛 HTS 可以開放 DDE 的功能,目前 DDE 功能不是所有人都可以用,必須要每個月下 20 口單才可以有 DDE 功能。因為我曾被鎖 DDE 功能,像這種必須而簡單的功能,有很多其他期貨商的看盤軟體也有,還免費,所以不一定得日盛 HTS 才可以,在此希望刺激大家多用 EXCEL + DDE 來作自動下單,才能夠讓日盛知道它因為沒有提供免費 DDE,而損失了很多客源及賺取手續費的機會。

另外也希望刺激一下下單機費用的降價。

你所要準備的東西:
1. 一個 DDE 來源。有些看盤軟體會有,請洽詢各證券、期貨銀行。目前日盛有使用限制。
2. 自己寫的一個 EXCEL 檔案。內含你的交易策略,等一下會教你重點要怎麼做,但沒有講到的 EXCEL 公式你可能得自己去學。
3. macro express 軟體(需付費),這軟體會讓你的一些執行動作自動化。
4. autoit 軟體(免費)。這軟體跟 macro express 很像,也是讓電腦自動化的軟體,可模仿人類的動作,看著電腦動起來,實在是很可愛的呀。用這個軟體作兩個 EXE 執行檔(submit.exe, vb-go.exe)。
5. 自動排程(WINDOWS 內建)。
6. 期貨下單軟體。

下單的原理、流程:
(1) DDE 傳送價格資料給 EXCEL 檔
—> (2) EXCEL 公式運算出空手/買進/賣出的訊號。
—> (3) EXCEL 依照訊號啟動 VB 程式。
—> (4) autoit 作出來的執行檔 vb-go.exe 程式,讓自動排程程式,在固定時間叫喚 EXCEL 檔,以讓檔案作執行 VB 程式的動作。
—> (5) VB 程式呼叫 autoit 軟體所做出來的下單執行檔 (submit.exe)。
—> (6) EXE 檔點擊看盤軟體 (如 HTS) 的下單鍵(需將買賣的價位、口數、密碼等先鍵入HTS看盤軟體),然後將 EXCEL 檔案關掉。到此結束下單流程。
—> (7) 盤後用 EXCEL 裏的 MACRO 功能,錄一個 MACRO,把你盤後會更新此 EXCEL 檔內的動作給錄起來,以後 PLAY 那個 MACRO ,就可以幫你每天更新資料。而不用作繁複的 EXCEL 價位更新動作。


此下單流程的限制:
可能有以下限制:只可作單次下單。多策略可能要開不同的 EXCEL 檔,在不同的時段執行。另外,在 VB 程式或 EXCEL 檔案的儲存格中,可能因為個人交易策略的不同,有些地方仍需手動更新。

針對上面的下單流程,作註解:
(1) 要開啟 DDE 傳送的看盤軟體,並且把 DDE 的資料接到 EXCEL 檔裏。
(2)(3) EXCEL 檔裏要寫入一份 VB 的程式碼,用來啟動下單按鍵的 autoit 程式,如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim S As String

 If Sheet1.Cells(10, 1) = 2 Then
  S = Shell("C:submit.exe", vbNormalNoFocus)
 End If

End Sub

註1: 程式碼原出處:AUTOIT自動下單之簡易的EXCEL決策下單(只有一個下單動作),原作者:奔雷,在此小作更改以便講解。)

註2: 要注意的是,Sheet1.Cells(10, 1) 指的是 EXCEL 檔裏的 A10 儲存格。上面的意思是說 A10 格子若運算出結果是 2 那麼就啟動 submit.exe 。

註3: 而 submit.exe 是用 autoit 程式作出來的,就是所謂的「幫忙按下單鍵」的小程式,下面再教怎麼製作出來。

註4: A10 格子可以用 =B10+C10 這個公式來填入,而 B10 格子可以填入下面公式: =IF(Q5>4000,1,0) ,此格的意思就是當 Q5 這格(DDE 傳送過來的價位)是大於 4000 點,那麼 B10 格子會顯示為 1 ,否則小於等於 4000 點的話,該 B10 格子會顯示為 0。那麼,C10 這格子也可以套類似這樣的公式,也就是說當 B10 和 C10 都滿足了的話,都會顯示為 1,而 A10格子就會是2,A10格子是2的話,會觸動 submit.exe,去下單。所以說 B10 和 C10 是EXCEL裏,交易的兩個重要條件,兩個條件符合就買進或賣出。

註5: 我作了兩個儲存格子,一個是買進格子 A10 ,一個是賣出格子 A11。那麼,當我當天改作空的話,我就要手動把 VB 程式中的Sheet1.Cells(10, 1) 更改成 Sheet1.Cells(11, 1) 。

(4) 作 vb-go.exe 的原因是,如果你的策略是在某時段觸發的,那麼會在 EXCEL 檔中插入時間的 DDE 資料,如此,會有這樣的公式在K7儲存格中: =if (k6>134000,1,0) ,這個公式是說若 K6 是收取當月當日時間的 DDE 資料的格子,若K6是下午13點:40分:00秒之後,那麼K7儲存格就會是1,否則為 0。若你的交易策略還包含了某時間才觸發,那麼上面的交易的兩個條件,加上這個時間條件,總共為3條件,你的 VB 公式就要改為:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim S As String

 If Sheet1.Cells(10, 1) = 3 Then
  S = Shell("C:submit.exe", vbNormalNoFocus)
 End If

End Sub

而其實這個 VB 程式,在沒有人去動儲存格的時候,是沒有動作的,我曾看過 13:40:00 秒後,滿足了 Sheet1.Cells(10, 1) = 3 的條件,卻還是沒有去觸發 submit.exe 的情況,這其實很簡單,用 vb-go.exe 模擬人類去點 EXCEL 某儲存格(如 S7) 一次,即可觸發 VB 程式。但你還是要注意,在離開座位以前,你的 EXCEL 座標不可以停留在那個儲存格 S7,如此才能觸發 VB。

這個 vb-go.exe 用 autoit 的內建的 SciTE Script Editor 來 COMPILE。請在 EDITOR 裏面鍵入以下程式碼:

WinSetState ( "Microsoft Excel", "", @SW_MAXIMIZE)
WinActivate ( "Microsoft Excel" )
MouseClick ( "left", 458, 298, 1)

存檔以後再到 vb-go.au3 按右鍵,再 COMPILE 成 vb-go.exe 檔即可。上面的 458, 298 指的是螢幕的座標,你也可以定到 S7 的格子裏,座標可以用 autoit 程式的 Autoit Window Info 畫面中間的那個 Mouse 那一頁中的 position 資料求出。

using "autoit v3 window info" to get mouse position on Flickr - Photo Sharing!

另外,用 WINDOWS 內建的排程軟體,訂定它下午 13:41:00 秒執行即可。

(5) 關於作 submit.exe 我是參考《理論上大家都可以用AUTOIT自動下單(以YESWIN為例)簡易解說》一文所寫出來的,一樣用內建的 SciTE Script Editor,放入 autoit 原始碼如下(放在 submit.au3 ):

WinSetState ( "JIHSUN HTS", "", @SW_MAXIMIZE)
WinActivate ( "JIHSUN HTS" )
MouseClick ( "left", 1018, 438, 1)

WinSetState ( "Microsoft Excel", "", @SW_MAXIMIZE)
WinActivate ( "Microsoft Excel" )
WinClose ( "Microsoft Excel" )
MouseClick ( "left" )

上面的意思是說,切換到HTS,並在螢幕座標 1018, 438 的位置作點擊(此位置每台電腦都不一樣,你得自己試看看你的 HTS 裏的下單鍵在哪個螢幕座標),點擊後將 EXCEL 檔案關閉,以免重覆下單。這個 au3 檔案的寫法解釋,在官方網站有,本機也會有,多查查吧。另外在實驗滑鼠是否會按照自己的意思來動,可以按兩次 F5 鍵,就可以讓 autoit 執行 script.

請參考我下面這張 SCREENSHOT 的四個 NOTES,可幫助你使用 AUTOIT WINDOW INFO 來得知滑鼠所在的座標。
using "autoit v3 window info" to get mouse position on Flickr - Photo Sharing!

一樣,成功後,把 submit.au3 這個檔案上按右鍵 COMPILE 成 submit.exe 並存至 C 槽下即可。

到這邊全部的自動化完成。

大概的流程就是把 excel 當作收取價位的工具,經由公式運算,在適當的時間觸發了 EXCEL 裏面的 VB 程式, VB 程式再去呼叫 submit 程式,把單子送出去。

我的這個自動化的方法,可能不適合短線進出,而我是作趨勢盤中、長線,所以除非必要,只看日收盤價。我的策略在尾盤有時會出現,而作多或放空準備是在開盤就準備好,所以我就可以先把 HTS 裏的密碼、口數、市價、關閉確認視窗等等東西統統先打好,然後就可以快樂地去上班(賺一些固定收入)了。這樣就不用在上班看盤的啦。

其他的參考事項(也很重要):

另外,關於先前提到的 macro express 請參考:
* macro express教學-自動啟動HTS與自動登入HTS
* macro express教學:日盛HTS過版更新無法自動登入怎麼辦?程式自動交易的大麻煩
這些主要是處理 HTS 自動登入的方法。

也請多多使用 autoit v3,中文說明檔在此:AutoIt v3 簡體中文說明檔

參考《替 VBA 簽上數位憑證》省去一些 EXCEL 上作業的麻煩。

廣告

3 comments

  1. Dear Chieftain:

    您好!我是個投資新手,只會使用簡易Excel操作,也是第一次使用統一期貨看盤系統(統eVIP國內版, 由凱衛資訊股份有限公司提供),我使用看盤系統提供的DDE Excel功能,產生一個Excel檔案,其中一個工作表內有兩列資料,第一列是表頭(例如:日期,時間,成交價,單量….),不會更動的文字,
    第二列是數字(例如:時間,成交價,單量….),卻是不停跳動、變化的數字,
    請問:我如何設定,才能將這些不停跳動、變化的數字,一列、一列往下儲存(最新的資料在第二列,依序往下推擠) ?

  2. 1.未使用的儲存格CELL1 = DDE 公式的儲存格CELL2 (上面這段要放在公式中)
    2.只要CELL1的值改變就會觸發 Caculate 事件,之後只要在 Worksheet_Caculation 中寫下你要的功能即可..不過,會不會有資料loss的問題?莫宰羊 ^ ^..

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s