我已经开始学习q / KDB了一段时间,所以提前原谅我的琐碎问题,但我面临以下问题,我不知道如何解决。
我有一张名为“res”的表格显示,侧面,订单总数和一些simbols的average_price
<div id="a">a</div>
<div id="b">b</div>
<div id="c">c</div>
<script>
var a = "a";
var b = "b";
var c = "c";
document.getElementById(a).style.color = "blue";
document.getElementById(b).style.color = "red";
document.getElementById(c).style.color = "green";
</script>
使用这些类型
sym side | sum_order avg_price
----------| -------------------
ALPHA B | 95109 9849.73
ALPHA S | 91662 9849.964
BETA B | 47 9851.638
BETA S | 60 9853.383
我想计算平仓和平仓,平均头寸,平仓位置以及平仓头寸平均价格。
我使用过这个查询,我相信它非常奇怪(我相信会有更专业的方法)但是它可以按预期工作
c | t f a
---------| -----
sym | s p
side | s
sum_order| f
avg_price| f
给我下表
position_summary:select
close_position:?[prev[sum_order]>sum_order;sum_order;prev[sum_order]],
average_price:avg_price-prev[avg_price],
open_pos:prev[sum_order]-sum_order,
open_wavgprice:?[sum_order>next[sum_order];avg_price;next[avg_price]][0]
by sym from res
和类型
sym | close_position average_price open_pos open_wavgprice
----------| ----------------------------------------------------
ALPHA | 91662 0.2342456 3447 9849.73
BETA | 47 1.745035 -13 9853.38
现在我的问题从这里开始,想象一下我将position_summary表加入另一个表,附加另一个类型为f的“current_price”列
我想要做的是确定未平仓头寸的点数。
我试过这种方式:
c | t f a
--------------| -----
sym | s s
close_position| F
average_price | F
open_pos | F
open_wavgprice| f
但我得到'类型错误,
当然因为sum_order是F型而open_wavgprice和current_price是f。我在互联网上搜索了我对F型没有太多了解。
首先:我该如何处理?我试过“演员”或使用“raze”但没有效果,而且我不确定他们在这个特殊场合是否正确。
第二:有没有更好的方法在查询表中使用“if-then”(例如,简单的英语:如果此列的这一行然后采用另一列的上一个/下一个或前一个的第二个或第三个/下一栏)
谢谢你的帮助
答案 0 :(得分:1)
让我用一个稍微简单的表格来重述你的问题:
q)show res:([sym:`A`A`B`B;side:`B`S`B`S]size:95 91 47 60;price:49.7 49.9 51.6 53.3)
sym side| size price
--------| ----------
A B | 95 49.7
A S | 91 49.9
B B | 47 51.6
B S | 60 53.3
您正在尝试使用如下查询找到每个符号的结束位置:
q)show summary:select close:?[prev[size]>size;size;prev[size]] by sym from res
sym| close
---| -----
A | 91
B | 47
结果似乎在&#34;关闭&#34;的每一行中都有一个数字。专栏,但事实上它有两个。您可能会注意到上面显示中每个数字前的额外空格,或者您可以显示第一行
q)first 0!summary
sym | `A
close| 0N 91
并看到&#34;关闭&#34;中的第一行列是0N 91
。由于0N
等缺失值显示为空格,因此很难在之前的显示中看到它们。
不难理解你是如何得到这两个价值观的。由于您按sym选择,每列按符号分组,对于符号A,您有
q)show size:95 91
95 91
和
q)prev size
0N 95
导致
q)?[prev[size]>size;size;prev[size]]
0N 91
(回想一下0N小于任何其他整数。)
作为旁注,?[a>b;b;a]
是元素最小值,可以在q中写为a & b
,因此您的条件表达式可以写为
q)size & prev size
0N 91
现在我们可以看到?
为什么会给你类型错误
q)close:exec close from summary
q)close
91
47
虽然显示屏是欺骗性的,但是&#34;关闭&#34;以上是两个向量的列表:
q)first close
0N 91
和
q)last close
0N 47
矢量条件不支持:
q)?[close>0;10;20]
'type
[0] ?[close>0;10;20]
^
使用each
:
q)?[;10;20]each close>0
20 10
20 10
但我不认为这是你想要的。计算摘要表时,问题就开始了。我希望收盘位是&#34; B&#34;订单减去&#34; S&#34;可以计算为
的订单q)select close:sum ?[side=`B;size;neg size] by sym from res
sym| close
---| -----
A | 4
B | -13
现在,您应该能够修复摘要查询中的其余列。只需确保在每个列的表达式中使用sum
等聚合函数。
答案 1 :(得分:0)
类型select first each close_position, first each average_price.....
表示&#34;单元格&#34;在列中包含浮点数而不是原子数。所以你的列实际上是向量的向量而不是平面向量。
在你的情况下,你在每个单元格中都有一个大小为1的向量,所以在你的情况下你可以这样做:
f
将为您提供select close_position:?[prev[sum_order]>sum_order;last sum_order; last prev[sum_order].....
类型。
我不是100%在第一个查询中尝试做的事情,而且我没有q终端可以检查,但您可以将其放入查询中:
override func viewWillAppear(animated: Bool) {
//1
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
//2
self.setStatusBarStyle(UIStatusBarStyle.LightContent)
//3
if self.respondsToSelector(#selector(setNeedsStatusBarAppearanceUpdate)){
self.setNeedsStatusBarAppearanceUpdate()
}
}
即。获取列表中的最后一个sum_order。