【TBQuant3-新手指南】为什么策略交易盈亏和账户盈亏看上去不同

为什么策略交易盈亏和账户盈亏看上去不同情景再现,策略交易做了一次交易后,用户查看策略交易的状态和账户状态。用户注意到两边字段的盈亏不同(这里以当日盈亏为例)2.事实上,用户也通过回测和账户成交发现了两者不同。(与小标题1内有一些时间差)第一个图是回测图,买入价格是95360,卖出价格是96420第二个图是账户交易图(该案例使用了模拟),买入价格是95820,卖出价格是96260该现象可以总结为:我的回测那么好,为什么实盘交易后少了这么多!该模拟使用代码://------------------------------------------------------------------------ // 简称: test_1126_2025 // 名称: // 类别: 策略应用 // 类型: 用户应用 // 输出: Void //------------------------------------------------------------------------ Params //此处添加参数 Vars //此处添加变量 Defs //此处添加策略函数 Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { SubscribeBarCounts("lc2605.GFEX","1m",1); SetOrderMap2MainSymbol(); SetOrderPriceOffset(3); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { if(CurrentBar==1) { buy(1,low); } else if(BarsSinceEntry==5) { sell(0,high); } } //------------------------------------------------------------------------ // 编译版本 2025/11/26 135626 // 版权所有 wangkaiming // 更改声明 TradeBlazer Software保留对TradeBlazer平台 // 每一版本的TradeBlazer策略修改和重写的权利 //------------------------------------------------------------------------问题分析:1.图表交易(策略交易,策略研究)的盈亏与账户成交产生的盈亏是独立的。图表交易(策略交易,策略与那家)的盈亏字段由图表信号产生,那么信号来源于哪里?信号由代码中buysell体系对应的开平仓产生而注意到上方的代码使用了 buy(1,low) sell(0,high)的形式,显然这是一种极致的偷价写法但是在图表上,图表回测会严格按照图表信号产生的价格生成交易回测报告。即你写high就按high来成交,不会考虑成交不到的问题。账户成交则不同,不论模拟还是实盘,返回的是交易系统撮合的结果。实盘模拟使用的一般是偏移式报价,成交即是对手盘,相对真实。所以大多情况下账户盈利必然小于图表回测。下图为偷价图,最低买入,最高卖出2.谁是真实的?绝大多情况下,账户反应的永远是真实情况,如果你发现账户与图表差很多,那么错误大概率出在策略或设置上。该案例中偷价较为极端容易发现,实际操作中,隐蔽的偷价更难发现,需要用户擦亮眼睛,也不要太相信只有回测的策略。3.编写没有问题的策略,会不会也产生差异?会,但是误差小,并且该误差实际是市场冲击成本等,并非属于编程范围的问题。编写无误的策略可以准确的用图表信号表达即时可成交的价位。也就是编写水平越高,图表信号和实际成交的误差越小。

😀