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 = 平空
大家就根據自已的條件去判斷, 此時的動作為何?然後再送出交易字串就好囉~
後註: 其實下單機也只是根據指令去動作,大家還是把重點聚焦於你所採用策略是否可行!祝大家成功賺大錢!! 謝謝王子大為我們寫的一系列AmiBroker教學,
您真是行家,一出手就解決了最困難的自動下單。
感謝。
{:4_209:} 真正執行的時候
是不是要讓他一直自動跑Exploration?
因為buy sell short cover只能在backtest mode用
可是我不知道有捨麼辦法可以在盤中跑backtest mode 我也有同樣的問題, 手動執行 backtest 可以看到 buy/seel/short/cover 的時間及價位, 但如何讓 AmiBroker 在盤中即時產生訊號並執行下單? 本帖最後由 王子 於 10-1-21 09:54 AM 編輯
請確定一下你們用 backtest 的時候有沒有勾這些選項!
時間週期改成我們定義的,假如我們是一分鐘要跑一次 afl 那就設 "1min"吧~
這樣才會自動同步圖形哦~ 哦! 對了 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 檔案!
這個只是範例檔,大家可以視自已的需求修正 Run every 是指多久要執行一次 AFL 嗎? 最短是 1 分鐘一次? 回復 6# 王子
請問,Test_Order.vbs-->這是一個什麼樣的檔案呢? Dim myorder
Set myorder=CreateObject("iROrder.API")
myorder.command("1,B,3,4567")
Set myorder = Nothing
就是這樣而已!用vbscript 去動態呼叫下單買賣!
用來測試用的啦... 回復 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?
感謝分享.................... 3年前文章...............仍然有人受益.......................太強了............. 知識只有早知道跟晚知道...
時間不是重點... 六樓 王子大寫的內容似乎有誤
它的語法為
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]