KDB表按sym实现列滚动和:反向工程rcc列逻辑
反向工程QSQL代码计算信用消耗(RCC列)
我正在反向工程一段QSQL代码,目标是生成下表中的rcc列结果。已知该列是按sym分组后creditNettingValue的滚动和,但在处理sym为s3的第7至9行时,加减逻辑卡壳了——怎么都没法让自己的方案算出最后一行的14902245。
更新
我搞出了一个非常繁琐的解决方案,先明确需求:我要计算的是信用消耗,和其他sym汇总时忽略符号,但单个sym的信用正负变化时必须逐步调整(抱歉解释得不够清楚,看下面的代码应该能明白逻辑)。显然这不是最优解,求更简洁的实现方式。
示例数据表
t:flip (`time`date`sym`creditNettingValue`rcc)!(20:55:02.761 20:55:02.788 20:55:07.795 20:55:07.814 21:11:28.196 21:26:20.012 22:25:58.292 03:20:37.019 03:35:38.739 03:40:40.805 03:57:40.102 04:21:12.093 04:21:13.130 04:21:18.140 04:21:18.156 04:21:23.167 04:21:24.179 04:22:03.209 04:22:53.123 05:20:40.271;2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01 2024.10.01;`s1`s1`s1`s1`s2`s2`s3`s4`s3`s3`s2`s4`s4`s4`s4`s4`s4`s4`s4`s3;-1000000j, -1000000j, -1000000j, -1000000j, 634279j, 634024j, 692808j, 1000000j, -690593j, -690423j, 631056j, 1000000j, 1000000j, 1000000j, 1000000j, 1000000j, 1000000j, 1000000j, 1000000j, 691094j;1000000j, 2000000j, 3000000j, 4000000j, 4634279j, 5268303j, 5961111j, 6961111j, 6270518j, 6956511j, 7587567j, 8587567j, 9587567j, 10587567j, 11587567j, 12587567j, 13587567j, 14587567j, 15587567j, 14902245j)
我当前的繁琐解决方案
// 按sym分组,计算creditNettingValue的累计绝对值分解 t:update creditNettingBreakdown:abs sums each '{x,'enlist y} scan creditNettingValue by sym from t // 计算每个sym分组内的净值变化 t:update nettingBySym:last each last each {x-prev x} ''[creditNettingBreakdown] from t // 我的逻辑删掉了每个creditNetting的第一个值,需要补回并计算总和 t:update rcc_calc:sums nettingBySym from t lj `time`sym xkey select time,sym,nettingBySym:abs creditNettingValue from t where rcc=(first;rcc) fby sym // 校验计算结果与原rcc是否一致 update d_rcc:deltas'[rcc;rcc_calc] from t
内容的提问来源于stack exchange,提问作者pmade1
相关产品推荐
相关产品推荐

