精華區 - 閱讀文章

您現在的位置是 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