这篇文章是对目前我自己用java开发量化交易系统的一个总结,后续有新的进展我会陆续更新到这个专栏里。用业余时间搞量化这个副业是想实现自己一直以来的愿望:当一个自由的宽客(其实大部分是因为不满足于死工资)

想做量化已经有4-5年了,记得大学的时候第一次在网上看到宽客这个名词,当时心里很激动。第一,当宽客很自由,而且能发挥个人的聪明才智,大学时在学校里参加过数据建模竞赛,我对能够用模型描述解决现实问题的这种方式感到既激动又开心,对社团里建模大神们尤其崇拜。当然,现在看来,当时的我们都不过是套模型,套公式而已。第二,这种职业不像自主创业那样需要太多应酬(当时的理解)。在学校里我们用的是matlab,后来慢慢又接触了python、R、java这些语言,在数学建模课上,老师讲了各种模型,像线性回归,决策树、SVM、遗传算法、退火算法等等,PPT一闪而过,我对模型却只是一知半解,在比赛的时候也只是找现成的解决方法去套,于是我决定用matlab来实现这些算法,后来接触到python、R后,又用python、R把这些算法实现了一遍。这些都是大学的经历,后来工作了,使用java比较多。这几门语言里,matlab和R在早期的时候使用的比较多,尤其是R的ggplot2绘图包,画出来的图实在是太惊艳了,但是它们有一个很大的局限处,它们的易用性只是体现在特定的领域:数据分析、处理、可视化等等,如果你想要用matlab或者R去写一个爬虫,或者将中间数据存储到数据库里,对它进行增删改查,相信你还是会选择python或者java这种比较全面一点的语言。python我使用得比较多,在整个研究生期间,包括后来实习都是用的python,用python也写了很多小玩具,比如打包依赖用的pymvn, 利用pyqt5写了一个翻译工具,后台调的是百度翻译,还写了一个用来计时的桌面小软件。总的来说python在写代码的时候很舒服,而且有很多库可以实现你想要的功能,缺点也有,就是很多库都是c/c++写的,有的时候出了莫名其妙的bug只能查文档,或者在网上翻解决方案,python很多应该是大部分库的代码都没有使用类型注解,如果不去debug,直接看源码会很懵逼。说实话,由于python很容易上手,导致很多水平很差的人在用python,看到有的同事写python变量用t,tt,ttt,我真的是一肚子火。最后一点当然是运行效率了,很多人说用python写原型,然后用c++或者java再实现一遍,但是当你写的逻辑或者算法特别复杂的时候,这个时候再去换一门语言代价就很大了。网上有不少文章写用numba或者cython给python提速,大多数人都只是罗列下官网的例子,或者随便找一个代数计算的例子。在真正在项目里面,很多都是自己定义的数据结构,numba和cython提升的效果根本就不明显,你需要把耗时的计算代码解耦出来,只使用基本的数据结构或者使用numpy的数组结构去实现计算功能,这样才能有效的提升代码的运行效率,在我看来这有点得不偿失,还不如用传统的方法去优化代码逻辑和数据结构,因为你的代码不可能不迭代,也许下次迭代的时候你解耦出来的高效代码就无用了。之所以使用java来做量化,其实我也纠结了很久,知乎里好多人比较反感java,认为java很啰嗦,很多人推送scala或者kotlin,这两门语言我都尝试过,就我个人而言,我并没有觉得使用了scala或者kotlin后我的代码简洁了很多,我有一个观点:只要工具包足够多,写代码的体验自然就提升了,在开发的过程中,我也写了一个java的工具包:easy-util,这个包包含了字符串格式化,操作数组、流、日期等等,个人体验还不错。好了,这部分到此为止,本来是想总结下自己的量化实践过程的,没想到都在说语言的问题了。

从一个业余的角度来看,个人觉得一个量化系统需要以下这几个模块:数据来源

方便操作数据集的工具,像python的DataFrame

回测结果可视化

策略参数优化

