COCO研究院

 找回密碼
 註冊
搜索
樓主: 小娃

[教學] 洞悉AmiBroker的backtester框架(作者 michael-knight)

 關閉 [複製鏈接]
 樓主| 發表於 09-11-9 22:31 | 顯示全部樓層

Ticker
Ticker1Ticker1Ticker2Ticker2Ticker3Ticker3
Individual CBPass1Pass2Pass1Pass2Pass1Pass2N/A
Portfolio CBPass1N/APass1N/APass1N/APass2

表格 4
Individual
Portfolio CB AFL執行回合

 樓主| 發表於 09-11-9 22:32 | 顯示全部樓層
pic7.gif

圖表 5
回朔測試參數選項設置視窗

 樓主| 發表於 09-11-9 22:35 | 顯示全部樓層
最進階操作CBI,我們可以利用CBI架上訂單管理層,將交易信號、交易價格、時間、訂單編號欄位加入,實現限價單(IOC或Pending-Order),使用者可以操作開倉、平倉、更改訂單等動作。
  1. SetOption("UseCustomBacktestProc", True ); //進入CB,CB程序直接寫在底下
  2. SetCustomBacktestProc( "C:\\MyPath\\MyCustomBacktest.afl" ); //進入CB,指定含入的CB程序
  3. if  ( Status("action") == actionBacktest  ) {
  4. printf(“Current working action: Backtest”);
  5. }
  6. else
  7. if  ( Status("action") == actionPortfolio ) {
  8. printf(“Current working action: cunstom backtest”);
  9. /*2. trading position type, Buy/Sell or /Short/Cover assignment*/
  10. Buy = C < 39.00; Sell = 0; Short = 0; Cover = 0;  
  11. // retrieve the COM interface to portfolio backtester
  12.        bo = GetBacktesterObject();
  13.     bo.backtest();  //run the default backtest procedure
  14. //add custom backtest procedure here
  15. }
複製代碼

Code 3
AFL
客制化回朔測試

 樓主| 發表於 09-11-9 22:36 | 顯示全部樓層
pic8.gif

圖表 6  回朔測試參數選項設置Portfolio tab視窗
 樓主| 發表於 09-11-9 22:37 | 顯示全部樓層
Backtester物件方法依彈性度控的制層次分成高中低,參照[1][3]裡有詳細的backtester物件詳細操作方法和屬性,若只需要簡單加入回朔測試效能因子至回朔測試報告,用高階層次和呼叫預設回朔測試程序即可達成。
  1. /* Now custom-backtest procedure follows */
  2. if( Status("action") == actionPortfolio )
  3. {
  4. bo = GetBacktesterObject();
  5. bo.Backtest(); // run default backtest procedure
  6. st = bo.GetPerformanceStats(0); // get stats for all trades
  7. expectancy =
  8. st.GetValue("WinnersAvgProfit")*st.GetValue("WinnersPercent")/100 +
  9. st.GetValue("LosersAvgLoss")*st.GetValue("LosersPercent")/100;
  10. // Here we add custom metric to backtest report
  11. bo.AddCustomMetric( "Expectancy ($)", expectancy );
  12. }
複製代碼
Code 4  CBI範例一,高階使用方式
 樓主| 發表於 09-11-9 22:38 | 顯示全部樓層
