炒股软件有哪些好看的电影(麦语言炒股软件有哪些)
本篇文章给大家谈谈炒股软件有哪些好看的电影,以及麦语言炒股软件有哪些的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
文章详情介绍:
如果你什么都做不了 可以看看这6部关于投资的电影
假期在家,除了每天正常吃饭睡觉,看看微信群,刷微博,其他什么事情都做不了。随身带着的两本书,翻了几页就看不下去,早早就下载好的电影,看了开头,也觉得索然无味。想起自己还是个文字工作者,也是电影爱好者。看过好些很好的电影,和大家分享一下。
《Margin Call》
这部电影是我的最爱。它讲述的是一个投资机构的基层员工发现了自己公司使用的金融模型有问题,随后他发现了公司可能面临巨大的损失,以及整个金融市场存在的风险。而公司高管处理问题的手腕让他懂得了如何在勾心斗角的金融市场上生存下去。即使扩大到所有题材,这都是一部值得一看的电影。豆瓣的几个中文译名都不够精彩:《孖展风云(港)》、《黑心交易员的告白(台)》、《利益风暴》、《利益召唤》、《追缴保证金》都不能准确表达电影的主题。电影涉及到很多专业的金融知识,但不影响它想表达的意思:在越来越复杂的金融系统里,危机无处不在。这个危机并不总是会由监管机构,或者金融企业高管发现。而一旦爆发危机,人性之恶就会充分显露出来。当然,市场上的金融机构都不是省油的灯。最后谁能活下来,就看谁更心狠手辣了。
《金矿 Gold》
电影是根据真实故事的改编的。故事原型是1993年Bre-X金矿公司诈骗案。Bre-X金矿公司是一家加拿大金矿公司,1989年7月上市,当时只是每股约25分的垃圾股,没有什么资产也没有什么盈利。后来这个公司买下了印尼矿山的开采权,通过往岩石中掺金粉的做法,营造了矿山中矿石含金量极高的假象。利好消息通过证券分析师和媒体一波一波被市场获悉,到1996年4月,公司股价已飞飙至200元。1996年10月,Bre-X金矿公司诈骗的行径遭到曝光,但成千上万的股民的资产早已落入了该公司创始人等人的腰包里。电影拍得非常精彩,不仅还原了大部分历史,还拍得故事性十足,主角马修·麦康纳对黄金的癫狂让人拍手叫绝。如果熟悉A股的历史,你会发现不少造假公司的桥段和电影基本如出一辙。
《华尔街之狼The Wolf of Wall Street》
这部电影改编自前华尔街股票经纪人乔丹·贝尔福特的个人同名自传,获得了第86界奥斯卡最佳影片的提名。之所以大受欢迎很大一部分原因是主演小李子,达卡普里奥·莱昂纳多。他把一个倒卖垃圾股而暴富的股票经纪人身上的嚣张跋扈和不可一世表现得淋漓尽致。A股的严监管其实不容易看到这类人身影,但前几年互联网金融的野蛮生长,仿佛就是华尔街之狼的翻版。P2P本质上就是没有风险辨别能力的中介机构,把盈利能力差的资产,甚至垃圾资产,通过互联网卖给不明真相的群众。后来法院查明的E租宝创始人丁宁的奢侈生活,比起华尔街之狼有过之而无不及。
《大空头 The Big Short》
这部电影同样获得了奥斯卡最佳影片提名,主演同样是万人迷,而且不止一个,布拉德·皮特、瑞恩·高斯林、克里斯蒂安·贝尔、史蒂夫·卡瑞尔。但电影略微有点枯燥,主要讲述的是2008年金融危机,尽管无数个人和机构损失惨重,但同样有人通过做空股票获利巨大。当然,前提是你能够有足够多的信息去判断股市是否会崩盘,并在它崩盘之前有足够的资金做空。自从2008年以后,美股进入了长达10年的牛市,至今没有见顶的迹象。但已经有很多对冲基金经理在等待它崩溃的那一天了。这部电影里故事重演,不会太遥远。
《华尔街Wall Street》
这部1987年上演的电影,主角是老帅哥迈克尔·道格拉斯。当然,他那会儿还不老——凭借着这部电影拿下了当年的奥斯卡最佳男主角。现在看这部电影,可能觉得情节有点老套,但不影响它想表达的东西:要想在股市里获得暴富的机会,就必须铤而走险,甚至违法犯罪。衣着光鲜的投资大佬,背地里不知道做了多少肮脏勾当。
《魔鬼交易员Rogue Trader》
这部电影可能很少有人看过,确实也算不上特别精彩,因为没把真实发生过的那段跌宕起伏的历史拍出来。但它的原著作品《我是如何搞垮巴林银行的》,即使没有读过,也应该听说过该书作者:尼克·李森。他作为一个金融衍生品的交易员,竟然能够把百年历史的英国最老牌的巴林银行拖入泥潭,并最终在1995年破产倒闭,再次说明了巨无霸的金融机构,并非看上去那么牢不可破。在巴林银行之后,2002年爱尔兰联合银行美国巴尔的摩分公司交易员约翰·鲁斯纳克造成了7.5亿美元的损失;2008年法国兴业银行交易员柯维尔违规买卖股指期货,造成67亿美元的损失;2011年9月,瑞银(UBS)交易员违规操作造成大约20亿美元的损失;2013年A股某大牌券商的策略交易系统错误以及随后的内幕交易,公司被罚款5个多亿。
以上6部电影,笔者都观看过,有些还细品过数遍。看这些电影,和读巴菲特、芒格、索罗斯的作品一样,不会让你节后开盘就能买到黑马股,甚至不能保证你能跑赢大盘指数。但它们能让你更清楚了解市场参与各方行事的逻辑。即使最终不能避免沦为韭菜,也可以知道拿镰刀的人是谁。
本文源自证券时报网
Kdb+ 用腻了?一文帮你成为数据迁移小能手
一直以来,Kdb+ 以程序体积小、代码简洁、运行速度快而闻名。它是美国华尔街各大金融机构20多年来处理大规模时序数据的首选系统,通常用于高频交易,非常适用于高速存储、分析、处理和检索时序数据集。Kdb+ 还提供了专门的编程语言 q 语言,简洁而且灵活,天生具有处理大规模时序数据的能力。
2018年初发布的 DolphinDB,同样是性能极佳的时间序列数据库。作为一款国产的高性能分布式数据库产品,DolphinDB 迅速崛起,成为国内头部券商、私募公募的首选方案。DolphinDB 功能强大的编程语言和高容量高速度的流数据分析系统,能在满足低延时高吞吐量数据读写的要求的同时,轻松实现因子挖掘、流式计算、股票行情回放、实时计算高频因子等功能,为金融和物联网领域的数据存储和分析计算提供一站式解决方案。近几年来,DolphinDB 天然的分布式构架,强大的流式增量计算能力,丰富的函数库,以及易用性等优势吸引了大量海内外用户使用 DolphinDB 代替 Kdb+。
本教程旨在为 Kdb+ 使用者迁移到 DolphinDB 提供一份简明的参考,考察了两者的相同点和区别,介绍了如何将 Kdb+ 数据迁移到 DolphinDB,并总结了从 Kdb+ 到 DolphinDB 编程语法方面的映射。
1. Kdb+ vs DolphinDBKdb+诞生于上世纪90年代末,主要用于金融场景的数据处理。DolphinDB 的首次发布在2018,相隔 Kdb+ 20年。
1.1 DolphinDB 与 Kdb+ 的相同点1)数据库类型
DolphinDB 和 Kdb+ 都是列存储的时间序列数据库,都包括磁盘数据库和内存数据库,同样支持并鼓励对表进行分区。数据库系统都包括了编程语言,非常适合库内开发重度的数据应用。
2)编程语言
DolphinDB 和 Kdb+ 在编程语言方面有许多相似的地方。DolphinDB 同样支持元编程、向量处理和函数式编程,部分 SQL 语句可以在 DolphinDB 脚本中直接使用。Kdb+ 的数据类型、函数和关键字大多能在 DolphinDB 中找到对应,大部分的 Kdb+ 脚本都可以一对一翻译为 DolphinDB 脚本。
3)金融支持
DolphinDB 和 Kdb+ 都对金融领域有非常好的支持。作为列式存储的时序数据库,两者不仅有着常规数据库的精确性、稳定性和安全性,还在存储和处理结构化时间序列数据的场景下有天然的优势,并且都支持对向量、矩阵、表等多种类型的数据进行数值分析的操作,非常适合追求高性能和高灵活性的金融应用领域。此外,DolphinDB 和 Kdb+ 还都具备对海量流数据进行实时分析的能力,是流数据库、内存数据库和历史数据三合一的全栈数据平台。
1.2 DolphinDB 与 Kdb+ 的区别1)系统架构
DolphinDB 和 Kdb+ 在架构上有很大的不同。DolphinDB 的构架引入了分布式文件系统,天然具备数据高可用、系统高容错、集群易扩展等分布式系统设计所带来的优势。相比之下,主要基于高性能计算机设计的 Kdb+,虽然也能通过脚本修改路由网关的方式,运行在多服务器集群上,但这种方式具有很大的局限性。除了集群的部署难度和扩展性受限,Kdb+ 很难像 DolphinDB 一样实现自动平衡节点负载来提升并行计算的性能,或是在某个节点故障时保证系统的高可用性。
2)多用户接入支持
DolphinDB 相对于 Kdb+ 在架构上的优势还体现在它对多线程的支持上。DolphinDB 支持多用户同时接入系统进行作业,用户可以使用 Web 端管理页面、VS code 插件或是桌面端的 DolphinDB GUI 连接服务器运行脚本。而 Kdb+ 虽然支持并发运算,它对多用户并发任务的支持却没有那么完善,一个运行非常耗时的任务作业就会导致整个数据库系统的阻塞,从而无法响应其他用户。实际生产中,这个缺陷在临近市场开放和结束的一段时间里可能会造成问题。
同时,Kdb+ 对多用户接入的设计是让所有用户共享一个 session,用 domain 来区分不同用户创建的变量或自定义函数,但不强制要求用户创建自己的namespace。而 DolphhinDB 为每一个用户创建自己的session,相互之间不可见,自定义变量和函数的共享则通过使用 share 关键字以及创建 module 或 functionView 的方式实现。相对而言,Kdb+ 的用户 session 管理机制对用户自己操作规范的要求更高。
3)数据库特性
DolphinDB 和 Kdb+ 磁盘存储的模式不同。Kdb+ 使用离线存储模式,数据持久化需要频繁读写磁盘,在部分应用场景会因为 IO 的限制而效率较低。DolphinDB 使用在线存储,可以保持数据随时可用的状态。
此外,DolphinDB 数据库还有许多 Kdb+ 没有的特性。DolphinDB 内置了 OLAP 和 TSDB 双引擎,对事务的 ACID 有严格的支持。DolphinDB 提供包括技术分析指标库(TA-lib)、MyTT(My麦语言 T通达信 T同花顺)指标库和 WorldQuant 101 Alpha 因子指标库在内的1000多个内置函数,能更好地支持金融领域的应用场景。针对高频数据的实时分析处理,DolphinDB 内置多种流计算引擎,支持增量计算和并发计算,窗口函数的性能不受限于窗口长度,能很好地满足物联网和金融领域的应用需求。
4)编程友好
DolphinDB 和 Kdb+ 编程语言的设计理念有很大不同。Kdb+ 要求代码尽可能简短,来减小整个程序的footprint,从而换取更少的访存时间。Kdb+ 编程语言对同一操作符做了多种重载,表达式从左到右解析,运算符没有优先级,错误信息也非常简单。而 DolphinDB 的编程语言设计上非常注重代码的可读性,语法更接近 Python,表达式跟大部分编程语言的习惯相同,从右到左解析,并尊重运算符的优先级。DolphinDB 编程语言可读性高,上手难度低,代码更容易更新维护,是比 Kdb+ 更加适合现代软件工程团队协作的编程语言。
5)中文友好
与 Kdb+ 相比,DolphinDB 对中文用户更加友好。DolphinDB 由浙江智臾科技有限公司自主研发,有丰富的中文教程和交流氛围良好的技术交流社区,DolphinDB 团队也在不断地对产品进行更新和维护。
2. 从 Kdb+ 导入数据到 DolphinDBDolphinDB 为导入 Kdb+ 数据提供插件支持,插件代码已开源在 github/gitee 平台,具体使用请参考 github 上的教程或 gitee 上的教程。
DolphinDB 的 Kdb+ 插件为用户提供了两种数据导入方式:连接正在运行的 Kdb+ 数据库,以 Kdb+ 数据库作为中间管道导入数据;直接读取磁盘上的 Kdb+ 数据文件进行导入。两种方式都会将数据加载为 DolphinDB 的内存表。
使用 DolphinDB 的 Kdb+ 插件导入数据,在脚本中用 loadPlugin("
/path/to/plugin/PluginKDB.txt") 语句加载插件,就可以用插件提供的函数进行数据导入。对于第一种导入方式,首先需要使用 connect 函数建立与 Kdb+ 数据库的连接,获取连接句柄,之后可以用 close 函数断开连接。使用 loadTable 函数通过 Kdb+ 数据库读取数据,需要提供表文件的路径和 sym 文件路径,sym 文件路径可以为空。
// 加载插件 loadPlugin("/home/DolphinDBPlugin/kdb/build/PluginKDB.txt") // 确保插件加载完毕再执行之后的代码 go // 连接 kdb+ 数据库,用户名和密码字段可以为空 handle = kdb::connect("127.0.0.1", 5000, "admin:123456") // 指定文件路径 DATA_DIR="/home/kdb/data/kdb_sample" // 通过 loadTable,加载数据到 DolphinDB Daily = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Daily/", DATA_DIR + "/sym") Minute = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Minute", DATA_DIR + "/sym") Ticks = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Ticks/", DATA_DIR + "/sym") Orders = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Orders", DATA_DIR + "/sym") // 关闭连接 kdb::close(handle)
对于第二种文件导入方式,使用 loadFile 函数直接读取磁盘上的 Kdb+ 文件,需要提供表文件的路径和可选的 sym 文件路径,sym 文件路径可以为空。
// 加载插件 loadPlugin("/home/DolphinDBPlugin/kdb/build/PluginKDB.txt") // 确保插件加载完毕再执行之后的代码 go // 指定文件路径 DATA_DIR="/home/kdb/data/kdb_sample" // 通过 loadFile,加载数据到 DolphinDB Daily2 = kdb::loadFile(DATA_DIR + "/2022.06.17/Daily", DATA_DIR + "/sym") Minute2= kdb::loadFile(DATA_DIR + "/2022.06.17/Minute/", DATA_DIR + "/sym") Ticks2 = kdb::loadFile(DATA_DIR + "/2022.06.17/Ticks/", DATA_DIR + "/sym") Orders2 = kdb::loadFile(DATA_DIR + "/2022.06.17/Orders/", DATA_DIR + "/sym")
3. 给 Kdb+ 使用者的 DolphinDB 语法参考
本节的编写基于 Kdb+ 和 q 官方参考文档和 DolphinDB 2.0用户手册。
本节所提及的 Kdb+ 函数或关键字在 DolphinDB 中的对应,仅保证功能上的可替代性,使用方法可能与原函数略有差异。建议在实际使用前查阅 DolphinDB 2.0用户手册。
3.1 数据类型3.1.1基本数据类型
Kdb+ 数据类型 |
DolphinDB 数据类型 |
举例 |
字节数 |
范围 |
VOID |
NULL |
Void |
||
boolean |
BOOL |
1b, 0b, true, false |
1 |
0~1 |
byte |
||||
char |
CHAR |
'a', 97c |
1 |
-2 7 +1~2 7 -1 |
short |
SHORT |
122h |
2 |
-2 15 +1~2 15 -1 |
int |
INT |
21 |
4 |
-2 31 +1~2 31 -1 |
long |
LONG |
22, 22l |
8 |
-2 63 +1~2 63 -1 |
real |
FLOAT |
2.1f |
4 |
有效位数:06~09 位 |
float |
DOUBLE |
2.1 |
8 |
有效位数:15~17 位 |
date |
DATE |
2013.06.13 |
4 |
|
month |
MONTH |
2012.06M |
4 |
|
time |
TIME |
13:30:10.008 |
4 |
|
minute |
MINUTE |
13:30m |
4 |
|
second |
SECOND |
13:30:10 |
4 |
|
(datetime) |
DATETIME |
2012.06.13 13:30:10 or 2012.06.13T13:30:10 |
4 |
|
TIMESTAMP |
2012.06.13 13:30:10.008 or 2012.06.13T13:30:10.008 |
8 |
||
DATEHOUR |
2012.06.13T13 |
4 |
||
timespan |
NANOTIME |
13:30:10.008007006 |
8 |
|
timestamp |
NANOTIMESTAMP |
2012.06.13 13:30:10.008007006 or 2012.06.13T13:30:10.008007006 |
8 |
|
symbol |
SYMBOL |
4 |
||
STRING |
"Hello" or 'Hello' or `Hello |
|||
guid |
UUID |
5d212a78-cc48-e3b1-4235-b4d91473ee87 |
16 |
DolphinDB 目前没有可以直接对应 Kdb+ 中 byte 的数据类型。
Kdb+ 中的 char 类型使用双引号标识,而 DolphinDB 的 CHAR 使用单引号。"c" 在 DolphinDB 中会被识别为字符串。
Kdb+ 中的 long 类型与 DolphinDB 的 LONG 数据类型符号不同。一个值为42的长型整数若表示为 42j,则无法被 DolphinDB 识别。
Kdb+ 中的 month 类型与 DolphinDB 的 MONTH 数据类型符号不同,2006.07m 在 DolphinDB 中会报错。对于时间类型的值,DolphinDB 用小写字母 m 作分钟类型的后缀,而月份类型的后缀使用了大写字母 M。
DolphinDB 中 DATETIME 类型大小为4字节,而 Kdb+ 中 datetime 类型大小为8字节。
DolphinDB 的 SYMBOL 类型是特殊的字符串类型,相当于枚举类型,数据在 DolphinDB 系统内部存储为一个整数,因此数据排序和比较更有效率。具体使用请参照《DolphinDB 2.0用户手册》中“数据类型”一节。
关于 NULL 和 INF
与 Kdb+ 不同,DolphinDB 没有专门用于表示各个类型正负无穷值的字面量,类型数据溢出时,会被处理为该类型的 NULL 值。通常,在赋值语句或表达式中使用无返回值的函数时,也会得到一个 VOID 类型的 NULL。
通过函数 isVoid 判断是否为 VOID 类型的 NULL,通过函数 isNull 和 isValid 可以检查所有 NULL 值,包括 VOID 和有类型的 NULL。对于不关心 NULL 类型的用户,建议使用 isNull 或 isValid 进行条件判断。
对于 NULL 值的初始化、运算,以及在普通向量函数、聚合函数和高阶函数中的使用方法,《DolphinDB 2.0用户手册》中“NULL 值的操作”一节有详细的说明。
3.1.2 其他数据类型
Kdb+ 数据类型 |
DolphinDB 数据结构 |
举例 |
list |
ANY, MATRIX, DICTIONARY |
(1,2,3) |
enums |
||
anymap |
ANY DICTIONARY, DICTIONARY |
{a:1,b:2} |
dictionary |
||
table |
IN-MEMORY TABLE |
ANY DICTIONARY 是 DolphinDB 中表示 JSON 的数据类型。
DolphinDB 的字典支持嵌套,键必须是标量,值可以是任何数据形式与数据类型。Kdb+ 的字典在输出或进行遍历时,键值对会保留输入时的顺序,而 DolphinDB 的字典按照 key 在 bucket 内的顺序输出键值对。
Kdb+ 的矩阵由嵌套的 list 表示,遵循行优先。DolphinDB 的矩阵有专门的数据类型 matrix,遵循列优先,Kdb+ 矩阵输入到 DolphinDB 时需要转换方向。
DolphinDB支持包括标量、向量、数据对、矩阵、集合、字典和表在内的多种数据形式,并针对不同的使用场景做了具体优化,请参考《DolphinDB 2.0文档》中“数据形式”一节。
3.1.3 数据类型检查函数DolphinDB提供了 typestr 和 type 这两个用于检查数据类型。typestr 返回的是数据类型的名称(字符串常量);type 返回的是数据类型 ID(整数)。
3.2 关键字3.2.1 control 类
Kdb+ |
DolphinDB |
do |
do-while |
exit |
|
if |
if-else |
while |
do-while |
3.2.2 env 类
Kdb+ |
DolphinDB |
getenv |
getEnv |
gtime |
gmtime |
ltime |
localtime |
setenv |
3.2.3 interpret 类
Kdb+ |
DolphinDB |
eval |
eval |
parse |
parseExpr |
reval |
|
show |
|
system |
shell |
value |
查询字典、表的值: values 查询普通变量的值: 将字符串作为元代码执行: parseExpr 将列表作为元代码执行: expr |
3.2.4 join 类
join 方式 |
Kdb+ |
DolphinDB |
as-of join |
aj, aj0, ajf, ajf0, asof |
aj |
equal join |
ej |
ej, sej |
innner join |
ij, ijf |
inner join |
left join |
lj, ljf |
lj, lsj |
plus join |
pj |
|
union join |
uj, ujf |
|
window join |
wj, wj1 |
wj, pwj |
3.2.5 list 类
Kdb+ |
DolphinDB |
count |
非NULL元素个数: count 包括NULL的元素个数: size |
mcount |
mcount |
cross |
join:C, cross(join, X, Y) |
cut |
cut |
enlist |
[], array, bigArray |
except |
|
fills |
ffill, ffill! |
first |
first |
last |
last |
flip |
flip, transpose |
group |
groups |
in |
in |
inter |
intersection(set(X), set(Y)) |
next |
next |
prev |
prev |
xprev |
move |
raze |
将一个矩阵或一系列向量转换成一维向量: flatten |
reverse |
reverse |
rotate |
|
sublist |
head, tail, subarray, subtuple |
sv |
连接字符、字符串向量: concat |
til |
til |
union |
union(set(X), set(Y)) 或 distinct(join(X, Y)) |
vs |
分割字符串: split |
where |
3.2.6 logic 类
Kdb+ |
DolphinDB |
all |
all |
and |
and |
any |
any |
not |
not |
or |
or |
3.2.7 math 类
Kdb+ |
DolphinDB |
abs |
abs |
cos |
cos |
acos |
acos |
sin |
sin |
asin |
asin |
tan |
tan |
atan |
atan |
avg |
avg, mean |
avgs |
cumavg |
ceiling |
ceil |
cor |
corr |
cov |
|
scov |
covar |
deltas |
deltas |
dev |
stdp |
mdev |
mstdp |
sdev |
std |
div |
div |
ema |
ema |
exp |
exp |
xexp |
pow |
floor |
floor |
inv |
inverse |
log |
log |
xlog |
|
lsq |
|
mavg |
mavg |
wavg |
wavg |
max |
max |
maxs |
cummax |
mmax |
mmax |
med |
med |
min |
min |
mins |
cummin |
mmin |
mmin |
mmu |
dot |
mod |
mod |
sum |
sum |
sums |
cumsum |
msum |
msum |
wsum |
wsum |
neg |
neg |
prd |
prod |
prds |
cumprod |
rand |
rand |
ratios |
ratios |
reciprocal |
reciprocal |
signum |
signum |
sqrt |
sqrt |
within |
between, in |
var |
varp |
svar |
var |
DolphinDB 的 TA-lib 系列函数窗口确定规则与 Kdb+ 不同,会忽略元素开头的空值,并将这些空值保留到结果中,然后从第一个非空元素开始进行滑动窗口的计算。当以元素个数衡量窗口时,根据滑动窗口的计算规则,只有当 window 内的元素填满窗口时,才开始第一次计算,即前(window - 1)个元素的计算结果默认为 NULL。
DolphinDB 的 m 系列(滑动窗口系列)函数的窗口确定规则,在没有指定 minPeriods 参数的情况下,将前 (window - 1)个元素视为 NULL。若要得到与 Kdb+ 相同的计算结果,请将 minPeriods 参数指定为1。
DolphinDB 的 ratios 函数,若输入参数是向量,返回结果的第一个元素是 NULL。
3.2.8 meta 类
Kdb+ |
DolphinDB |
attr |
|
null |
isNull, isNothing, isVoid |
tables |
getTables |
type |
type, typestr, form |
view, views |
3.2.9 SQL类
Kdb+ |
DolphinDB |
delete |
delete, sqlDelete |
exec |
exec |
fby |
contextby |
select |
select |
update |
更改记录: update, sqlUpdate 添加新的记录: insert into 添加新的列: alter, addColumn |
3.2.10 sort 类
Kdb+ |
DolphinDB |
asc |
sort, sort! |
iasc |
isort, isort! |
xasc |
sortBy! |
bin, binr |
binsrch |
desc |
sort, sort! |
idesc |
isort, isort! |
xdesc |
sortBy! |
differ |
valueChanged |
distinct |
distinct |
rank |
rank |
xbar |
bar |
xrank |
bucket |
3.2.11 table 类
Kdb+ |
DolphinDB |
cols |
columnNames |
xcol |
rename! |
xcols |
reorderColumns! |
csv |
csv 格式分隔符: , |
fkeys, key, keys, xkey |
|
insert |
insert into, tableInsert, append!, push! |
meta |
schema |
ungroup, xgroup |
|
upsert |
insert into, tableInsert, append!, push! |
xasc |
sortBy! |
xdesc |
sortBy! |
3.2.12 text 类
Kdb+ |
DolphinDB |
like |
like, iliek |
lower |
lower |
upper |
upper |
trim |
trim |
ltrim |
ltrim |
rtrim |
rtrim |
md5 |
md5 |
ss |
regexFind |
ssr |
regexReplace |
string |
string |
3.2.13 自定义函数
Kdb+ |
DolphinDB |
signed lambda: f:{[x;y](x*x)+(y*y)+2*x*y} unsigned lambda: {(x*x)+(y*y)+2*x*y}[20;4] |
命名函数: def func(x, y) { return (x*x)+(y*y)+2*x*y; } 匿名函数: def (x, y) { return (x*x)+(y*y)+2*x*y; } |
lambda表达式(只有一个语句的函数): def func(x,y):(x*x)+(y*y)+2*x*y; 或 def(x,y):(x*x)+(y*y)+2*x*y; 或 def(x,y)-> (x*x)+(y*y)+2*x*y; 或 x->x*x |
在 Kdb+ 的语法中,“lambda”与“function“这两个词是等价、可互换的。而在 DolphinDB 中,lambda 表达式是只有一个语句的函数。
Kdb+ 允许无参数列表的函数定义,会默认 x, y, z 按顺序作为可使用的参数名。而 DolphinDB 要求自定义函数必须有非空或者空的参数列表。
DolphinDB 支持在定义函数时使用默认参数,支持使用 const 和 mutable 关键字修饰参数。
// default argument def func(x=1): x+1; // mutable argument def i2t(mutable tb) { return tb.replaceColumn!(`time, time(tb.time/10); }
DolphinDB 对自定义函数支持即时编译(JIT),能保证函数的执行效率。
DolphinDB 允许自定义函数使用内置函数的全部调用方式,即可以用标准格式(前缀)和对象方法格式(后缀)调用用户的自定义函数,若用户定义函数的参数数量为一个或两个,还可以使用运算符格式(中缀)调用函数。
def f(x, y): x+y+1; p = 2; q = 3; f(p, q); // standard p.f(q); // method of object p f q; // operator
3.3运算符
与 Kdb+ 相同,DolphinDB 的运算符根据作用对象的数目可分为一元运算符和二元运算符。DolphinDB 支持许多类型的基本运算符,包括算术运算符、布尔运算符、关系运算符、成员运算符等,以及多种运算数据类型,包括标量、向量、集合、矩阵、字典和表。
与 Kdb+ 不同的是,DolphinDB 表达式的运算顺序是从左往右,也存在运算符优先级的概念。DolphinDB 的运算符优先级顺序与大多数编程语言相似,表达式中优先级最高的运算符首先被执行,具有相同优先级的运算符则按从左到右的顺序执行。
Kdb+ 符号 |
Kdb+ 含义 |
DolphinDB |
. |
Apply |
call() |
Index |
[] |
|
Trap |
try-catch |
|
Amend |
||
@ |
Apply At |
call() |
Index At |
[] |
|
Trap At |
try-catch |
|
Amend At |
||
$ |
Cast |
$, cast() |
Tok |
类型转换函数可直接转换字符串 |
|
Enumerate |
||
Pad |
lpad(), rpad() |
|
mmu |
** |
|
! |
Dict |
dict() |
Enkey, Unkey, Enumeration, Flip Splayed, internal |
||
Display |
print() |
|
Update |
update(), update!() |
|
Delete |
erase!() |
|
? |
Find |
in(), find() |
Roll |
rand() |
|
Deal, Enum Extend |
||
Select |
select |
|
Exec, Simple Exec |
exec |
|
Vector Conditional |
iif() |
|
+ |
Add |
+ |
- |
Substract |
- |
* |
Multiply |
* |
% |
Divide |
\ |
= |
Equals |
== |
<> |
Not Equals |
!= |
~ |
Match |
|
< |
Less Than |
< |
<= |
Up To |
<= |
>= |
At Least |
>= |
> |
Greater Than |
> |
| |
Greater |
max() |
OR |
| |
|
& |
Lesser |
min() |
AND |
& |
|
# |
Take |
take() |
Set Attribute |
||
_ |
Cut |
cut() |
Drop |
drop() |
|
: |
Assign |
= |
^ |
Fill |
ffill(), ffill!() |
Coalesce |
append!() |
|
, |
Join |
<- |
' |
Compose |
|
0: 1: 2: |
File Text, File Binary, Dynamic Load |
loadText(), saveText() |
0 ±1 ±2 ±n |
write to console, stdout, stderr, handle n |
print() |
3.4副词
Kdb+ 和 DolphinDB 中的副词,也就是高阶函数,是以一个函数与数据对象作为输入内容的函数,用以扩展或增强函数或者运算符的功能。通常,输入数据首先以一种预设的方式被分解成多个数据块(可能重叠),然后将函数应用于每个数据块,最后将所有的结果组合为一个对象返回。
Kdb+ 中副词的作用对象是 list,而 DolphinDB 高阶函数的输入数据可以是标量、向量、矩阵、字典或表。通常来说,一个向量被分解成多个标量,一个矩阵被分解成多列(向量),一个表被分解成多行(字典)。在组装阶段,标量类型合并组成一个向量,向量合并成一个矩阵,字典合并成一张表。DolphinDB 高阶函数按元素遍历向量,按列遍历矩阵,按行遍历表。
Kdb+ 符号 |
Kdb+ 含义 |
DolphinDB |
' |
Each, each |
each() 或 :E |
Case |
||
Each Parallel, peach |
peach() |
|
Each Prior, prior |
eachPre() 或 :P |
|
/: |
Each Right |
eachRight() 或 :R |
\: |
Each Left |
eachLeft() 或 :L |
/ |
Over, over |
reduce() 或 :T |
\ |
Scan, scan |
accumulate() 或 :A |
3.5执行控制
Kdb+ 符号 |
Kdb+ 含义 |
DolphinDB |
.[f;x;e] |
Trap |
try-catch |
@[f;x;e] |
Trap-At |
try-catch |
: |
Return |
return |
' |
Signal |
throw |
do |
do-while |
|
exit |
quit |
|
while |
do-while |
|
if |
if-else |
|
$[x;y;z] |
Cond |
if-else |
x:y |
Assign |
<variable>=<object> |
x[i]:y |
Indexed assign |
<variable>[index]=<object> |
x op:y, op:[x;y] 或 x[i]op:y, op:[x i;y] |
Assign through operator |
支持以下运算符扩展的赋值: +=, -=. *=, /=, \= |
\t |
Timer |
timer |
DolphinDB 支持多变量赋值,可将一个或多个值一次性赋予多个变量。
DolphinDB 支持引用赋值,直接引用原值的内存地址来避免不必要的拷贝,有效地节约内存空间。例如,对于交换两个变量的值的操作,引用赋值的效率高于按值赋值的效率。
n=20000000; x=rand(200000.0, n); y=rand(200000.0, n); timer x, y = y, x; // Time elapsed: 1240.119 ms timer {&t=x;&x=y;&y=t;} // Time elapsed: 0.004 ms
DolphinDB 允许用户通过取消变量或函数定义来手动释放内存。使用 undef 或 <variable>=NULL,详情请参考《DolphinDB 2.0用户手册》(https://www.dolphindb.cn/cn/help/index.html)。