行情数据做日切,可以怎么区分出来?

我想对行情数据做日切,在DolphinDB database GUI中执行下列代码:

n_move=5
t1=
select concatDateTime(trade_date,trade_time) as time,secu_code,
 (close/close.move(n_move))-1 as r_close, //等价于ratios(close)-1 
 (volume/volume.move(n_move))-1 as r_volume,
 (turnover/turnover.move(n_move))-1 as r_turnover
from quote_1min
where trade_date between date_begin:date_end
context by secu_code

执行后结果如下:
attachments-2021-06-tTcOetdB60c843b82ca2b.png
图中选中的这5根分钟bar,其实是不能参照昨日尾盘的最后5根计算,应该取0了。这句执行后 update一下每日前5根分钟bar数据为0,也是可以达到目的,但我想精炼到一条语句,请问有什么方法?

请先 登录 后评论

2 个回答

logger

DolphinDB针对时序数据处理,在SQL中增加了一个context by子句,也就是说数据先按照context by后面指定的字段进行分组,每一个组内部再应用序列函数。

上面的例子其实已经使用了context by,只不过只按照股票一个字段进行分组,再增加一个日期字段即可。

n_move=5
t1=
select concatDateTime(trade_date,trade_time) as time,secu_code,
 (close/close.move(n_move))-1 as r_close, //等价于ratios(close)-1 
 (volume/volume.move(n_move))-1 as r_volume,
 (turnover/turnover.move(n_move))-1 as r_turnover
from quote_1min
where trade_date between date_begin:date_end
context by secu_code, trade_date
请先 登录 后评论
haha

context by 加上 trade_date 字段,按照 secu_code 和 trade_date 两个字段分组,即可保证不会参照昨日尾盘的最后5根计算,但要注意move()取不到值时,/计算为NULL,可用iif判断修改为0

n_move=5
t1=
select concatDateTime(trade_date,trade_time) as time,secu_code,
 iif(close/close.move(n_move)!=NULL, (close/close.move(n_move))-1, 0)as r_close,
 iif(volume/volume.move(n_move)!=NULL, (volume/volume.move(n_move))-1, 0) as r_volume,
 iif(turnover/turnover.move(n_move)!=NULL, (turnover/turnover.move(n_move))-1, 0) as r_turnover
from quote_1min
where trade_date between date_begin:date_end
context by secu_code, trade_date
请先 登录 后评论