可视化模块搭建交易策略--初识篇
可视化编程一直是软件工具开发者们的一个向往的目标,即使在量化交易领域也是一样。
因为可视化这种“所见即所得”的方式大大降低了编程开发的技术门槛。
用户再也不用面对一堆枯燥的编码,只用开动脑筋,发挥自己的想象力和逻辑思维,着力于业务本身。
就可以实现一个自己想要的程序,是不是很神奇!
那我们一起来进入量化交易策略的可视化编程领域吧!
初始发明者量化的可视化编程
在登录 https://www.fmz.com 之后,注册账户(如果已经注册直接登录),依次点击:控制中心->策略库->新建策略。
我们可以看到一个初始的可视化策略。
作用仅仅是输出默认配置的交易所(回测或者机器人上,添加的第一个交易所对象)的账户资产信息。
(如下图)
在开始学习如何使用可视化之前,我们可以先理解下可视化的一些设计理念。
1、拼接
细心观察可以发现,模块都是有榫(凹)和 卯(凸)的,即模块都可以「连接」和「被连接」。
如果两个模块代表的功能代码可以连接,那么在你将两个模块的榫和卯靠近的时候就会吸附在一起。
2、模块设置和调整
一些模块有一些特殊可设置的地方,例如:
就可以拖动左侧的「项目」模块 到「加入」模块,这样就可以增加一个榫(凹)位置,从而增加一个拼接文本的位置。
这样就可以通过,点击小齿轮,对模块进行一些调整和设置。
3、模块的默认输入参数
一些模块需要输入一些参数,可能是数值、或者 字符串等。
如果不添加变量作为模块的输入参数,模块即按照默认的输入参数执行。
类似这样的求平方根的计算模块,输出一下这个模块的计算结果。
可以看到,如果输入参数这个位置缺省,就按照默认的数值9作为输入参数,计算9的平方根。
当然,如果希望用一个变量模块作为输入参数,可以直接把变量模块拼接入榫(凹)位置。
4、操作
模块可以用鼠标左键点住,拖动。
模块可以用ctrl + c 键复制,ctrl + v 键粘贴,就如同复制粘贴代码或者文本一样方便。
操作区可以用鼠标滑轮缩放大小,所有模块会缩放变大或者变小。
在操作区点住空白位置拖动,可以移动操作区域。
右侧垃圾桶,记录最近删除的模块。
最重要的,拼接好了模块策略,不要忘记点「保存」。
可视化工具 模块介绍
可以看到可视化编辑区左侧有很多模块分类,每种分类项目中有很多可以用的可视化模块。
一共分为 11 个类别。
工具模块:
1、输出信息:
该模块通常是和文本类的模块一起组合使用,如下图:
可以在文本类模块中输入字符串,这样运行「输出信息」这个模块时,就会打印文本模块中的字符串内容。
回测:
如同 JavaScript 语言代码:
functionmain(){Log("你好,可视化编程!")}
2、微信推送:
该模块和「输出信息」外观一样,区别为输出信息的同时推送信息到当前账号绑定的微信上。
如同 JavaScript 语言代码:
functionmain() {Log("微信推送!@")}
3、抛出异常
抛出异常模块让程序发出一个错误,然后程序停止执行(在不写异常处理代码的情况下)。
类似在JavaScript策略中 main 函数中直接执行了 throw "要输出的字符串" 函数。
functionmain() {throw"第一句就抛出异常,让程序停止!"}
回测结果:
一般在调试的时候用的比较多,例如希望程序在某个条件下停止,打印当时的一些数据便于观察。
或者是在可能发生问题的代码流程放置抛出异常模块,让程序报错,发现一些错误。
4、休眠
休眠模块
如同JavaScript 策略中:
functionmain() {Sleep(1000*5)}
测试休眠模块:
回测结果:
5、打印收益
该模块如同 发明者量化交易平台 API 函数 LogProfit 的作用,打印收益日志,并且自动根据输入的参数绘制收益曲线。
例如:
回测执行如图:
对应的JavaScript策略代码如下:
functionmain() {LogProfit(1)Sleep(1000*5)LogProfit(2)Sleep(1000*5)LogProfit(3)Sleep(1000*5)LogProfit(2)Sleep(1000*5)LogProfit(5)}
可以拼接在任何想要输出收益信息的位置。
6、循环
循环模块可以包裹住一系列拼接起来的模块组合,让这个模块组合循环执行。
测试:
回测结果:
可以看到让循环模块包裹住 打印收益 和 休眠组成的 模块组合后,会不停执行模块组合。
7、循环执行每隔N秒
该模块和循环模块用法基本一致,唯一区别就是该模块自带了休眠。
8、精度处理
变量模块或者数值需要控制精度时可以用这个模块处理,输入参数部分的数值,会按照设置,输出为指定小数位的数值。
例如,对数值 3.1415926535897 进行精度处理。
回测显示:
9、清空日志
用于清空日志,根据输入参数,可以保留一部分日志。
如同 API文档中:
LogReset()
10、清空收益日志
用于清空收益日志,根据输入参数,可以保留一部分日志。
如同 API文档中:
LogProfitReset()
接下来的是一些经常使用的工具模块
11、获取行情某个属性的功能模块
此工具模块需要和「交易模块类型」中的行情模块搭配使用,如图:
使用输出信息模块输出 最新 ticker 行情的最新成交价:
回测显示:
如同JavaScript 策略代码:
functionmain() {Log(exchange.GetTicker().Last)}
12、获取K线数据某个Bar上属性的模块
该模块也是需要和「交易模块类型」中的获取K线数据模块一起使用。
先创建一个变量模块,取名: K线。
然后获取K线数据,使用K线数据模块获取,赋值给变量模块:「K线」。
接着使用「列表模块类型」中的列表长度模块,获取K线变量模块的长度,用于指定获取K线哪个Bar上的数据。
拼接在一起,如图:
回测运行,即打印出了,最后一根K线Bar 的时间戳。
13、获取订单薄中某个订单数据的模块
同样是要和「交易模块类型」中的获取深度数据模块一起使用。
索引设置0 ,设置卖单,获取的就是 卖一 这个订单的信息。
如同 JavaScript 策略代码:
functionmain() {Log(exchange.GetDepth().Asks[0])}
14、获取资产信息中某个属性的模块
该模块 需要和 获取资产信息模块一起使用。
例如:打印当前账户可用币数
回测显示:
如同JavaScript 策略:
functionmain() {Log(exchange.GetAccount().Stocks)}
15、获取订单数据中某个属性的模块
该模块用于获取订单数据中某个属性的值,例如 订单薄 中卖一的 价格或者数量(序号13的 范例)。
回测结果:
如同JavaScript 策略:
functionmain() {Log(exchange.GetDepth().Asks[0].Price)}
还可以用来获取「查询订单详细信息模块」返回的订单信息中的某个属性(将在进阶篇中讲解)。
16、获取持仓信息中某个仓位某个仓位属性的模块
同样,要和「获取期货持仓模块」一起使用,要注意的是,获取期货持仓模块返回的持仓数据是一个数组(列表),是包含不同合约、不同方向的仓位的数据结构。所以具体使用时要指明索引。
学习了这么多,接下来,我们一起来组合一个对冲操作,即同时在近期和远期合约做对冲。
我们做一个正向套利对冲,即远期合约开空,1张合约,近期开多1张合约。
回测结果:
可视化范例策略:
https://www.fmz.com/strategy/121404
https://www.fmz.com/strategy/129895
https://www.fmz.com/strategy/123904
https://www.fmz.com/strategy/122318
更多策略尽在:https://www.fmz.com/square
枯燥的编程,用搭积木的方式就可以轻松完成,动手试试吧,非常有趣!
网友评论