中階使用,signal、trade物件為backtester物件的成員,交易信號經處理後放至signal物件,執行迴圈處理每一根K棒,使用者完全管控該信號處理方式,是否做實際交易,根據當時淨值調整每筆交易部位大小(固定金額),管控持有倉位淨值佔總淨值水位,這些都能達成。
  1. if( Status("action") == actionPortfolio ) {
  2. bo = GetBacktesterObject();
  3. bo.PreProcess();
  4. for ( bar = 0; bar < BarCount; bar++ ) {
  5. /* custome backtest procedure start here*/
  6. CurrentPortfolioEquity = bo.Equity;
  7. for ( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal( bar ) ) {
  8. if( CurrentPortfolioEquity > 50000 ) sig.PosSize = -20;
  9. if( CurrentPortfolioEquity > 60000 ) sig.PosSize = -16;
  10. if( CurrentPortfolioEquity > 80000 ) sig.PosSize = -12;
  11. }
  12. /* custome backtest procedure end here*/
  13. bo.ProcessTradeSignals( bar );
  14. }
  15. bo.PostProcess();
複製代碼
Code 5  CBI範例一,中階使用方式
 樓主| 發表於 09-11-9 22:39 | 顯示全部樓層
方法PreProcess初始化回朔測試所需用到的變數,ProcessTradeSignal結合交易信號、交易價格落在K棒範圍內則會成交,將實際交易產生倉位記錄至trade物件, 每個trade物件管理一筆交易,交易記錄是由很多trade物件組成,分成成交且已平倉之交易與未平倉之交易。方法PostProcess將未平倉之交易關閉並產生最後回朔測試報告。Backtester的方法backtest實現預設回朔測試,等效於中階操作執行一次方法PreProcess、每個bar執行ProcessTradeSignal、執行一次PostProcess這三個方法封裝而成的處理程序。


    若我們希望交易的條件不再局限在交易信號、交易價格,實現分批交易,完全掌控進場與出場,則可以自行規範進場與出場策略機制,直接呼叫最低階的EnterTrade和ExitTrade方法來操作trade物件,中階方法ProcessTradeSignal內部最後即是呼叫此兩個方法實際交易,也包含低階方法UpdateStats、HandleStops ,MaxOpenPosition、可下單餘額是否足夠於方法EnterTrade內比對。


    把backtester最底層函式包裝成訂單管理功能界面,此界面方便使用者於新增、退出或修改訂單時能綁定掛單類型、滑點控制、停損停利、移動式停損停利,還能記錄訂單完整歷程。
 樓主| 發表於 09-11-9 22:40 | 顯示全部樓層
  1. if( Status("action") == actionPortfolio ) {
  2. bo = GetBacktesterObject();
  3. bo.PreProcess();
  4. //encapsulate low-level method to build Order manage layer contain bellow feature
  5. /* full control trade signal & trade price, decide your own trade conditions */
  6. /* which signal do you want to deal with */
  7. /* limit IOC(immediate or cancel) and pending Order */
  8. /* slippage control */
  9. /* Apply any type stop opened position */
  10. bo.PostProcess();
  11. }
複製代碼
Code 6  CBI範例,低階使用框架


Reference:
[1]Porfolio Backtester Interface Reference Guide
[2]http://www.amibroker.com/kb/category/afl/custom-backtest/
[3]http://www.amibroker.com/docs/Houston2.pdf
[4]Portfolio-level backtesting
[5]Back-testing your trading ideas
[6]Backtesting systems for futures contracts
 樓主| 發表於 09-11-9 23:25 | 顯示全部樓層
這篇文章是國內應該只有這一篇,
極具獨創性。
歡迎愛好AmiBroker的朋友一同加入討論。
發表於 09-11-10 01:01 | 顯示全部樓層
遊蕩了幾天 , 終於等到真正有實質的養分來充電了 !!  感謝 !!
發表於 09-11-10 03:52 | 顯示全部樓層
這可以出書了
 樓主| 發表於 09-11-10 07:40 | 顯示全部樓層
michael-knight大花了很多時間研究AmiBroker的回測,
及自動下單API的做法,
國內對這些方法熟悉的人極為稀少。


小娃看到michael-knight的文章相當佩服,
他說他是"順手整理"給我,
寫的洋洋灑灑,圖文並茂。
最後附上reference,和論文格式一樣。
真是高手。


我說想要貼上來,
他說他要再看我排版的稿件有沒有錯。
(嚴謹,有做學問的精神)


大家多研究討論,
能夠為彼此省下不少時間。
 樓主| 發表於 09-11-10 07:42 | 顯示全部樓層
回復 27# ezbentley


我們站內的幾位AmiBroker高手,
合起來可以出台灣第一本AmiBroker專書。
發表於 09-11-10 09:08 | 顯示全部樓層
請問michael-knight大有辦法用AB直接跟國內的卷商的API下單做全自動交易嗎?
我是知道AB可以跟國外的Interactive Brokers的API下單
不過還沒聽說過可以跟任何其他的API下單
 樓主| 發表於 09-11-10 13:41 | 顯示全部樓層
題外話,
剛才我測試了一下google的效能。
google的搜尋能力很強,
昨天貼的帖子今天就找的到。


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

本版積分規則

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

GMT+8, 24-12-23 22:22

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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