positionprofit在Enum_Data_RolloverRealPrice下的問題 [開拓者 TB]
-
咨詢內容:
新版.3 ,888合約在復權后,POSITIONPROFTI有誤,請測試,代碼如下
Events
??OnInit()
? ? {
? ???SubscribeBar("IC888.CFFEX","5m",20190101,0,Enum_Data_RolloverBackWard);
? ???//AddDataFlag(Enum_Data_RolloverRealPrice);//加上自動映射為真實價則positionproft值正確,否則持倉盈虧只要是多單都是虧隕。空單相反。
? ? }
??OnReady()
? ?{
? ?
? ?}
? ?
? ?OnBar(ArrayRef<Integer> indexs)
? ? {
? ???If(Time==0.0930)
? ?? ? Buy(1,Open);
? ???If(Time==0.1330)
? ?? ? Sell(0,Open);
? ???Commentary("PositionProfit= "+Text(PositionProfit));???來源:CXH99.COM -
TB技術人員:
首先非常感謝您提出的問題!
我仔細分析了一下您提出的問題,有些還是很有道理的,有些則恐怕還是原有設計更為合理。
1、如果不設置映射到真實價格,測試結果多單都是虧損的。這個我找了一下原因是因為IC888的換月跳空總體是向下的,這樣RollOver這個系數就是大于1的,那么真實價格一般是比后復權的價格低的,而測試報告中EntryPrice取的是復權價格,浮動盈虧的結算價卻是按真實價格,所以導致都是虧損。這一點,我覺得我們的設計是有點問題的,兩者應該一致,這個問題我會向公司產品部反饋。
2、但如果設置了映射到真實價格,則EntryPrice、ExitPrice這些函數取到的是真實價格的值,浮動盈虧的計算也是按照真實價格來計算,我覺得設計是沒有問題的。您提到的計算交易手數的問題,恰恰就是要用真實價格來計算才可能正確,否則算出來的交易手數就錯了。而圖表上的價格還是用復權價格,這樣可以保證策略交易信號不會因為復權而產生變化,這個我覺得也是可以。只是有些策略如果同時用到價格數據和EntryPrice這些交易數據時,可能會有些問題,這個可能要對策略做一些修改。
3、所以,您提到的提供函數來判斷目前的復權和映射真實價格的狀態還是很有必要的。我們系統現在提供了一個HasRollOver函數,但從使用結果來看,它反映的是當前BAR是否進行了除權,這個和您的要求和我的想法確實是有差距的。這個問題我也會反饋給公司。
謝謝您的支持!?
-
TB客服:
TB老曹,看看我的問題如何解答,1.1.1.3版自動換月有問題
?
-
網友回復:
tblaocai 發表于 2019-9-16 11:59
首先非常感謝您提出的問題!
我仔細分析了一下您提出的問題,有些還是很有道理的,有些則恐怕還是原有設計 ...
我概括一下,對于設置了復權和Enum_Data_RolloverRealPrice的情況,TB目前的方案是直接用realprice下單,測試報告也是以真實價來計算,這樣是比較準確,但有一個問題便是公式的open,close等取的是復權后的價格,而entryprice這些取的又是真實價,取值不是按一個標準,那么這樣寫公式就需要用戶每次取close價時要轉換成真實價,那就意為著之前寫的自定義函數都得修改,那這可是全部TB使用者都要改自己的函數啊。所以為了程序簡練,最好統一起來,辦法1.要么entryprice與close都默認轉為真實價,不需要通過乘除rollover來轉換,只是K線圖上顯示的是復權價。辦法2.要么entryprice與close都是復權價,只在下單與報告中體現為真實價,這個辦有一個問題要注意,就是下單時計算手數要以真實價來算,兩個方法應該能達同一個效果。當然如果以后確定就是按1.3版目前這個方案的話我就只好老實改代碼了。
有思路,想編寫各種指標公式,交易模型,選股公式,還原公式的朋友
可聯系技術人員 QQ: 262069696 或微信號:cxh99cxh99 進行 有償收費 編寫!
(注:由于人數限制,QQ或微信請選擇方便的一個聯系我們就行,加好友時請簡單備注下您的需求,否則無法通過。謝謝您!)
相關文章
-
沒有相關內容