设为首页收藏本站

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

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: 2

精华
0
UID
155954
积分
55
帖子
34
主题
21
阅读权限
30
注册时间
2011-6-12
最后登录
2021-5-13
2#
发表于 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-5-6 16:12

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部