15 对冲单报撤间隔如何实现

输入的数据为:

每一行为一个tick的八列数据,分别为:

tick时间 买一价 卖一价 买一量 买一量 报价 报价方向 报单成交量

现在我要对成交的报单做对冲,也就是上一tick买入了多少股,这一tick我就要卖出多少股

所谓的报撤间隔(以下记为interval)是,我挂出对冲单之后,隔几个tick就要把剩下来没成交的对冲单,按照剩余的数量,和当前盘口的价格,重新挂一个对冲单

实现的逻辑应该为,首先(以下为简略伪码)

for i in 1:n

    1.每个tick判断累积的单子是否有成交(也就是从上一次撤单重报到现在的所有对冲单余量是否有新的成交,最多interval个单子)

    2.如果i mod interval = 0,也就是这一tick要做撤单重报,重报的量为所有累计单子(同上一个括号)的未成交量总和,重报的价是根据当前盘口定的

我目前的想法是新增2*3=6列,买卖各有三列,一列为对冲单价格,一列为对冲单量,一列为对冲单成交量,均表示本tick挂出的对冲单情况

1中,每扫一行,就更新一遍[上次报撤:当前tick]的对冲单成交量

2中,统计前interval个tick的对冲单余量,加到下一个间隔的第一行的对冲单量中

我的问题是,DB里面应该怎么实现这种 对数据分段,然后在段内做较复杂的计算,计算结果传到下一分段进行累积,顺序往下逐段进行,有没有什么高效的实现方法,

for循环的话是不是太慢了,我看了accumulate函数,但它文档里说也是for循环做的,我也看了cgroup by,但不支持比较复杂的自定义函数,

求大佬解惑

请先 登录 后评论

1 个回答

xlli

对于这种有顺序依赖的计算逻辑(一个结果传递到下一个结果执行),一般只能通过for循环来实现。优化这种计算一般有两个方向。

一是并行计算。将数据按照股票代码分成N批数据,股票代码之间一般不会有依赖关系,N批数据使用submitJob等方式并行执行计算。

二是减少for循环内代码的执行时间。循环次数无法改变,那么就需要优化单次执行的时间,这个需要看实际代码的执行逻辑。

请先 登录 后评论