什么是找到拉伸大于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)
之前...是否有更简单,更惯用的方式?
我认为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
日期单独更新,直接修改报价,以避免重复投射。
给定日期的max
和min
中间的差异可能是增加和缩减。取决于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的最大前一个中间值来给出给定日期的最大值。