如何给可视化策略扩展自己需要的自定义类库呢?例如我希望计算MA指标,但是系统自带的只有: 这些指标,如何能添加自定义的一些代码呢? 我们就以添加自定义的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
}
*/
分别对应可视化编辑页面中的模块:
有了现成的例子,那么自己动手构造就很简单了,比葫芦画瓢即可。
首先,新建一个JavaScript语言的模板。
编辑模板代码。
/*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
}
*/
新建的这个模板编辑好之后,保存。 在到我们需要使用这个模板的策略中,勾选上这个模板。
可以看到多出了两个模块:
名为:testA 的模块,我们看下他的执行代码:
function(){return 99;}()
就是很简单的一个JavaScript函数,执行返回一个数值99。
名为:MA周期的模块,我们看下他的执行代码:
(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指标计算的数据。
以上只是抛砖引玉,对于可视化模块的设计可以使用模板功能自行扩展。