【回测与实盘】- 跨公式分离策略信号产生和实盘委托处理的思路

需求:

编写一个策略的过程中会先做历史回测,这时候需要用Buy/Sell这样的图表交易函数才能让TBQ3在回测过程中计算并统计交易数据。

回测通过后如果要转实盘交易时又要用A函数和OnOrder, OnFill, OnPosition等【账户事件】来处理实盘交易, 又要对原来回测的代码进行改动。

注意到放在同一个【策略单元】里包含OnSignal域的公式可以捕捉到同一个单元里其它公式产生的Buy/Sell信号,希望能利用这个机制将用于回测的代码与处理实盘交易的代码分离。理想情况举例:

实现两个公式:

- 【公式A-交易策略】: 包含实际的交易策略实现,通过Buy/Sell函数发出信号。

- 【公式B-实盘交易执行】: 没有交易策略,只是绑定要交易的实盘账户,通过OnSignal捕捉公式A里的信号并完成实盘交易操作。

使用过程:

- 回测时只加载【公式A-交易策略】,完成回测,如果要优化调整策略只需要改动公式A

- 回测通过后,实盘时只需要同时加载【公式A-交易策略】和【公式B-实盘交易执行】


问题:

1. 按照以上思路,如果想使用OnOrder, OnFill, OnPosition等域,是否需要用A_SubscribeTradeByCreateSource来订阅【公式A-交易策略】? (我理解的是不需要,因为真实的通过A函数发出的委托其实是在【公式B-实盘交易执行】中完成的,与公式A无关)

2. 上述思路是否可行,有没有潜在的问题需要注意?

3. 为了解决描述的需求,是否还有其它的思路?


实盘和回测的问题
回测无信号闪烁,实盘中出现信号问题。
实盘信号和实盘成交不一致
回测和实盘问题
实盘时公式采用指数000还是主连888?
日线实盘委托偏移的问题
实盘有信号不发单
关于回测参数运用于实盘的困惑,请老师和高手解惑
实盘运行时显示已经触发开仓条件,但是没有开仓信号产生,等到重新编译代码之后发现又有信号产生了
实盘信号执行

我不太理解,为啥要分两个公式啊?你直接把b公式的onsignal域 和订单驱动域复制到公式A合并不就好了?反正你公式A 的onsignal和订单驱动域都是i空的

想到一种可能的情况

听蔡老师说 代码的行数是有上限的

如果写不下了, 就可能单独把订单管理拿出来

顺便问一下,如果把订单域驱动代码复制到公式A合并,用历史数据回测的时候应该也会驱动onsignal,但是可以通过检查signal的flag是否是历史信号来过滤?

1. 想着可以先弄一个略粗糙的策略给相关人员回测分析,然后继续开发实盘需要处理的细节

2. 写代码习惯性的想把功能分开,希望实盘下单部分能重用,用的时候直接加载上去就实盘了。  

一个文件里代码行数多了确实头疼,翻来翻去让人头大

应该不至于写到那么多

你的这个问题我好像讲onsignal的时候是说过的,signal结构体里是有一个标记信号是历史还是实时的flag的

你如果报单全都是B公式报的,A公式只是出信号不报单,那就不必订阅A函数的操作源


是的,今天实际测试了一下,确实不需要


buy/Sell操作的是虚拟账户

模拟账户、实盘账户 统称为实际账户

虚拟账户与实际账户其实没关系

模拟账户和实际账户其实也是独立的两个账户

buy/Sell操作的是虚拟账户

模拟账户、实盘账户 统称为实际账户

虚拟账户与实际账户其实没关系

模拟账户和实盘账户其实也是独立的两个账户

以前多个帖子回复指出:

除非高频模型

策略应该统筹考虑虚拟账户和实际账户操作

即实现所见即所得

兼容一:

策略驱动图表信号、账户操作

兼容二:

历史回溯、实时行情交易

兼容三:

策略任何时候重启 都应该信号连贯 除非极端情况 不妨碍仓位逻辑