AB 32bit 與 64bit 回測結果不同
自己在跑回測時發現在 XP 下 與 win7 下
出來的結果(損益)、交易筆數 都有差異
A機器: XP
B機器:Win 7
C機器:虛擬機器 (VMWare)Win7
AB版本:無論同時用正式版的5.70.2 或是 5.79.0 Beta版
結果相同
最囧的還遇過寫出來的測試的策略
在XP年報酬 65% 但在win7回測是掰掰出場
搞的很難相信那一個正確的結果
想問問有沒有先進有遇過這問題
附檔附上自己為測試這個問題
寫的簡單策略
與回測的歷史資料(澳幣)
BackTesting.zip
本帖最後由 kilroy 於 14-5-17 20:49 編輯
如果 backtest 的設定都一樣的話
看看是不是 database setting 不同,留意一下 intraday settings
*可以把 backtest 的 settings 存檔後,讓另一台電腦匯入
---
參考看看了 本帖最後由 IBM2012 於 14-5-17 21:59 編輯
看你的程式碼有無類似以下寫法
有的話,AB 32bit 與 64bit回測結果一定會不同,因為計算結果不同導致進出點位不同
例:
x=a/b;//(有些函數or指標本身亦有計算)
y=c*d;
buy=x >y ;
Have you heard of project files?
In Analysis go to File - Save or File - Save as - Analysis project file(.apx)
Project files save AFL and all backtest settings. So use project files if you wanna compare on different environments. 感謝各位先進的回覆
database setting 上
二者環境相同
由於我為了灌成最新的beta版驗證
因此
三個環境全都以移除軟體移除
連同regedit的也移除後
重新下載最近BETA版安裝
因此設定上是完全一樣
----------------------------------------------------------------
ZIP 檔中內的
測試程式碼如下
並沒有做計算
SetPositionSize( 1, spsShares );
SetOption( "InitialEquity", 50000 );
SetOption( "FuturesMode", 1 );
SetOption( "CommissionMode", 3 );
SetOption( "CommissionAmount", 2.5 );
RoundLotSize = 1;
TickSize = 0.0001;
PS = 10000;
PointValue = 10 * PS;
MA_short = MA( C, 5 );
MA_long = MA( C, 20 );
Buy = Ref( Cross( MA_short, MA_long ), -1 );
Short = Ref( Cross( MA_long, Ma_short ), -1 );
Buy = Cover = ExRem( Buy, Short );
Short = Sell = ExRem( Short, Buy );
BuyPrice = CoverPrice = O;
ShortPrice = SellPrice = O;
------------------------------------------------------------------
原先我推測是不是CPU核心影響
因此
我將虛擬機器改成 單核
但結果
win7 的相同
但與XP 仍有不同
自己GOOGLE 過
查詢到曾有人丟了一句話 32bit 跟 64bit 回測結果不同
但不了了之沒有看到下聞
應該現在大家應該都會選擇64位元OS來當程式交易
畢竟能支援的記憶體大小相比32位元可是大了許多
因此可能沒有人有遇過
由於百思不得其解
所以才想上來詢問各位先進
是否曾遇過這樣的狀況
joshsmi 發表於 14-5-17 21:05 static/image/common/back.gif
Have you heard of project files?
In Analysis go to File - Save or File - Save as - Analysis project ...
不好意思~
不太懂joshsmi大的文意
能否中文表示
讓我比較清楚呢
感謝~
本帖最後由 IBM2012 於 14-5-17 23:38 編輯
skyler 發表於 14-5-17 23:10 static/image/common/back.gif
感謝各位先進的回覆
database setting 上
二者環境相同
MA_short = MA( C, 5 )= C/5;
cross(a,b) = a > b
這個就是計算
小數點計算32bit和64bit結果會不同
Here is the exlanation by Tomasz Janeczko
Hello,
The difference comes from the fact that 64-bit version uses newer SSE2 instructions and 32-bit version uses x87 FPU code. It is not my decision, but just the fact of life. All x64 (64-bit) compilers always use SSE2 instructions.
x87 FPU code uses 80-bit extended precision registers while SSE2 uses 64-bit double precision. That leads to small numerical differences.
Google for x87 vs SSE for more info. For example this:
http://en.wikipedia.org/wiki/SSE2
Best regards,
Tomasz Janeczko
amibroker.com
https://groups.yahoo.com/neo/groups/amibroker/conversations/messages/167354 BTW, I'm getting same results if using 32-bit Amibroker on Windows 7 and if using the same settings and data on Windows XP (32-bit of course). The slight difference is only in regards to 32 bit and 64 bit as explained by TJ. 本帖最後由 skyler 於 14-5-18 00:09 編輯
IBM2012 發表於 14-5-17 23:30 static/image/common/back.gif
MA_short = MA( C, 5 )= C/5;
cross(a,b) = a > b
您說的沒錯
這確實是數字計算
就會有精度的問題
joshsmi 發表於 14-5-17 23:35 static/image/common/back.gif
Here is the exlanation by Tomasz Janeczko
感謝您解答了我的疑問
這樣子我就清楚了
當然如果要相同結果
就是在win7上安裝32bit 的AB
不知道大家都是用 64bit的AB在運行程式交易嗎?
本帖最後由 skyler 於 14-5-18 16:31 編輯
以下
用同台機器在win7 下裝 57.9.0 32bit 與 64bit 版本比對
在32bit 與 64bit之下回測的結果一定不同嗎?!
答案是NO
案例一:跑同樣的策略 二者結果相同
案例二:
但如果遇到這種情形
32bit與64bit 結果完全背離時
就很想要哭了
總之
如果在二個者下跑出來的結果
皆是同向且交易筆數與盈虧沒有差異太大時
策略上應該是沒有問題
但如果二者結果互相背離時
也不用太擔心
以案例二
用32bit的AB來做交易
應該是OK的
畢竟所以數據都在32bit的AB下做運算
如果換成64bit的AB來做
可能結果就不樂觀了
以上是我的推論
另外補充
當如果同時scan 多個商品時
在回測的結果差異可能會非常大
大到你會吐血
我曾一次scan14個產品做backtesting
結果如下
最後
換個角度想
一個策略
在64bit下回測結果
反應這個策略根本是個垃圾
但有沒有可能在32bit下
是不錯的呢?
希望這篇測試能幫到有需要的朋友
那這樣算不算是所謂的參數孤島
優化除了參數考慮外, 16 ,32, 64 bits 都要加一腳 (OS孤島, CPU孤島) 我個人想法是
決定好一個平台了
就以這個環境來操作
因此就不要考慮到兩種環境不同的因素了 本帖最後由 wldtw2008 於 14-5-19 10:31 編輯
個人幾個想法:
1.
32/64的差異是在記憶體定址(整數運算),在浮點數運算方面,早在16位元的年代浮點數的運算精度起碼就已經64位以上了(http://bbs.csdn.net/topics/390664652)。我不認為AB會用整數去執行策略。
2.
這問題太嚴重了,可能根本是軟體平台的BUG導致的。
頁:
[1]
2