COCO研究院

 找回密碼
 註冊
搜索
查看: 9812|回復: 13

[教學] AB 的自動交易樂章 -- 最終曲 (自動化交易)

[複製鏈接]
發表於 10-1-20 23:06 | 顯示全部樓層 |閱讀模式
本帖最後由 王子 於 10-1-21 09:57 AM 編輯

不知不覺,從抓下AB試玩到現在也一個多星期了!

我也不知不覺 要寫最終章啦~ 完全自動化交易

說真的,AB真是優秀的產品...

如果大家都拿它做為盤後分析的話 其實真的有點浪費 好啦~ 廢言不多說 進入正題!

首先 進行完全程式交易 你需要先把資料來源設定好!  請參考
[教學]圖解 AmiBroker 的 DDE 資料導入流程

再來  我們通常會利用過去歷史資料回測程式 所以請參考
[教學]CSV直接匯入台指K線圖


有資料之後,我們就需要開發良好的程式啦~  

假如手上有現成的程式的話,那就回測吧! 看看績效是否可以接受

假如從頭自已開發,那可以參考
[教學]AB 的自動交易樂章 -- 二部曲 (AFL基本原理)
[教學][教學]AB 的自動交易樂章 -- 三部曲 (AFL基本邏輯)

從簡單的 開始入門!  當然這是遠遠不夠的  

所以下面貼上了官方網站的知識庫...  大家有空就多參考吧~



假設....  假設....   一切都順利了! 績效也符合我們的預期了  那就開始下單自動化吧....

在 AB 之中的自動下單相當的容易,我們先去下載王子下單機 http://irorder.appspot.com/download

一直點選下一步,就可以完成安裝與下單商品、帳號設定 (如果你是安裝0.92之前版本,請反安裝再重裝哦!)

下單機會自動在系統內註冊一個 iROrder 物件,也可以手動執行 C:\Program Files\ROrder\reg.bat

接下來,我們回到AB  只需要在 AFL 加入下列的語法即可


// 建立ROrder物件
RCom = CreateStaticObject("iROrder.API");

//判斷買進條件 成立就買
RCom.command(“1,b,1,0”);

//判斷賣出條件 成立就賣
RCom.command(“1,s,1,0”);

簡單來說,一開始會先建立一個物件  RCom 當 Buy 買條件成立之後,程式就自動送一個字串給下單機叫它買進
如果是賣出,一樣也是絛件成立時 送出一個字串給下單動作

那這個字串代表什麼意思呢??   RCom.command(“帳號,買賣,口數,價格”);

例如,我們要買 下單機內設定好的第一組帳號 5 口價格 價何為 5168 點! 那怎麼送字串呢?

RCom.command(“1,b,5,5168”);

其中 5168 為限定價格,這必需先在下單機內先設定好是限價還是市場,如果用市價買進賣出的話 那價格請設 0

例如,我們要賣出 第三組帳號 1口單 掛市價    怎麼送字串呢?

RCom.command(“3,s,1,0”);


上面就是自動送單流程!!   在AB 之中,總共有下列的交易指定

Buy = 多
Sell = 平多
Short = 空
Cover = 平空

大家就根據自已的條件去判斷, 此時的動作為何?  然後再送出交易字串就好囉~

後註: 其實下單機也只是根據指令去動作,大家還是把重點聚焦於你所採用策略是否可行!  祝大家成功賺大錢!!
發表於 10-1-20 23:28 | 顯示全部樓層
謝謝王子大為我們寫的一系列AmiBroker教學,
您真是行家,一出手就解決了最困難的自動下單。
感謝。
發表於 10-1-21 03:34 | 顯示全部樓層
真正執行的時候
是不是要讓他一直自動跑Exploration?
因為buy sell short cover只能在backtest mode用
可是我不知道有捨麼辦法可以在盤中跑backtest mode
發表於 10-1-21 08:54 | 顯示全部樓層
我也有同樣的問題, 手動執行 backtest 可以看到 buy/seel/short/cover 的時間及價位, 但如何讓 AmiBroker 在盤中即時產生訊號並執行下單?
 樓主| 發表於 10-1-21 09:53 | 顯示全部樓層
