可視化編輯策略擴展自定義類庫

如何給可視化策略擴展自己需要的自定義類庫呢?例如我希望計算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指標計算的數據。

以上只是拋磚引玉,對於可視化模塊的設計可以使用模板功能自行擴展。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章