设为首页收藏本站

 找回密码
 注册
查看: 1508|回复: 3
打印 上一主题 下一主题

positionprofit在Enum_Data_RolloverRealPrice下的问题 [复制链接]

Rank: 2

精华
0
UID
155954
积分
55
帖子
34
主题
21
阅读权限
30
注册时间
2011-6-12
最后登录
2021-5-13
跳转到指定楼层
1#
发表于 2019-9-14 22:40:57 |只看该作者 |倒序浏览
新版.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));  
    }
另外一个问题,凡是有设置交易映射到真实价格的,则entryprice,exitprice取到的值就是真实价格,这样是否合理? 因为这样的话,原来写好的函数比如下单手数计算,模块化的开平系统里取到的值就是下单真实价格,但是函数计算时像close,open这些 的值却是复权后的值,这样计算值就会是错误的,这样这些自定义函数就得全部改写,需要乘以rollover比较麻烦。换个方法, 如果虽设置了映射真实价格,但取的值还是图表上复权后的值,只是在测试报告里用真实价计算结果,及实际以真实价下单,这样是不是更方便一些。i下单价可用entryprice/rollover算得。
还有,系统里可以考虑增加HasRolloverBackWard,HasRolloverRealPrice来取得是否有复权和真实价映射状态,这样方便在程序中调用。仅供参考,可能不一定周全。

Rank: 1

精华
0
UID
207706
积分
48
帖子
44
主题
2
阅读权限
10
注册时间
2015-4-23
最后登录
2021-11-18
2#
发表于 2019-9-16 11:59:25 |只看该作者
首先非常感谢您提出的问题!
我仔细分析了一下您提出的问题,有些还是很有道理的,有些则恐怕还是原有设计更为合理。
1、如果不设置映射到真实价格,测试结果多单都是亏损的。这个我找了一下原因是因为IC888的换月跳空总体是向下的,这样RollOver这个系数就是大于1的,那么真实价格一般是比后复权的价格低的,而测试报告中EntryPrice取的是复权价格,浮动盈亏的结算价却是按真实价格,所以导致都是亏损。这一点,我觉得我们的设计是有点问题的,两者应该一致,这个问题我会向公司产品部反馈。
2、但如果设置了映射到真实价格,则EntryPrice、ExitPrice这些函数取到的是真实价格的值,浮动盈亏的计算也是按照真实价格来计算,我觉得设计是没有问题的。您提到的计算交易手数的问题,恰恰就是要用真实价格来计算才可能正确,否则算出来的交易手数就错了。而图表上的价格还是用复权价格,这样可以保证策略交易信号不会因为复权而产生变化,这个我觉得也是可以。只是有些策略如果同时用到价格数据和EntryPrice这些交易数据时,可能会有些问题,这个可能要对策略做一些修改。
3、所以,您提到的提供函数来判断目前的复权和映射真实价格的状态还是很有必要的。我们系统现在提供了一个HasRollOver函数,但从使用结果来看,它反映的是当前BAR是否进行了除权,这个和您的要求和我的想法确实是有差距的。这个问题我也会反馈给公司。
谢谢您的支持!

使用道具 举报

Rank: 1

精华
0
UID
169949
积分
36
帖子
14
主题
4
阅读权限
10
注册时间
2013-8-15
最后登录
2019-9-29
3#
发表于 2019-9-16 12:34:51 |只看该作者
TB老曹,看看我的问题如何解答,1.1.1.3版自动换月有问题

使用道具 举报

Rank: 2

精华
0
UID
155954
积分
55
帖子
34
主题
21
阅读权限
30
注册时间
2011-6-12
最后登录
2021-5-13
4#
发表于 2019-9-16 15:45:24 |只看该作者
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版目前这个方案的话我就只好老实改代码了。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-24 22:23

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部