实盘交易数据来源:我在github上找了很多,但是没有找到提供java调用接口的数据源,国内的有tushare、baostock,tushare已经满足我个人的使用需求了,就没有关注其他的。tushare提供了部分http接口获取数据,但是像股票的实时分笔数据还是只能用python去调用,于是我用flask把tushare里获取数据的方法做成了http接口,利用http接口给java提供数据源。

一个方便操作数据集的工具:这个在python里有pandas,而且很成熟。我刚开始用的是kotlin的krangl库,它里面也提供了DataFrame结构,但还不是很成熟,并不好用。这里强力推荐下java的smile库,它提供了很多基于jvm语言的接口,而且它提供的DataFrame很好用,作者回复issue也很及时

回测结果可视化:smile库也提供了可视化的模块,但是个人觉得并不是很好用,画图的时候必须基于DataFrame的数据结构,很多时候我们画图的数据长度并不是一致的,有的列只有部分数据,用smile画图必须用DataFrame重新构造数据,我觉得这样做太麻烦了,于是写了一个专门画图的库:better-plot,这个库的思路是模仿pyechart,前端使用echart展示数据,在java端构造出echart的option,下面是画图的例子:

Plot.of()

.x(tradeDates, RangeUtil.slice(tradeDates, 6, new String[tradeDates.length - 6]),

tradeDates, RangeUtil.slice(tradeDates, 1, new String[tradeDates.length-1]),tradeDates, tradeDates)

.y(closePrices, RangeUtil.multiply(macdWeekLine, 8), RangeUtil.multiply(macdLine, 8), forceIndexesNormalized,

lowClosePrices, highClosePrices)

.title("ma")

.xLabel("trade_date")

.legend("close", "macd-week", "macd", "force-indexes", "low", "high")

.lineTypes("line", "line", "line", "line", "line", "line")

.show();

目前这个库还很简陋,只适合普通的折线和散点图,不过用来对回测进行可视化已经足够了,而且也比较方便

4. 策略参数优化:优化参数的算法有很多,像遗传算法,退火算法,粒子群算法等,我写了一个通用的遗传算法框架,将select,mutate,cross等算子中可重用的部分用框架实现,自己只需要实现个体的数据结构,适应度值计算,个体比较等逻辑。

5. 实盘交易:这块应该是量化交易中最重要的部分了,当初在设计的时候是想根据策略来执行自动交易的,但是国内个人要想进行自动交易好像比较困难,具体的我没详细去了解,网上现有一个解决方案:利用自动化测试工具像selenium等,在网页版交易软件上模拟交易操作时的点击事件。这种方案需要网络稳定,并且网页前端代码不变这些条件,最后我还是决定使用发送邮件的形式来通知交易。我开发了一个小网站,通过在网站上对相关股票进行关注,后台对关注的股票,每天下午2:30进行计算,将需要执行的交易发送到邮件里进行通知

好了,先记录到这里

