精華區 - 閱讀文章
您現在的位置是 Stock - 。
< 返回文章列表
作者: yuting0103 (凌波微步輕舞飛揚) 看板: Stock
標題: 自動下單機部份原碼{use Autoit}
時間: Mon Mar 5 00:58:54 2007
[我貼在聚財網的文章, 貼給有興趣程式交易自動下單的朋友]
有點懶^^" 未編排, 建議轉到一般的信箱去看
==== 使用Autoit 完成程式交易自動下單
最近比較忙^^" 不是忙公司的事就是忙著幫小狗把屎把尿, 所以進度嚴重落後...
剛剛花了點時間把基本架構寫好, 但是控制網頁下單的部份我先保留
下面程式碼已經寫好基本的架構, 大家照著修改應該可以完成自己的下單機
使用方法 , 將程式碼存成 XXX.au3 , 建議程式寫好後可以直接編譯成 exe 執行檔, 會更穩定速度更快,還可以拿到別台電腦直接執行.
1. 請先準備三隻文字檔, 跟下單程式放在同一目錄下
order.txt 這個檔案是跟程式交易軟體中間的橋樑 (下單匣)
MarketPosition.txt 這個檔案是紀錄你目前下單戶頭裡的原本已有的部位
OrderUnit.txt 紀錄基本單位的下單口數
程式交易軟體負責丟目前的基本單位給 order.txt , 多單為正(1,2,3...基本單位, 非口數), 觀望為0 , 空單為負(-1,-2,-3.....基本單位, 非口數)
自動下單範例: 如果目前 程式交易下給下單匣 order.txt 為 0 , MarketPosition.txt 紀錄亦為0, OrderUnit.txt 基本單位下單口數為3
如果程式交易軟體丟出 -1 給order.txt , 則 會下空單 -1x3 - 0 = -3 , (order*OrderUnit - MarketPosition), 也就是下三張空單到下單網頁, 下單完成後MarketPosition會紀錄新的戶頭部位
==================================
這個巨集已可以直接執行, 你可以先測試自動下單流程, 其他
1. 網頁連結請修改成你的券商的下單網頁
2. 將下單步驟寫進去即可, 請參考Autoit提供的網頁控制的範例(Autoit的範例寫的都很清楚, 依樣畫葫蘆即可, 比寫程式交易還簡單,不要怕他有多難....)
請不要使用控制鍵盤滑鼠的方式, 請直接控制網頁欄位與按鈕!! 擅用Autoit提供的"Autoit Window Info"工具.
3. 這個架構只簡單寫了自動下單的流程(只花了一個晚上也寫不了多少^^") , 如果你發現我的流程有問題, 請幫我修正一下或給我些建議, 謝謝^.^
下一版會把所有的提示欄, 狀態欄等加進去
再下一版會希望可以跟下單網頁結合, 直接從下單網頁取得所有的資訊(下單回報, 保證金資訊等...)
因為我平常還要上班^^" 沒有太多時間寫這東西, 請大家幫我一起努力^^"
相關程式碼歡迎自己修改後自己賣文也OK! 最重要的是分享!
其他.....
有特別需求的可以悄悄話給我
照慣例....未完待續....
希望大家一起努力
不論是程式碼或是回文建議鼓勵都好, 大家一起討論
=============================================================
不一定要控制下單網頁, 用類似的流程直接控制券商提供的下單軟體也可以.
==================================以下程式碼僅供參考
;寫在前面, 相關程式碼僅供參考, 不負任何責任
;事關金錢, 請務必謹慎修改
;
#include <GUIConstants.au3>
#include <IE.au3>
_IEErrorHandlerRegister ()
$oIE = _IECreateEmbedded ()
GUICreate("自動下單系統V1 (for 元大)", 1000, 800, _
(@DesktopWidth - 1000) / 2, (@DesktopHeight - 800) / 2, _
$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 10, 980, 640)
$GUI_Button_Beginning_order = GUICtrlCreateButton("啟動自動下單", 10, 650, 100, 30)
$GUI_Button_Stop_order = GUICtrlCreateButton("停止自動下單", 10,680 , 100, 30)
$GUI_Button_Set_Position = GUICtrlCreateButton("設定戶頭口數", 10, 710, 100, 30)
$GUI_Button_Set_order_unit = GUICtrlCreateButton("設定下單單位", 10, 740, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("下單首頁", 10, 770, 100, 30)
_IENavigate ($oIE, "https://etrade.ycpf.com.tw/main.htm")
;;初始化
$BeginOrder = 0
$file = FileOpen("MarketPosition.txt", 0)
$MarketPosition = FileReadLine($file)
FileClose($file)
$file = FileOpen("OrderUnit.txt", 0)
$OrderUnit = FileReadLine($file)
FileClose($file)
MsgBox(0, "Begin","目前戶頭倉位為 : "&$MarketPosition&" , 若有錯誤請修正",10)
MsgBox(0, "Begin","目前下單基本單位為 : "&$OrderUnit&" , 若有錯誤請修正",10)
;;設置欄位以設定基本下單單位
;;TBD
;;目前欄位設定 MarketPosition.txt
;;TBD
;;設置欄位顯示目前自動下單狀態是否已啟動
;;TBD
GUISetState() ;Show GUI
; Waiting for user to close the window
While 1
$msg = GUIGetMsg()
;讀取下單匣 order.txt
$file = FileOpen("order.txt", 0)
$order = FileReadLine($file)
FileClose($file)
$send2order=$order*$OrderUnit-$MarketPosition
Select
Case $msg = $GUI_EVENT_CLOSE ;;;結束程式
ExitLoop
Case $msg = $GUI_Button_Home
_IENavigate ($oIE, "https://etrade.ycpf.com.tw/main.htm")
Case $msg = $GUI_Button_Beginning_order ;;開始自動下單
_IENavigate ($oIE, "https://etrade.ycpf.com.tw/main.htm")
$tmp=MsgBox(1, "開始自動下單?", "提醒您記得檢查目前口數設定與基本單位口數已正確,是否要開始自動下單?")
If $tmp = 2 Then ContinueLoop
If $tmp = 1 Then $BeginOrder = 1
MsgBox(0, "Begin", "已啟動自動下單!",1)
;;設定自動下單狀態欄位為自動下單已啟動
;;TBD
Case $msg = $GUI_Button_Stop_order
$tmp=MsgBox(1, "停止自動下單?", "您確定要停止自動下單嗎?")
If $tmp = 2 Then ContinueLoop
If $tmp = 1 Then $BeginOrder = 0
MsgBox(0, "Begin", "已停止自動下單!",1)
;;設定自動下單狀態欄位為自動下單已停止
;;TBD
Case $msg = $GUI_Button_Set_Position
Do
$MarketPosition = InputBox("修改戶頭倉位", "請輸入目前戶頭倉位口數.", $MarketPosition)
Until (StringIsInt ($MarketPosition))
$file = FileOpen("MarketPosition.txt", 2)
FileWriteLine($file,$MarketPosition)
FileClose($file)
MsgBox(0, "Begin","目前戶頭倉位為 : "&$MarketPosition&" , 若有錯誤請修正",10)
Case $msg = $GUI_Button_Set_order_unit
Do
$OrderUnit = InputBox("修改下單基本單位", "請輸入欲下單之基本單位.", $OrderUnit)
Until (StringIsInt ($OrderUnit))
$file = FileOpen("OrderUnit.txt", 2)
FileWriteLine($file,$OrderUnit)
FileClose($file)
MsgBox(0, "Begin","目前戶頭倉位為 : "&$OrderUnit&" , 若有錯誤請修正",10)
EndSelect
If $Send2Order*$BeginOrder<>0 Then
$MarketPosition=$MarketPosition+$Send2Order
;;; 下多單
;; TBD
If $Send2Order>0 Then
;;在此控制網頁下多單
Else ;;;下空單
;; 在此控制網頁下空單
;;TBD
EndIf
$file = FileOpen("MarketPosition.txt", 2) ;;下單紀錄回寫於戶頭部位記錄檔 MarketPosition.txt
FileWriteLine($file,$MarketPosition)
FileClose($file)
;;更新 Marketposition Status 欄位
;;TBD
_IENavigate ($oIE, "https://etrade.ycpf.com.tw/main.htm")
MsgBox(0, "下單動作完成","下單已完成,目前戶頭倉位應為 : "&$MarketPosition&"請務必檢查是否有確實下單",10)
EndIf
WEnd
GUIDelete() ;;關閉程式
Exit
=================================================================
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.3.169
→ yuting0103:赫然發現....PTT好像有自動換行的功能... 03/05 01:02
推 yphs88:推...= ="我自己留文一份了...XD 03/05 01:15
推 costello:推一個∼適合 Trading 版的好文 03/05 04:30
