You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大体积OHLCV日内数据高效Exit标记方案求助(KDB+)

大OHLCV数据集下KDB+高效生成Exit标记的需求

数据集与核心需求

我有一个约2.3GB的ohlcv数据集,包含15分钟粒度的日内数据,结构示例如下:

date       ticker   open    close   high    low     volume exchange time                          sma50    sma25    atr14    relVol10 entry exits
-------------------------------------------------------------------------------------------------------------------------------------------------
2024.06.20 IBM 2963.25 2964    2965.7  2960.4  400564 NASDAQ      2024.06.20D13:30:00.000000000 2943.033 2940.838 8.835116 2.619959 0     0    
2024.06.20 IBM 2963.95 2948.1  2964.6  2947.3  333112 NASDAQ      2024.06.20D13:45:00.000000000 2943.034 2941.708 9.43975  1.827534 0     0    
2024.06.20 IBM 2948.5  2952.9  2955.35 2946.55 220532 NASDAQ      2024.06.20D14:00:00.000000000 2943.085 2943.05  9.394054 1.090741 0     0    
2024.06.20 IBM 2953.15 2958.5  2960    2952.5  288016 NASDAQ      2024.06.20D14:15:00.000000000 2943.261 2944.386 9.258764 1.352764 1     0    
2024.06.20 IBM 2958.55 2952    2962.9  2950.1  343157 NASDAQ      2024.06.20D14:30:00.000000000 2943.208 2945.4   9.51171  1.49124  0     0    
2024.06.20 IBM 2951.7  2951.35 2952.9  2943.05 429613 NASDAQ      2024.06.20D14:45:00.000000000 2943.145 2946.594 9.535873 1.675764 0     0    
2024.06.20 IBM 2951.15 2946.6  2953    2940.9  937451 NASDAQ      2024.06.20D15:00:00.000000000 2942.802 2947.832 9.719025 3.195037 0     0    
2024.06.20 IBM 2947.7  2949    2950.55 2943    565435 NASDAQ      2024.06.20D15:15:00.000000000 2942.585 2949.112 9.564095 1.546279 0     0    

需要基于布尔类型的entry字段生成exits标记,规则如下:

  • 当某根K线的close≥对应entry开仓K线的close×1.02时,标记该K线为对应entry的exit;
  • 若未触发止盈条件,则在当日最后一根K线标记所有未平仓entry的exit。

现有方案的问题

我尝试过两种功能正确的方案,但针对当前2.3GB的数据集,效率极低——计算始终无法完成,内存占用持续攀升直至系统无法使用:

@cillianmurphy 实现方案

o:select close, index:i, ticker, date from ohlcv where entry;
f:{[x;y]
    index:?[x; ((>;`close;1.02 * y`close);(>;`i;y`index);(not;`exits)); (); (first;`i)];
    if[null index; index:-1 + count x]; / 若未找到止盈K线,取当日最后一根K线索引
    update exits:1b from x where i=index
 }
r: f/[ohlcv; o];

@Maurice Lim 实现方案

/ @MauriceLim
f2:{
    {
        x[0],:$[y`entry; y`close; ()];
        if[x[1]:any exits:1.02*x<y[`close] 0; x[0] _: first where exits]; x
    } \ [`float$();0b); x][; 1]};
r:update exits:f2 ohlcv by ticker, date from ohlcv;

补充规则说明

  1. 开仓标记entry不会出现在当日最后一根K线;所有未平仓头寸必须在当日结束时平仓,或在指定数量K线后平仓(止盈条件优先)。
  2. 原布尔类型的entry/exits存在歧义,建议为每个有效entry分配唯一非零索引,exit标记明确对应entry索引,采用FIFO规则匹配。示例如下:

原数据:

ticker date       close entry exits
-----------------------------------
CSCO   2024.03.15 64    1     0
CSCO   2024.03.15 20    1     0
CSCO   2024.03.15 96    0     1
CSCO   2024.03.15 34    1     1
CSCO   2024.03.15 97    1     1
CSCO   2024.03.15 50    1     0
CSCO   2024.03.15 54    0     1
CSCO   2024.03.15 51    1     0

转换后数据:

ticker date       close entry exits
-----------------------------------
CSCO   2024.03.15 64    1     0
CSCO   2024.03.15 20    2     0
CSCO   2024.03.15 96    0     1
CSCO   2024.03.15 34    3     2
CSCO   2024.03.15 97    4     3
CSCO   2024.03.15 50    5     0
CSCO   2024.03.15 54    0     4
CSCO   2024.03.15 51    6     5 6

寻求针对大数据集的高效KDB+实现方案。


内容的提问来源于stack exchange,提问作者marital_weeping

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:27:03