使用Buy/Sell函数下单,用数据源策略函数获取的信息会丢失

学习 数据源策略函数 时做了一些测试,注意到:

  • 只有使用Buy/Sell函数下单时才会有数据 (绑定不绑定账户都没关系)
  • 策略持续运行数据是正确的,如果中途被打断,比如重新编译了策略代码,断网,重新启动策略等, 数据源策略函数就无法返回正确的值,数据都归零了,只有再次下单才会更新
  • 有些函数会持续返回0,比如AvgBarsEvenTrade,AvgBarsLosTrade, AvgBarsWinTrade

我的问题是:

#1: 如果策略执行被打断,是否只能通过A函数查询历史数据来获得数据源策略函数提供的那些信息,比如BarsSinceEntry(获得当前持仓的第一个建仓位置到当前位置的Bar计数)?

#2 数据源策略函数除了依赖Buy/Sell、需要持续运行,使用时还有什么需要注意的?



数据源策略函数文档地址:https://tbq3.tbquant.net/helper?product_id=999&keyword=1122&content_id=76&selectedkey=1146&type=article

【下单】- 当使用Buy/Sell等交易函数如何获得背后虚拟账户的资金信息
【下单】- 使用Buy函数下单后Portfolio信息和MarketPosition更新延迟
没有获取委托列表函数和指定合约委托信息,如何避免重复下单?
数据源策略函数能否统计在叠加模式下的多品种策略信息
buy/sell下单返回ture,但实际下单失败
实测数据源策略函数中多个函数持续返回0
关于Buy函数和A_Buy函数在实盘上遇到的问题
A_SendOrderEx函数与Buy、Sell、BuyToCover、SellShort等函数有什么区别?
buy函数,marketposition函数
888合约下A函数如何获取实时持仓信息

所谓的数据源策略函数本身获取的是图表上虚拟账户的数据

1如果样本没变,策略代码没变,那么无论执行多少遍,执行轨迹是一样的。比如barssinceentry,永远是不会变的。

2我觉得你对这些函数的认知有点偏了。依赖buy/sell是因为执行完buy信号命令后,图表的虚拟账户就会有相应的仓位变动,从而导致后面的各种策略数据出现。还有什么要注意的这个问题过于抽象和宽泛了,有点难回答。

谢谢老师回复,我感觉这些函数是跟图表上虚拟账户的数据有关,我理解的是这些虚拟账户应该是持久化的,如果策略重新运行,应该还能读到以往的数据。就好像用A函数下单,仓位变化等会一致保留在账户里,几天后再来看变化还在。不知道这样理解有哪些不准确的?

我打个比方吧。

往k线上加载公式运行出信号,就好比让你计算100道算术题

如果第一道算数题算出来答案是10,那么无论你后来算几遍,第一道题答案永远是10,这个答案不会因为你后来多算几遍而发生改动。

同样的,k线上执行策略得出信号,第一次加载发现其中第n根bar上有信号,无论卸载策略重新加载运行多少次,第n根bar上的信号永远是在的。

这并不是持久化,这只是因为运行路径是一样的,1+1永远等于2,算几次也是等于2.