期权监控界面开发技术选型:Qt、Flask、Bokeh、Dash

论坛 期权论坛 期权     
redgavin   2019-12-4 13:03   43211   1
  转自:苍山日暮
      最近梳理了策略库和以后的投研方向,系统性地回顾了下以前收集的、跟量化投资相关的各种开源库,初步构思了一个满足自己投研需求的系统框架。在被坑了两年的代码量后,已经无力一行行敲,所以这套框架会尽可能地使用这些开源工具。
  即便如此,开发进展也很慢,毕竟还有其他的工作;这不几个期权交易策略要上线了,连个称手的监控工具都没有,期权这玩意儿光看价格交易是会疯了。所以不得不把期权监控模块的开发提前,原本只是框架中Monitor的一个应用的。

  期权交易监控必要的几个部分:T型报价、Greeks、波动率曲面、vix、波动率锥、期限结构、偏度、以及构建的信号指标等。
  数据和指标计算等这些就不用说了,大差不差,今天说下监控界面的开发问题。
  (什么?你要用终端、横竖切几块、里面绿色字符不断闪烁?是很酷,但我选择赚钱❗️)

Qt
  说到界面开发,当然不得不提Qt(Python自带的Tkinter就别提了)。软件UI开发首选利器,不过这个玩意儿有点重,代码量略大;更重要的是——默认风格丑、图表交互性差,把matplotlib绘图嵌入Qt里曾经也是部门里遗留的一个小难题。而且matplotlib的图,交互性简直不能忍,别说它的widgets,谁写谁用谁知道。
  作为交易性的市场监控工具,图表交互的重要性就不用提了,所以Qt这个选项直接排除了。
  (当年要不是开发环境陈旧、封闭,我是断不可能点开Qt技能树杈的。)
Flask
  跳过Qt,技术方向一下子就到网页了。现在网页工具那么发达,Chrome OS都有了,网页开发还有什么干不了的。
  首先说说美观和交互,echarts和D3.js直接把网页的图标交互提升了几个层次,虽然不会JavaScript,但Python厉害就厉害在生态上,对应的pyecharts和plotly马上就出来的,做起Dashboard来那是一个酷炫。

  再来说说市场监控工具的使用场景,通常都是一台服务器负责主要运算,投资经理和交易员等直接开网页跟踪、监控就好了,部署起来内外网、权限控制都很容易,省了软件发行版每个应用程序都去取数据计算的问题(当然,软件发行版后面用REST或者RPC也能实现计算的服务器隔离)。
  Flask作为Python网页开发的轻量级框架,用来做这种监控应用绰绰有余。但Flask作为框架,前端方面还是要用其他技术的,现在的问题是,作为纯门外汉,开发起来有不少东西得现学现用,太耗时,所以Flask往后面排了,等主要的应用都做完了,可能会用Flask统一后,进行网站开发和部署。
  BTW,看到知乎上有人开发了vnpy的网页版UI,一下子就把PyQt 4/5的问题绕过去了,UI观感、易用性和扩展都提高了不少。

Bokeh和Dash
  预期去学Flask、HTML、CSS、Vue等一堆东西,还不如找找轻量级的整合工具。于是Bokeh和Dash这俩货进入了最终PK;但差别还是很明显的:Bokeh是以Web浏览器为展示平台的交互式可视化Python库,而Dash是在纯Python环境中构建数据可视化Web APP的开源库。
  在从交互式图表到网页应用的坐标轴上,Bokeh更靠近左边,Dash更靠近右边。Dash基于Flask、Plotly.js和React构建,提供了抽象层;对标上Bokeh更接近Plotly,但提供了网页app的封装,dash在网页布局和设置上提供了更好的灵活性,毕竟把html和交互式widgets做了几乎一对一的封装,而图表可视化则外包给了Plotly。
  最后选Dash,除了文档和众多demo案例外,主要是考虑到监控页面的图表较多,需要布局和跨widgets交互。虽然bokeh也能实现,但是bokeh在图表内部的被动式交互(比如鼠标悬停提示)需要自己写HoverTool、数据还得映射到自带的数据类型,单个页面不宜太复杂;不过bokeh也有优点,其多tab跟浏览器tab切换一样方便,适合不同监控的切换,dash这方面的multipages还是有些难看的。
  对Bokeh有兴趣的可以参考下面的案例,做K线展示的:
  https://zhuanlan.zhihu.com/p/47761108
  https://zhuanlan.zhihu.com/p/50995405
  https://zhuanlan.zhihu.com/p/53032803
  接下来,重点介绍Dash。

  主要的特征:

  •   Plotly强大的交互式可视化图表;
  •   dash-html-components完整封装了html元素和属性;
  • dash-core-components提供了丰富的空间、图表组件的高级支持,连markdown都有;
  • app结构简单清晰:一个用html.Div定义的layout,一堆回调函数;
  • 支持多页面、支持动态更新;
  • 状态和数据保留在浏览器的设计能最大程度保持多用户的独立,虽然对于某些开发场景来说有点难受,但也提供了几种共享数据的方式;
  • 丰富的Demo,包含各种应用场景,还在github上提供了源代码。(https://dash.plot.ly/gallery
  • dash本身就是用的Flask框架,app可以轻易整合到Flask应用中,方便以后的统一;
  • 发展迅速,plot.ly确实比较良心。

Dash中文简介可以看这里:https://www.jianshu.com/p/0aaafaa33bb1
最后看看官方gallery里几个金融应用:
  • 左上销售情况展示;
  • 右上是美国国债收益率历史期限结构的3-D曲面;
  • 左下交互式投资报告;
  • 右下经济衰退对各行业的就业影响。

其他行业诸如能源交通、生命科学的应用更加屌;不过这些咱都用不上,下面说下两个跟交易最相关的demo:
1,波动率曲面
就是封面图和文章前面那张图
2,网页交易
简单的行情展示和交易功能,虽然数据是本地的,不过技术点都介绍到了。
~~~~~~~~~
自己用的期权监控比这些例子要复杂点,目前也只是完成了计算部分的代码和页面大致布局。数据源和衍生数据的持久化还有点问题,剩下的就是页面优化了。
即使dash干了这么多活,要想弄个舒适的监控界面,还是得了解点html和CSS的知识,然后不断调整。
(这里吐槽下现在某些炒股软件和金融终端,UI太繁琐、视觉冲击太大、无效信息太多,引起极度不适。)
分享到 :
1 人收藏

1 个回复

倒序浏览
2#
伽蓝  4级常客 | 2019-12-4 13:29:55 发帖IP地址来自 澳大利亚
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:542
帖子:157
精华:3
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP