視覺化編輯策略擴充套件自定義類庫
如何給視覺化策略擴充套件自己需要的自定義類庫呢?例如我希望計算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 } */
分別對應視覺化編輯頁面中的模組:
構造一個自己定義的計算MA指標的模組
有了現成的例子,那麼自己動手構造就很簡單了,比葫蘆畫瓢即可。
首先,新建一個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 } */
- type : 屬性定義模組型別,可以自己起名字定義。
- message0 : 模組上顯示的文字。
- template :模組執行的程式碼。
- output :模組輸出的型別。
- args0 :模組的輸入引數,在模組定義程式碼中%1代表第一個輸入引數,%2代表第二個。
新建的這個模板編輯好之後,儲存。
在到我們需要使用這個模板的策略中,勾選上這個模板。
可以看到多出了兩個模組:
-
名為: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指標
視覺化策略編輯:
執行:
可以看到以上如願以償的拿到了MA指標計算的資料。
以上只是拋磚引玉,對於視覺化模組的設計可以使用模板功能自行擴充套件。