COCO研究院

 找回密碼
 註冊
搜索
查看: 4168|回復: 17

AB 32bit 與 64bit 回測結果不同

[複製鏈接]
發表於 14-5-17 20:25 | 顯示全部樓層 |閱讀模式
自己在跑回測時發現
在 XP 下 與 win7 下
出來的結果(損益)、交易筆數 都有差異

A機器: XP
B機器:Win 7
C機器:虛擬機器 (VMWare)  Win7

AB版本:無論同時用正式版的  5.70.2 或是 5.79.0 Beta版
結果相同

最囧的還遇過寫出來的測試的策略
在XP年報酬 65% 但在win7回測是掰掰出場
搞的很難相信那一個正確的結果

想問問有沒有先進有遇過這問題

附檔附上自己為測試這個問題
寫的簡單策略
與回測的歷史資料(澳幣)

[url=]BackTesting.zip[/url]


2014-05-17_194500.png

2014-05-17_194312.png

2014-05-17_200436.png

2014-05-17_200430.png

2014-05-17_200421.png

2014-05-17_200415.png

2014-05-17_200408.png

2014-05-17_200356.png




BackTesting.zip

4.99 MB, 下載次數: 268

發表於 14-5-17 20:43 | 顯示全部樓層
本帖最後由 kilroy 於 14-5-17 20:49 編輯

如果 backtest 的設定都一樣的話

看看是不是 database setting 不同,留意一下 intraday settings

*可以把 backtest 的 settings 存檔後,讓另一台電腦匯入

---
參考看看了

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 感謝分享

查看全部評分

發表於 14-5-17 20:55 | 顯示全部樓層
本帖最後由 IBM2012 於 14-5-17 21:59 編輯

看你的程式碼有無類似以下寫法
有的話,AB 32bit 與 64bit回測結果一定會不同,因為計算結果不同導致進出點位不同
例:
x=a/b;  //(有些函數or指標本身亦有計算)
y=c*d;

buy=x >y ;








評分

參與人數 1金錢 +2 收起 理由
skyler + 2 感謝分享

查看全部評分

發表於 14-5-17 21:05 | 顯示全部樓層
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.

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 感謝分享

查看全部評分

 樓主| 發表於 14-5-17 23:10 | 顯示全部樓層
感謝各位先進的回覆
database setting 上
二者環境相同

由於我為了灌成最新的beta版驗證
因此
三個環境全都以移除軟體移除
連同regedit的也移除後
重新下載最近BETA版安裝
因此設定上是完全一樣

2014-05-17_225545.png
2014-05-17_225554.png

----------------------------------------------------------------
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位元可是大了許多
因此可能沒有人有遇過

由於百思不得其解
所以才想上來詢問各位先進
是否曾遇過這樣的狀況





 樓主| 發表於 14-5-17 23:11 | 顯示全部樓層
joshsmi 發表於 14-5-17 21:05
Have you heard of project files?

In Analysis go to File - Save or File - Save as - Analysis project ...

不好意思~

不太懂joshsmi大的文意
能否中文表示
讓我比較清楚呢

感謝~
發表於 14-5-17 23:30 | 顯示全部樓層
本帖最後由 IBM2012 於 14-5-17 23:38 編輯
skyler 發表於 14-5-17 23:10
感謝各位先進的回覆
database setting 上
二者環境相同

MA_short = MA( C, 5 )= C/5;
cross(a,b) = a > b

這個就是計算
小數點計算32bit和64bit結果會不同



評分

參與人數 1金錢 +2 收起 理由
skyler + 2 感謝分享

查看全部評分

發表於 14-5-17 23:35 | 顯示全部樓層
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/gro ... ons/messages/167354

評分

參與人數 3金錢 +9 收起 理由
lwhuang + 2 感謝分享
kilroy + 5 good job
skyler + 2 好文章,我推薦

查看全部評分

發表於 14-5-17 23:40 | 顯示全部樓層
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.

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 感謝分享

查看全部評分

 樓主| 發表於 14-5-18 00:06 | 顯示全部樓層
本帖最後由 skyler 於 14-5-18 00:09 編輯
IBM2012 發表於 14-5-17 23:30
MA_short = MA( C, 5 )= C/5;
cross(a,b) = a > b

您說的沒錯
這確實是數字計算
就會有精度的問題
 樓主| 發表於 14-5-18 00:08 | 顯示全部樓層
joshsmi 發表於 14-5-17 23:35
Here is the exlanation by Tomasz Janeczko

感謝您解答了我的疑問
這樣子我就清楚了

當然如果要相同結果
就是在win7上安裝32bit 的AB


不知道大家都是用 64bit的AB在運行程式交易嗎?

評分

參與人數 1金錢 +5 收起 理由
kilroy + 5 小弟是用 win7 64-bit 跑程式交易的.

查看全部評分

 樓主| 發表於 14-5-18 16:29 | 顯示全部樓層
本帖最後由 skyler 於 14-5-18 16:31 編輯

以下
用同台機器在win7 下裝 57.9.0 32bit 與 64bit 版本比對
在32bit 與 64bit之下回測的結果一定不同嗎?!
答案是  NO


案例一:跑同樣的策略 二者結果相同

1_32.png
1_64.png



案例二:
但如果遇到這種情形
32bit與64bit 結果完全背離時
就很想要哭了

2_32.png

2_64.png


總之
如果在二個者下跑出來的結果
皆是同向且交易筆數與盈虧沒有差異太大時
策略上應該是沒有問題

但如果二者結果互相背離時
也不用太擔心
以案例二
用32bit的AB來做交易
應該是OK的
畢竟所以數據都在32bit的AB下做運算
如果換成64bit的AB來做
可能結果就不樂觀了
以上是我的推論


另外補充
當如果同時scan 多個商品時
在回測的結果差異可能會非常大
大到你會吐血
我曾一次scan14個產品做backtesting
結果如下


3_32.png



3_64.png



最後
換個角度想
一個策略
在64bit下回測結果
反應這個策略根本是個垃圾
但有沒有可能在32bit下
是不錯的呢?


希望這篇測試能幫到有需要的朋友
發表於 14-5-18 17:04 | 顯示全部樓層
那這樣算不算是所謂的參數孤島
優化除了參數考慮外, 16 ,32, 64 bits 都要加一腳 (OS孤島, CPU孤島)
 樓主| 發表於 14-5-19 10:02 | 顯示全部樓層
我個人想法是
決定好一個平台了
就以這個環境來操作
因此就不要考慮到兩種環境不同的因素了
發表於 14-5-19 10:30 | 顯示全部樓層
本帖最後由 wldtw2008 於 14-5-19 10:31 編輯

個人幾個想法:
1.
32/64的差異是在記憶體定址(整數運算),在浮點數運算方面,早在16位元的年代浮點數的運算精度起碼就已經64位以上了(http://bbs.csdn.net/topics/390664652)。我不認為AB會用整數去執行策略。
2.
這問題太嚴重了,可能根本是軟體平台的BUG導致的。

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 按一個讚

查看全部評分

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

本版積分規則

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

GMT+8, 24-11-23 04:21

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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