小娃
發表於 09-11-9 22:31
Ticker Ticker1Ticker1Ticker2Ticker2Ticker3Ticker3 Individual CBPass1Pass2Pass1Pass2Pass1Pass2N/APortfolio CBPass1N/APass1N/APass1N/APass2
表格 4
Individual和Portfolio CB AFL執行回合
小娃
發表於 09-11-9 22:32
圖表 5
回朔測試參數選項設置視窗
小娃
發表於 09-11-9 22:35
最進階操作CBI,我們可以利用CBI架上訂單管理層,將交易信號、交易價格、時間、訂單編號欄位加入,實現限價單(IOC或Pending-Order),使用者可以操作開倉、平倉、更改訂單等動作。SetOption("UseCustomBacktestProc", True ); //進入CB,CB程序直接寫在底下
SetCustomBacktestProc( "C:\\MyPath\\MyCustomBacktest.afl" ); //進入CB,指定含入的CB程序
if( Status("action") == actionBacktest) {
printf(“Current working action: Backtest”);
}
else
if( Status("action") == actionPortfolio ) {
printf(“Current working action: cunstom backtest”);
/*2. trading position type, Buy/Sell or /Short/Cover assignment*/
Buy = C < 39.00; Sell = 0; Short = 0; Cover = 0;
// retrieve the COM interface to portfolio backtester
bo = GetBacktesterObject();
bo.backtest();//run the default backtest procedure
//add custom backtest procedure here
}
Code 3
AFL客制化回朔測試
小娃
發表於 09-11-9 22:36
圖表 6回朔測試參數選項設置Portfolio tab視窗
小娃
發表於 09-11-9 22:37
Backtester物件方法依彈性度控的制層次分成高中低,參照裡有詳細的backtester物件詳細操作方法和屬性,若只需要簡單加入回朔測試效能因子至回朔測試報告,用高階層次和呼叫預設回朔測試程序即可達成。/* Now custom-backtest procedure follows */
if( Status("action") == actionPortfolio )
{
bo = GetBacktesterObject();
bo.Backtest(); // run default backtest procedure
st = bo.GetPerformanceStats(0); // get stats for all trades
expectancy =
st.GetValue("WinnersAvgProfit")*st.GetValue("WinnersPercent")/100 +
st.GetValue("LosersAvgLoss")*st.GetValue("LosersPercent")/100;
// Here we add custom metric to backtest report
bo.AddCustomMetric( "Expectancy ($)", expectancy );
}
Code 4CBI範例一,高階使用方式
小娃
發表於 09-11-9 22:38
中階使用,signal、trade物件為backtester物件的成員,交易信號經處理後放至signal物件,執行迴圈處理每一根K棒,使用者完全管控該信號處理方式,是否做實際交易,根據當時淨值調整每筆交易部位大小(固定金額),管控持有倉位淨值佔總淨值水位,這些都能達成。if( Status("action") == actionPortfolio ) {
bo = GetBacktesterObject();
bo.PreProcess();
for ( bar = 0; bar < BarCount; bar++ ) {
/* custome backtest procedure start here*/
CurrentPortfolioEquity = bo.Equity;
for ( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal( bar ) ) {
if( CurrentPortfolioEquity > 50000 ) sig.PosSize = -20;
if( CurrentPortfolioEquity > 60000 ) sig.PosSize = -16;
if( CurrentPortfolioEquity > 80000 ) sig.PosSize = -12;
}
/* custome backtest procedure end here*/
bo.ProcessTradeSignals( bar );
}
bo.PostProcess();
Code 5CBI範例一,中階使用方式
小娃
發表於 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
if( Status("action") == actionPortfolio ) {
bo = GetBacktesterObject();
bo.PreProcess();
//encapsulate low-level method to build Order manage layer contain bellow feature
/* full control trade signal & trade price, decide your own trade conditions */
/* which signal do you want to deal with */
/* limit IOC(immediate or cancel) and pending Order */
/* slippage control */
/* Apply any type stop opened position */
bo.PostProcess();
}
Code 6CBI範例,低階使用框架
Reference:
Porfolio Backtester Interface Reference Guide
http://www.amibroker.com/kb/category/afl/custom-backtest/
http://www.amibroker.com/docs/Houston2.pdf
Portfolio-level backtesting
Back-testing your trading ideas
Backtesting systems for futures contracts
小娃
發表於 09-11-9 23:25
這篇文章是國內應該只有這一篇,
極具獨創性。
歡迎愛好AmiBroker的朋友一同加入討論。
Jonathan
發表於 09-11-10 01:01
遊蕩了幾天 , 終於等到真正有實質的養分來充電了 !!感謝 !! {:4_82:}
ezbentley
發表於 09-11-10 03:52
這可以出書了{:4_153:}
小娃
發表於 09-11-10 07:40
michael-knight大花了很多時間研究AmiBroker的回測,
及自動下單API的做法,
國內對這些方法熟悉的人極為稀少。
小娃看到michael-knight的文章相當佩服,
他說他是"順手整理"給我,
寫的洋洋灑灑,圖文並茂。
最後附上reference,和論文格式一樣。
真是高手。
我說想要貼上來,
他說他要再看我排版的稿件有沒有錯。
(嚴謹,有做學問的精神)
大家多研究討論,
能夠為彼此省下不少時間。
{:4_209:}
小娃
發表於 09-11-10 07:42
回復 27# ezbentley
我們站內的幾位AmiBroker高手,
合起來可以出台灣第一本AmiBroker專書。
ezbentley
發表於 09-11-10 09:08
請問michael-knight大有辦法用AB直接跟國內的卷商的API下單做全自動交易嗎?
我是知道AB可以跟國外的Interactive Brokers的API下單
不過還沒聽說過可以跟任何其他的API下單
小娃
發表於 09-11-10 13:41
題外話,
剛才我測試了一下google的效能。
google的搜尋能力很強,
昨天貼的帖子今天就找的到。