kdb+q 入门实践

kdb+q堪称天书,对于一个对java,python和c++比较熟练的我来说,一时之间实在难以接受。无奈国内中文资料少之又少,即使有一些中文资料,或者英文的文献,难读也就算了,居然看完十几页,不能按照自己的想法写出一行代码,只知道这个是这样,这个函数这这样的,对上手实践并没有任何卵用。今日认真在google上学习一番,写下这篇博文,力求让读者快速上手。希望能帮到自己和更多正往这个坑里迈的那些人。


1.关于控制语句,控制语句是一个编程下手最直接影响的东西,一般的语言没必要讲,因为都大同小异,然而,q颠覆了传统的。

(1)循环:

q的循环没有for语句,这会让一些喜欢用for的我急得想死,直到找到很好的替代。

(1)do语句:do[3; show i; i:i+1]; show `doend do的中括号里用分号隔开,第一个是do的次数,后面就是do的内容,可以把很多语句yong;连接起来。

(2)i:0; while[i<3; show i; i:i+1]; show `end.同样类似,while中括号的第一个是while的条件,后面是while做的内容

以上用这两种语句来做list遍历实在不方便,因为它们虽能取代for但用得极其之难受。

(3)each。each语句相当于加强形势的for语句,不需要索引的遍历。

例子1:每个加1

l:1 2 3 4 5

(1+)each l

例子2:

取偶数:z这个没用到each但是能起到从list中选择的作用。记住的是til前面,或者list前面必须是个function

{x where 0=x mod 2}til 100

(2)条件语句:也就是传说中的if else语句。q里没有这个关键字。而是用$[;;]代替

先写个function,同样是判断奇偶,第一个;之前是条件,若是,则执行第二个;前面,否则执行第三句

$[0=x mod 2;show `ou;show `ji]each til 200

注意:

1.q是从右往左解析,所以0=x mod 2 不能写反。


2.function:

q里的function出神入化,无所不能,非一般人能接受

function用{}圈住,默认最后一个不带;的那句为返回值,参数在开始用[]框住,[]中用;分开,[]这句和返回值那句一样不能有;

注意:如果参数是x,y之类可以不用显式声明。

我们继续检查奇数偶数:

checkJiOu:{

$[0=x mod 2;show `ou;show `ji]

}

checkJiOu 10

checkJiOu each til 200


3.over和scan。迭代!虽然你现在会循环会判断,但是一个很简单的程序你都写不出来,因为你无从下手!

比方说1 +2+3+。。。100怎么写?虽然有sum函数 :sum til 101

{x+y} over til 101

over 的意思就是迭代,会把你的list的第一个元素给x,然后把第二个元素给y,执行函数,再把结果给x,把list的第三个元素给y。。。

比方说:取一个list的最大值怎么写,虽然有max函数 : max til 101

{$[x>y;x;y]}over til 101

跟over类似,scan也是迭代,只是它会把每一步迭代的结果给放进一个list,最后返回一个list并不是一个值

4.输出。作为入门如果不会输出,即使控制语句出身如何也会痛苦得要死。

show `helloworld

a:23

show `helloworld,(23)

5.今日知识简单回顾:

写一个求标准差的函数:

deviation:{

/ param

[ll]

a:avg ll;

b:(ll-a)*(ll-a)

c:{x+y}over b;

d:sqrt c

};

ll:1 2 3 4

deviation ll


入门就先讲这么多呗.希望能够帮助大家。






你可能感兴趣的:(kdb,kdb+q,量化)