COCO研究院

 找回密碼
 註冊
搜索
查看: 4491|回復: 8

可否每根K棒單獨設定ositionSize

[複製鏈接]
發表於 09-10-22 11:34 | 顯示全部樓層 |閱讀模式
假設有10根k棒,第0、1、2根產生買進訊號,單獨對這三根k棒設定positionsize參數為0%、10%、20%可用資金做投資,這樣一來我應該預期輸出交易應該有3筆交易,但是AB的backtest結果無任何成交,為何會這樣呢?

buy = 0;
buy[0] = 1;
buy[1] = 1;
buy[2] = 1;

positionsize[0] = 0;
positionsize[1] = -10;
positionsize[2] = -20;

sell = 0;
發表於 09-11-4 12:38 | 顯示全部樓層
這應該要用到Custom Backtester
Custom Backtester才是AB強大的地方
可是不是那麼容易
我隨便寫寫的 不一定會動
你參考看看

SetCustomBacktestProc("");
SetTradeDelays(0, 0, 0, 0);

// Money Management
if (Status("action") == actionPortfolio) {
        bo = GetBacktesterObject();
        bo.PreProcess();
        for (bar = 0; bar < BarCount; bar++) {
                CurrentEquity = bo.Equity;
                for (sig = bo.GetFirstSignal(bar); sig; sig = bo.GetNextSignal(bar)) {
                        SetForeign(sig.Symbol);
                        if (bar == 2) {
                                sig.PosSize = CurrentEquity * 0.2;
                        }
                        RestorePriceArrays();
                }
                bo.ProcessTradeSignals(bar);
        }
        bo.PostProcess();
}

Buy = ..........;
發表於 09-11-4 12:43 | 顯示全部樓層
推推!
好文!
發表於 09-11-4 12:47 | 顯示全部樓層
 樓主| 發表於 09-11-9 09:40 | 顯示全部樓層
本帖最後由 michael-knight 於 09-11-9 09:45 AM 編輯

非常感謝ezbentley大大的解惑

花點時間把AB回測執行框架說明一下,像蓋房子一樣,基礎要打好。跑回測寫回測若能對內部發生的故事情節有所了解,一切都會變得簡單許多,有助於判斷執行結果合理與否,客制化回測更讓使用者不會只把回測器當黑盒子來用。底下是AB文件backteste簡略的重點整理

1.  使用預設回測:使用者無法變更其回測執行框架

SetBacktestMode(mode);//mode代換成六種內部定義的交易信號處理方式
if (status("action")==actionBacktest) {
  指定交易信號/buy/sell/short/cover
}

2.  使用客制化回測,高階層

SetCustomBacktestProc("");//進入2-pass的客制化回測
SetBacktestMode(mode);//mode代換成六種內部定義的交易信號處理方式
if (status("action")==actionBacktest) {
//pass1  指定交易信號/buy/sell/short/cover
}
else
if (status("action")==actionPortfolio){
// pass2  客制化回測
  bo = GetBacktesterObject();
  bo.backtest(false);
}

3.  使用客制化回測,中階層客制化框架實際就是把backtest()進一步拆解preprocess()/postprocess()/ProcessTradeSignals(bar)

SetCustomBacktestProc("");//進入2-pass的客制化回測
SetBacktestMode(mode);//mode代換成六種內部定義的交易信號處理方式
if (status("action")==actionBacktest) {
//pass1  指定交易信號/buy/sell/short/cover
}
else
if (status("action")==actionPortfolio){
// pass2  客制化回測
  bo = GetBacktesterObject();
  
  preprocess();
  for (bar =0; bar < barcount; bar++) {
    for( sig = bo.GetFirstSignal(); sig; sig = bo.GetNextSignal() )
     {
//使用者可以在這裡變更sig物件的成員變數
     }
     ProcessTradeSignals(bar);
  }
  postprocess();
}

4.  使用客制化回測,低層客制化框架進一步把ProcessTradeSignals(bar)拆解成EnterTrade()/ExitTrade()/ScaleTrade()/UpdateStats()/HandleStops()

SetCustomBacktestProc("");//進入2-pass的客制化回測
SetBacktestMode(mode);//mode代換成六種內部定義的交易信號處理方式
if (status("action")==actionBacktest) {
//pass1  指定交易信號/buy/sell/short/cover
}
else
if (status("action")==actionPortfolio){
// pass2  客制化回測
  bo = GetBacktesterObject();
  
  preprocess();
  for (bar =0; bar < barcount; bar++) {
    for( sig = bo.GetFirstSignal(); sig; sig = bo.GetNextSignal() )
     {
//使用者可以在這裡變更signal物件的成員變數,直接以EnterTrade()/ExitTrade()操作trade物件
     }
//不管有沒有交易信號物件在這能用客制化新增進出場機制或條件EnterTrade()/ExitTrade()
//trade物件分別放在已開倉或平倉兩個spool,可透過bo成員函式操作它
  }
  postprocess();
}
發表於 09-11-9 09:50 | 顯示全部樓層
回復 5# michael-knight


    謝謝分享!好專業啊!幫忙推一下。
發表於 09-11-9 15:46 | 顯示全部樓層
Michael 才是真正高手啊
我都看不懂了
發表於 09-11-14 14:19 | 顯示全部樓層
原作者都看不懂,那我們不就......
發表於 09-11-14 14:23 | 顯示全部樓層
只能幫忙推文。
希望能有更多熟悉AB的人來討論。
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-11-5 16:17

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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