量化java_用java做量化相关推荐

  1. 到底是JAVA 做量化交易强,还是PYTHON 做量化交易强

    网上几乎绝大多数网友都会认为"PYTHON 做量化交易强于JAVA",有的甚至认为"PYTHON在量化交易领域,无可替代".我作为一名JAVA出生的人,写了一辈 ...

  2. java 量化交易系统_用java做量化

    这篇文章是对目前我自己用java开发量化交易系统的一个总结,后续有新的进展我会陆续更新到这个专栏里.用业余时间搞量化这个副业是想实现自己一直以来的愿望:当一个自由的宽客(其实大部分是因为不满足于死工资 ...

  3. 简易计算器 java_用Java做一个简易计算器,要用到哪些知识?

    分析问题关键词:Java.计算器 深夜无聊,暂且一答. 计算器分两个步骤:计算 + 器 篇一 ·「器」 在编程中,我们可以把「器」理解为「GUI(图形界面)」,Java 语言描绘的图形界面有很多种类, ...

  4. 爬虫程序 java_用JAVA做一个爬虫程序——Gecco

    Gecco是一个开源的简单的java爬虫框架 主要是通过将获取的网页信息封装成HtmlBean来进行爬取信息. 作者也是一个新手.这篇文章只是提供一个入门的思路. 如果有不对的地方,还望指正. 咱们来 ...

  5. 数据结构 c c java_用java做开发,却学c语言的数据结构,这样好吗?

    数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构. 顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻 ...

  6. 为什么要用Excel做量化投资

    本博客的适用对象:想做一些量化投资,但又不想写代码的普通投资者. 做了20多年的财务和投资.随着年龄的增长,投资风格也逐渐变得稳健,逐步认识到投资不能把简单问题复杂化了,策略应力求简单明了,工具适合自 ...

  7. 学金融会python_大学生金融小白自学Python做量化投资需要注意哪些?

    大学生金融小白自学python做量化投资需要注意些什么?量化金融其实是一个交叉复合学科,需要掌握数学.计算机.金融等方面的知识.显而易见,对于金融学背景的同学来说,就需要另外学习计算机编程的知识,而计 ...

  8. 基于java的量化交易软件,用户可自行编写交易策略,用于期货、股票、外汇、炒币等多种交易场景,前端采用node14 + vue2

    本项目仅属于技术分享,不构成任何交易建议.使用者自身在交易前,需要清楚其可能面对的交易风险与相关法律规定,并为自身行为负责! 完整代码下载地址:基于java的量化交易软件 这是一个用户可以自行编写交易 ...

  9. 从零开始做量化(4)

    系列文章目录 从零开始做量化(0)-- 引言 从零开始做量化(1)-- 交易框架 从零开始做量化(2)-- 开发环境搭建 从零开始做量化(3) -- 框架实现 从零开始做量化(4) -- 财经数据接口 ...

  10. 新手用Python做量化投资需要注意哪些?

    新手自学python做量化投资需要注意些什么?量化金融其实是一个交叉复合学科,需要掌握数学.计算机.金融等方面的知识.显而易见,对于金融学背景的同学来说,就需要另外学习计算机编程的知识,而计算机背景的 ...

最新文章

  1. python输入列表方法_Python用input输入列表的方法
  2. Android设计模式系列(2)--SDK源码之观察者模式
  3. Linux常用的Shell命令
  4. 2017 Multi-University Training Contest - Team 1—HDU6040
  5. 专家手把手教你写出高水平个人简历
  6. Jsp表单提交数据乱码问题
  7. java保存图片进度条_Java上传文件进度条的实现方法(附demo源码下载)
  8. Myeclipse下Maven的配置
  9. zabbix3.4监控java_CentOS7,zabbix3.4通过,zabbix-Java-gateway监控Tomcat
  10. [2013.9.10]vb.net坑爹的数组
  11. iOS网络开发—POST请求和GET请求
  12. jxl 冻结单元格_如何在Word中冻结表格中单元格的大小
  13. mobi文件怎么打开?
  14. SVM算法应用综合练习(2)--人脸微笑识别
  15. MySQL8.0中消失又回来的磁盘临时表
  16. 基于对抗生成网络的图像转换技术【论文笔记】
  17. 迷你小包包成为时尚新宠,手掌包成为LV品牌潮流款式
  18. Java实现的小根堆
  19. DataTable属性详解
  20. django系统学习笔记

热门文章

  1. appinventor计算机教程,App Inventor编程开发集锦2-计算器-第2课-实现常规操作
  2. php dingo和jwt,三、Laravel5.4+Dingo+JWT 开发API
  3. SSL 3.0 Poodle漏洞修复方法——转
  4. Masked Arrays(numpy arrays掩码)针对数据中存在无效或者确实数据
  5. 【CVPR 2021】Unsupervised Pre-training for Person Re-identification(UPT)
  6. 【大数据存储】Java操作jena练习
  7. JQ实现一个放大镜效果
  8. Linux printf Class.this git rebase Persistent Bugger
  9. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were
  10. 中国六大最忙和六大最懒城市