Type/to search
8
Follow
1364
Followers
可视化编辑策略扩展自定义类库
Original
Created 2020-10-17 11:27:43  Updated 2024-12-06 22:23:25
 0
 2007

img

可视化编辑策略扩展自定义类库

如何给可视化策略扩展自己需要的自定义类库呢?例如我希望计算MA指标,但是系统自带的只有:
img
这些指标,如何能添加自定义的一些代码呢?
我们就以添加自定义的MA指标计算模块为例,讲解如何扩展可视化模块。

数字货币现货交易类库

首先讲一下【数字货币现货交易类库】这个模板,地址为:https://www.fmz.com/strategy/10989
虽然该模板为FMZ平台JavaScript语言的模板(不理解模板概念的同学,可以到FMZ API 文档查询:https://www.fmz.com/api#模板类库)
但是模板开头部分的注释中有定义可视化模块的代码,并且定义的代码中可以引用这个JavaScript模板的代码。这就非常方便我们自己扩展了(给了一个很好的例子,让我们模仿)。

数字货币现货交易类库,开头部分的可视化定义:

/*blockly { "type": "ext_Trade", "message0": "%1 币数 %2|%1 Coins %2", "args0": [{ "type": "field_dropdown", "options": [ ["买入|Buy", "Buy"], ["卖出|Sell", "Sell"] ] }, { "type": "input_value", "check": "Number" }], "template": "(function(){var r = $.%1(%2); return r ? r.amount : 0; })()", "order": "ORDER_ATOMIC", "output": "Number", "colour": 85 }, { "type": "ext_CancelPendingOrders", "message0": "取消 %1 订单|Cancel %1 Orders", "args0": [{ "type": "field_dropdown", "name": "TYPE", "options": [ ["所有|All", " "], ["买单|Buy", "ORDER_TYPE_BUY"], ["卖单|Sell", "ORDER_TYPE_SELL"] ] }], "previousStatement": null, "nextStatement": null, "template": "$.CancelPendingOrders(%1);", "colour": 85 }, { "type": "ext_Cross", "message0": "计算交叉 周期 %1 与 %2|Cross Period %1 and %2", "inputsInline": true, "args0": [{ "type": "input_value" }, { "type": "input_value" }], "template": "$.Cross(%1,%2)", "order": "ORDER_ATOMIC", "output": "Number" }, { "type": "ext_GetAccount", "message0": "获取资产信息|GetAccount", "template": "$.GetAccount()", "order": "ORDER_ATOMIC", "output": null } */

分别对应可视化编辑页面中的模块:
img

构造一个自己定义的计算MA指标的模块

有了现成的例子,那么自己动手构造就很简单了,比葫芦画瓢即可。

首先,新建一个JavaScript语言的模板。
img

编辑模板代码。

/*blockly { "type": "ext_testA", "message0": "testA|testA", "template": "function(){return 99;}()", "order": "ORDER_ATOMIC", "output": "Number" },{ "type": "ext_MA", "message0": "MA 周期 %1| MA Period %1", "args0": [{ "type": "input_value", "check": "Number" }], "template": "(function(){var r = exchange.GetRecords(); return (!r || r.length < %1) ? false : TA.MA(r, %1); })()", "order": "ORDER_ATOMIC", "output": null, "colour": 85 } */
  • type : 属性定义模块类型,可以自己起名字定义。
  • message0 : 模块上显示的文本。
  • template :模块执行的代码。
  • output :模块输出的类型。
  • args0 :模块的输入参数,在模块定义代码中%1代表第一个输入参数,%2代表第二个。

新建的这个模板编辑好之后,保存。
在到我们需要使用这个模板的策略中,勾选上这个模板。
img

可以看到多出了两个模块:

  • img

    名为:testA 的模块,我们看下他的执行代码:
    img

    function(){return 99;}()

    就是很简单的一个JavaScript函数,执行返回一个数值99。

  • img

    名为:MA周期的模块,我们看下他的执行代码:

    img

    (function(){var r = exchange.GetRecords(); return (!r || r.length < %1) ? false : TA.MA(r, %1); })()

    代码是一个匿名函数调用,匿名函数中首先执行了获取K线数据操作,K线数据r。然后根据获取的r是不是为null或者r的长度是不是小于模块的输入参数%1去判断返回false还是返回TA.MA(r, %1)计算的指标结果。

接下来就可以使用了。

测试计算MA指标

可视化策略编辑:
img

运行:
img

可以看到以上如愿以偿的拿到了MA指标计算的数据。

以上只是抛砖引玉,对于可视化模块的设计可以使用模板功能自行扩展。

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)