1. 程式人生 > 實用技巧 >視覺化編輯策略擴充套件自定義類庫

視覺化編輯策略擴充套件自定義類庫

如何給視覺化策略擴充套件自己需要的自定義類庫呢?例如我希望計算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指標計算的資料。

以上只是拋磚引玉,對於視覺化模組的設計可以使用模板功能自行擴充套件。