Loading ...

可视化模块搭建交易策略--初识篇

Author: 小小梦, Created: 2019-07-08 09:23:59, Updated: 2019-07-10 16:23:18

可视化模块搭建交易策略–初识篇

可视化编程一直是软件工具开发者们的一个向往的目标,即使在量化交易领域也是一样。 因为可视化这种“所见即所得”的方式大大降低了编程开发的技术门槛。 用户再也不用面对一堆枯燥的编码,只用开动脑筋,发挥自己的想象力和逻辑思维,着力于业务本身。 就可以实现一个自己想要的程序,是不是很神奇!

那我们一起来进入量化交易策略的可视化编程领域吧!

  • 初始发明者量化的可视化编程

    在登录 https://www.fmz.com 之后,注册账户(如果已经注册直接登录),依次点击:控制中心->策略库->新建策略。

    img

    我们可以看到一个初始的可视化策略。 作用仅仅是输出默认配置的交易所(回测或者机器人上,添加的第一个交易所对象)的账户资产信息。 (如下图)

    img

    在开始学习如何使用可视化之前,我们可以先理解下可视化的一些设计理念。

    • 1、拼接

      细心观察可以发现,模块都是有榫(凹)和 卯(凸)的,即模块都可以「连接」和「被连接」。 如果两个模块代表的功能代码可以连接,那么在你将两个模块的榫和卯靠近的时候就会吸附在一起。

      img

    • 2、模块设置和调整

      一些模块有一些特殊可设置的地方,例如:

      img

      就可以拖动左侧的「项目」模块 到「加入」模块,这样就可以增加一个榫(凹)位置,从而增加一个拼接文本的位置。 这样就可以通过,点击小齿轮,对模块进行一些调整和设置。

    • 3、模块的默认输入参数

      一些模块需要输入一些参数,可能是数值、或者 字符串等。 如果不添加变量作为模块的输入参数,模块即按照默认的输入参数执行。

      img 类似这样的求平方根的计算模块,输出一下这个模块的计算结果。 img 可以看到,如果输入参数这个位置缺省,就按照默认的数值9作为输入参数,计算9的平方根。 img

      当然,如果希望用一个变量模块作为输入参数,可以直接把变量模块拼接入榫(凹)位置。 img

    • 4、操作

      模块可以用鼠标左键点住,拖动。 模块可以用ctrl + c 键复制,ctrl + v 键粘贴,就如同复制粘贴代码或者文本一样方便。 操作区可以用鼠标滑轮缩放大小,所有模块会缩放变大或者变小。 在操作区点住空白位置拖动,可以移动操作区域。 右侧垃圾桶,记录最近删除的模块。 最重要的,拼接好了模块策略,不要忘记点「保存」。

  • 可视化工具 模块介绍

    可以看到可视化编辑区左侧有很多模块分类,每种分类项目中有很多可以用的可视化模块。

    img 一共分为 11 个类别。

    • 工具模块:

      img


      • 1、输出信息:

        该模块通常是和文本类的模块一起组合使用,如下图: img 可以在文本类模块中输入字符串,这样运行「输出信息」这个模块时,就会打印文本模块中的字符串内容。 img 回测: img

        如同 JavaScript 语言代码:

        function main(){
            Log("你好,可视化编程!")
        }
        

      • 2、微信推送:

        该模块和「输出信息」外观一样,区别为输出信息的同时推送信息到当前账号绑定的微信上。 img img

        如同 JavaScript 语言代码:

        function main () {
            Log("微信推送!@")
        }
        

      • 3、抛出异常

        抛出异常模块让程序发出一个错误,然后程序停止执行(在不写异常处理代码的情况下)。 img

        类似在JavaScript策略中 main 函数中直接执行了 throw “要输出的字符串” 函数。

        function main () {
            throw "第一句就抛出异常,让程序停止!"
        }
        

        回测结果: img 一般在调试的时候用的比较多,例如希望程序在某个条件下停止,打印当时的一些数据便于观察。 或者是在可能发生问题的代码流程放置抛出异常模块,让程序报错,发现一些错误。


      • 4、休眠

        休眠模块 img 如同JavaScript 策略中:

        function main () {
            Sleep(1000 * 5)
        }
        

        测试休眠模块: img 回测结果: img


      • 5、打印收益

        img

        该模块如同 发明者量化交易平台 API 函数 LogProfit 的作用,打印收益日志,并且自动根据输入的参数绘制收益曲线。

        例如: img 回测执行如图: img 对应的JavaScript策略代码如下:

        function main () {
            LogProfit(1)
            Sleep(1000 * 5)
            LogProfit(2)
            Sleep(1000 * 5)
            LogProfit(3)
            Sleep(1000 * 5)
            LogProfit(2)
            Sleep(1000 * 5)
            LogProfit(5)
        }
        

        可以拼接在任何想要输出收益信息的位置。


      • 6、循环

        img 循环模块可以包裹住一系列拼接起来的模块组合,让这个模块组合循环执行。

        测试: img 回测结果: img 可以看到让循环模块包裹住 打印收益 和 休眠组成的 模块组合后,会不停执行模块组合。


      • 7、循环执行每隔N秒

        img 该模块和循环模块用法基本一致,唯一区别就是该模块自带了休眠。 img


      • 8、精度处理

        img 变量模块或者数值需要控制精度时可以用这个模块处理,输入参数部分的数值,会按照设置,输出为指定小数位的数值。

        例如,对数值 3.1415926535897 进行精度处理。 img

        回测显示: img


      • 9、清空日志

        img

        用于清空日志,根据输入参数,可以保留一部分日志。 如同 API文档中:

        LogReset()
        

      • 10、清空收益日志

        img

        用于清空收益日志,根据输入参数,可以保留一部分日志。 如同 API文档中:

        LogProfitReset()
        

      接下来的是一些经常使用的工具模块

      • 11、获取行情某个属性的功能模块

        img

        此工具模块需要和「交易模块类型」中的行情模块搭配使用,如图: img

        使用输出信息模块输出 最新 ticker 行情的最新成交价: img

        回测显示: img

        如同JavaScript 策略代码:

        function main () {
            Log(exchange.GetTicker().Last)
        }
        
      • 12、获取K线数据某个Bar上属性的模块

        img

        该模块也是需要和「交易模块类型」中的获取K线数据模块一起使用。

        先创建一个变量模块,取名: K线。 img 然后获取K线数据,使用K线数据模块获取,赋值给变量模块:「K线」。 img 接着使用「列表模块类型」中的列表长度模块,获取K线变量模块的长度,用于指定获取K线哪个Bar上的数据。 img 拼接在一起,如图: img 回测运行,即打印出了,最后一根K线Bar 的时间戳。 img

      • 13、获取订单薄中某个订单数据的模块

        img

        同样是要和「交易模块类型」中的获取深度数据模块一起使用。

        img

        索引设置0 ,设置卖单,获取的就是 卖一 这个订单的信息。

        img

        如同 JavaScript 策略代码:

        function main () {
            Log(exchange.GetDepth().Asks[0])
        }
        
      • 14、获取资产信息中某个属性的模块

        img 该模块 需要和 获取资产信息模块一起使用。 img

        例如:打印当前账户可用币数 img

        回测显示: img

        如同JavaScript 策略:

        function main () {
            Log(exchange.GetAccount().Stocks)
        }
        
      • 15、获取订单数据中某个属性的模块

        img

        该模块用于获取订单数据中某个属性的值,例如 订单薄 中卖一的 价格或者数量(序号13的 范例)。 img

        回测结果: img 如同JavaScript 策略:

        function main () {
            Log(exchange.GetDepth().Asks[0].Price)
        }
        

        还可以用来获取「查询订单详细信息模块」返回的订单信息中的某个属性(将在进阶篇中讲解)。

      • 16、获取持仓信息中某个仓位某个仓位属性的模块

        img

        同样,要和「获取期货持仓模块」一起使用,要注意的是,获取期货持仓模块返回的持仓数据是一个数组(列表),是包含不同合约、不同方向的仓位的数据结构。所以具体使用时要指明索引。

        学习了这么多,接下来,我们一起来组合一个对冲操作,即同时在近期和远期合约做对冲。 我们做一个正向套利对冲,即远期合约开空,1张合约,近期开多1张合约。

        img

        回测结果: img

可视化范例策略:

更多策略尽在:https://www.fmz.com/square

枯燥的编程,用搭积木的方式就可以轻松完成,动手试试吧,非常有趣!


More