如何找到跌幅超过X bips的日子?

问题描述 投票:0回答:2

什么是找到拉伸大于X bips的日子最惯用的方法?我再次通过一些查询,但它们成为样板...也许有一个更简单,更优雅的选择:

q)meta quotes
c   | t f a
----| -----
date| z    
sym | s    
year| j    
bid | f    
ask | f    
mid | f    

然后我做:

bips:50;
`jump_in_bips xdesc distinct select date,jump_in_bips from (update date:max[date],jump_in_bips:(max[mid]-min[mid])%1e-4 by `date$date from quotes where sym=accypair) where jump_in_bips>bips;

但是这会让我知道这个数字下降的时间,而不仅仅是下跌。

我当然可以把这个结果放在一个临时表中,并做几个后续选择,如:

select ... where mid=min(mid),date=X
select ... where mid=max(mid),date=X

检查max(mid)是否在min(mid)之前...是否有更简单,更惯用的方式?

kdb
2个回答
2
投票

我认为maxs是这里的关键功能,它允许您保持运行历史最大值,并且您可以将当前值与最大值进行比较。如果您有一些表quote,其中包含一些系列的中间数(mids)和时间戳(date),则以下查询应返回您看到下拉值大于某个值的日期:

key select by `date$date from quote 
  where bips<({(maxs[x]-x)%1e-4};mid) fby `date$date

lambda {(maxs[x]-x)%1e-4}在每个点进行比较到历史最大值并检查它是否大于bips,而fby允许你按日期分组应用where子句。在日期与by分组并取钥匙将返回发生这种情况的日子。

如果要保留最大缩编的信息,可以使用更新:

select max draw by date from 
  (update draw:(maxs[mid]-mid)%1e-4 by date from @[quote;`date;`date$])
  where bips<draw

日期单独更新,直接修改报价,以避免重复投射。


1
投票

给定日期的maxmin中间的差异可能是增加和缩减。取决于max中期是否在min之前。此外,到目前为止,sym列存在,我假设您可能在表中有不同的符号,并希望获得所有这些列的下拉。

例如,如果给定日期有3个报价且sym:1.3000 1.2960 1.3010,则第二个和第三个之间的差异为50个点,但这是增加。

下一个查询可用于获取抽签高于给定阈值的日期和符号

select from 
(select drawdown: {max maxs[x]-x}mid 
    by date, sym from quotes) 
where drawdown>bips*1e-4

{max maxs[x]-x}通过减去每个mid的最大前一个中间值来给出给定日期的最大值。

© www.soinside.com 2019 - 2024. All rights reserved.