本帖最後由 王子 於 10-1-21 09:54 AM 編輯

7.png

請確定一下你們用 backtest 的時候有沒有勾這些選項!

時間週期改成我們定義的,假如我們是一分鐘要跑一次 afl 那就設 "1min"吧~
這樣才會自動同步圖形哦~
 樓主| 發表於 10-1-21 13:59 | 顯示全部樓層
哦! 對了 AB 也有提供判斷功能,請參考
http://amibroker.com/guide/h_alerts.html

它的語法為
AlertIf( BOOLEAN_EXPRESSION, command, text, type = 0, flags = 1+2+4+8, lookback = 1 );

其中 flag 代表的是 1 - buy, 2 - sell, 3 - short, 4- cover



例如 交易系統為
Buy = Cross( MACD(), Signal() );
AlertIF( Short, "EXEC C:\\Program Files\\ROrder\\Sample\\Test_Order.vbs", "啟動外部買", 1 );

這樣的話  當AB內的 Buy 條件成立時就會去執行
C:\Program Files\ROrder\Sample\Test_Order.vbs 檔案!

這個只是範例檔,大家可以視自已的需求修正
發表於 10-1-21 14:17 | 顯示全部樓層
Run every 是指多久要執行一次 AFL 嗎? 最短是 1 分鐘一次?
發表於 10-1-25 21:33 | 顯示全部樓層
回復 6# 王子


    請問,Test_Order.vbs-->這是一個什麼樣的檔案呢?
 樓主| 發表於 10-1-26 09:18 | 顯示全部樓層
  1. Dim myorder
  2. Set myorder=CreateObject("iROrder.API")
  3. myorder.command("1,B,3,4567")
  4. Set myorder = Nothing
複製代碼
就是這樣而已!  用vbscript 去動態呼叫下單買賣!

用來測試用的啦...
發表於 10-3-2 21:21 | 顯示全部樓層
回復 6# 王子

請教王子大:


AlertIF( Short, "EXEC C:\\Program Files\\ROrder\\Sample\\Test_Order.vbs", "啟動外部買", 1 );

因為scan timer設1min,系統為5分鐘系統
在這跟k棒產生short 訊號後,下一跟K棒仍然會產生short 訊號
我用AlertIF( buy, "EXEC C:\\123.txt", 1 ); 做測試,會開啟好幾次notepad
這邊是要靠下單機做判斷嗎?
還是說要設的跟系統perion 一樣的scan timer?



發表於 13-11-16 13:36 | 顯示全部樓層
感謝分享....................
發表於 13-11-16 17:51 | 顯示全部樓層
3年前文章...............仍然有人受益.......................太強了.............
發表於 13-11-16 21:26 | 顯示全部樓層
知識只有早知道跟晚知道...
時間不是重點...
發表於 14-5-23 13:39 | 顯示全部樓層
六樓 王子大寫的內容似乎有誤

它的語法為
AlertIf( BOOLEAN_EXPRESSION, command, text, type = 0, flags = 1+2+4+8, lookback = 1 );

其中 flag 代表的是 1 - buy, 2 - sell, 3 - short, 4- cover
應該是 type 而不是 flag


例如 交易系統為
Buy = Cross( MACD(), Signal() );
AlertIF( Short, "EXEC C:\\Program Files\\ROrder\\Sample\\Test_Order.vbs", "啟動外部買", 1 );
應該是
AlertIF( Buy, "EXEC C:\\Program Files\\ROrder\\Sample\\Test_Order.vbs", "啟動外部買", 1 );
才對
奇怪這麼久都人發現嗎?!
還是我對內容理解有誤?

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-22 10:30

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |