王子 發表於 10-1-20 23:06

AB 的自動交易樂章 -- 最終曲 (自動化交易)

本帖最後由 王子 於 10-1-21 09:57 AM 編輯

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

我也不知不覺 要寫最終章啦~ 完全自動化交易 {:4_87:}

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

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

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

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


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

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

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

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

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

[*]AFL programming[*]AFL - The Basics[*]Introduction to AFL[*]Abbreviated Identifiers v2 (1)[*]AFL Shapes Cheat Sheet (5)[*]BarCount versus BarIndex (1)[*]How Many Trading Days In A Year?[*]Plotting Functions[*]Selected Date Range[*]Weekly High or Low Days[*]AFL - Utilities and Functions[*]Date and Time to Number Conversions[*]Plotting Trade-Lines[*]Popup Window: Preventing pile-ups[*]Restore Last Used Range[*]Zoom-to-Range Applications[*]Using the AddToComposite()[*]Introduction to the ATC[*]Deleting Tickers and Composites (6)[*]GFX Programming[*]Creating GFX Chart-Overlays (v3) (1)[*]Finding Pixel Boundaries (1)[*]Moving Low Level Graphics (GFX) Objects on your Charts (2)[*]Using a GFX Include file

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

在 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教學,
您真是行家,一出手就解決了最困難的自動下單。
感謝。
{:4_209:}

ezbentley 發表於 10-1-21 03:34

真正執行的時候
是不是要讓他一直自動跑Exploration?
因為buy sell short cover只能在backtest mode用
可是我不知道有捨麼辦法可以在盤中跑backtest mode

sdnian 發表於 10-1-21 08:54

我也有同樣的問題, 手動執行 backtest 可以看到 buy/seel/short/cover 的時間及價位, 但如何讓 AmiBroker 在盤中即時產生訊號並執行下單?

王子 發表於 10-1-21 09:53

本帖最後由 王子 於 10-1-21 09:54 AM 編輯



請確定一下你們用 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 檔案!

這個只是範例檔,大家可以視自已的需求修正

sdnian 發表於 10-1-21 14:17

Run every 是指多久要執行一次 AFL 嗎? 最短是 1 分鐘一次?

綠茶妹 發表於 10-1-25 21:33

回復 6# 王子


    請問,Test_Order.vbs-->這是一個什麼樣的檔案呢?

王子 發表於 10-1-26 09:18

Dim myorder
Set myorder=CreateObject("iROrder.API")
myorder.command("1,B,3,4567")
Set myorder = Nothing
就是這樣而已!用vbscript 去動態呼叫下單買賣!

用來測試用的啦...

vedel 發表於 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?



nsmvjmsojki 發表於 13-11-16 13:36

感謝分享....................

keymaker 發表於 13-11-16 17:51

3年前文章...............仍然有人受益.......................太強了.............

nsmvjmsojki 發表於 13-11-16 21:26

知識只有早知道跟晚知道...
時間不是重點...

skyler 發表於 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 );
才對
奇怪這麼久都人發現嗎?!
還是我對內容理解有誤?

頁: [1]
查看完整版本: AB 的自動交易樂章 -- 最終曲 (自動化交易)