calvinhorng 發表於 12-10-14 21:44

Python27 產生 backtest report CSV 檔案

分享一下小小工具
會改的人就可改成批次檔並進行後處理與計算

1. 安裝 Python27
http://python.org/download/releases/2.7.3/
2. 下載並安裝 pywin32 for python27
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20217/
3: command line 執行
C:\python27\python AB.py
4. 產生的 CSV檔可以用EXCEL打開 或繼續用 python 做處理與計算

kilroy 發表於 12-10-14 21:57

感謝大大分享~~

用 AB 的人似乎不多 {:5_272:}

auvitin 發表於 12-10-26 19:26

多謝分享! 會用Python的人確是太少!

heavenweaver 發表於 12-10-27 02:21

我將AB.py改成AutoIT的Au3,隨便寫寫,有錯請包涵及指正。

Local $FN_AA, $FN_AD, $Ticker, $FN_OUT, $AB, $newAA, $newAD, $newSym

$FN_AA="C:\Program Files\AmiBroker\Scripts\3K_AC_2.apx" ;# APX檔改成自己的檔案
$FN_AD="D:\AmiBrokerData\BACKTEST\" ;#目錄路徑改成自己的回測資料庫路徑
$Ticker="TXF" ;#待測的 SYMBOL
$FN_OUT="R:\BTR.csv";#產生檔案路徑與檔名
$AB = ObjCreate( "Broker.Application" ) ; // creates AmiBroker object
$AB.Visible = 0
$newAA=$AB.AnalysisDocs.Open($FN_AA)
$newAD=$AB.LoadDatabase($FN_AD)
$newSym=$AB.Documents.Open($Ticker)

MsgBox(4096, " "Broker Status :", "AmiBroker 開始回測",1)
$newAA.Run(2)
While$newAA.IsBusy = 1
          MsgBox(0, "Broker Status :", " Analysis Win/Doc IsBusy",1)      
          Sleep(100) ; // check IsBusy every 0.1 second
          $newAA.Run(2)
WEnd
$newAA.Export($FN_OUT)
MsgBox(4096, " "Broker Status :", "報告產生完成",1)
$newAA.Close()

補充內容 (12-10-27 08:22):
請將WEnd 上一行的 $newAA.Run(2) 刪掉。

calvinhorng 發表於 12-10-27 07:25

多謝分享

但是 WEnd 上一行的 $newAA.Run(2) 必須刪掉
否則會陷入無窮迴圈

heavenweaver 發表於 12-10-27 08:20

本帖最後由 heavenweaver 於 12-10-27 08:46 編輯

calvinhorng 發表於 12-10-27 07:25 http://coco-in.net/static/image/common/back.gif
多謝分享

但是 WEnd 上一行的 $newAA.Run(2) 必須刪掉


謝謝指正,的確如您所說的, 必須將WEnd上一行的 $newAA.Run(2) 刪掉。
剛才將Manual再細讀清楚,原來是在呼叫 Export() 或 Run()前先檢查Analysis Window是否IsBusy,而不是先呼叫 Export() 或 Run()後再檢查Analysis Window是否IsBusy。有您的指正真好!{:4_113:}

修正如下:
MsgBox(4096, " "Broker Status :", "AmiBroker 開始回測",1)
While$newAA.IsBusy = 1
          MsgBox(0, "Broker Status :", " Analysis Win/Doc IsBusy",1)      
          Sleep(500) ; // check IsBusy every 0.5 second      
WEnd
$newAA.Run(2)
$newAA.Export($FN_OUT)
MsgBox(4096, " "Broker Status :", "報告產生完成",1)
$newAA.Close()



calvinhorng 發表於 12-10-27 08:46

其實 我是希望晚上 跑批次檔 做回測

所以 請參考 附件AB_BTRx1.bat
檔案內 REM 有註解
如果要改交易的相關參數 要改AB_BTRx.py 內的參數

首先要在AB程式產生一個 APX (任何 AFL的都可以)
之後 把它放在BAT 對應的目錄下
然後再BAT 的c:\python27\python AB_BTRx.py指令列 後把要回測的參數輸入
(用空格分隔)
依序 [中文部分可以不輸入 PY內有預設]
"Ticker"
"Time Frame"
"Start Date"
"End Date"
"Output Path"
"Path of formula"
"File Name of Formula"
"Path of APX"
"Name of APX file"
"Path of DataBase"
"期初資金(萬元)"
"每口加碼之資金(萬元)"
"最多交易口數"
"自動出金金額"

會產生三檔案
第一個是AB的原始報表: BTR_XXX.cxv
第二個是依據AB的原始報表 產生的單口交易與加碼交易的損益: RPT_YYY.csv
第三個是依據第二個報表 產生的簡表: SUM_YYY.csv

請有興趣的人試看看

BTW 我比較執行速度 PYTHON 真的比較快
所以 用 BAT 可以連續測試 (待測標的、不同起始、結束時間、K棒週期)
一個晚上下來 可以跑滿多的

kilroy 發表於 12-10-27 10:53

感謝版大分享~~

非常實用的方法,謝謝

moneymaker 發表於 12-10-27 11:26

kilroy 發表於 12-10-14 21:57 static/image/common/back.gif
感謝大大分享~~

用 AB 的人似乎不多

期待您多多分享{:4_186:}

heavenweaver 發表於 12-10-29 19:33

真是好料的,感謝calvinhorng 大大無私的分享,可以讓我學到更精采的實用方法。

forbbs 發表於 12-11-3 21:23

我用autohotkey的global apxfilename:="c:\Analysis1.apx",csvfilename:="c:\ab.csv"
analyseAB(apxfilename,csvfilename)

analyseAB(ByRef apxfile,ByRef csvfile)
{
        static AmiBroker:=ComObjCreate("Broker.Application")
        NewA:= AmiBroker.AnalysisDocs.Open(apxfile)
        if(IsObject(NewA)){
                       while ( NewA.IsBusy )
                                Sleep,30
                       NewA.Run( 1 )                ;0 scan,2 backtest,1 Exploration
                       while ( NewA.IsBusy )
                                Sleep,30
                       NewA.Export(csvfile)
                       NewA.Close()
        }
}

lutin111 發表於 12-11-16 06:12

真是好東西,...這程式在python3可以用嗎?

calvinhorng 發表於 12-11-17 16:46

lutin111 發表於 12-11-16 06:12 static/image/common/back.gif
真是好東西,...這程式在python3可以用嗎?

我沒測過
可能你要自己試看看{:4_90:}

lutin111 發表於 12-11-25 20:30

想請開下用了AnalysisDocs想要改變選股範圍和時間範圍要如何做?
修改APX檔還是另外再開其它APX檔?
頁: [1]
查看完整版本: Python27 產生 backtest report CSV 檔案