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或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)
相关文章
-
没有相关内容