
Wie erweitern Sie die Visualisierungsstrategie mit der benötigten benutzerdefinierten Klassenbibliothek? Ich möchte beispielsweise den MA-Indikator berechnen, aber das System bietet nur Folgendes:
Wie kann ich diesen Indikatoren benutzerdefinierte Codes hinzufügen?
Nehmen wir als Beispiel das Hinzufügen eines benutzerdefinierten MA-Indikatorberechnungsmoduls, um zu erklären, wie das Visualisierungsmodul erweitert wird.
Lassen Sie uns zunächst über die Vorlage [Cryptocurrency Spot Trading Library] sprechen. Die Adresse lautet: https://www.fmz.com/strategy/10989 Obwohl diese Vorlage eine JavaScript-Sprachvorlage der FMZ-Plattform ist (Studenten, die das Konzept von Vorlagen nicht verstehen, können für Abfragen das FMZ-API-Dokument aufrufen: https://www.fmz.com/api#%E6%A8%A1 %E6%9D%BF% E7%B1%BB%E5%BA%93) Die Kommentare am Anfang der Vorlage enthalten jedoch Code, der das Visualisierungsmodul definiert, und auf den Code dieser JavaScript-Vorlage kann im definierten Code verwiesen werden. Dies macht es für uns sehr bequem, es selbst zu erweitern (gibt uns ein gutes Beispiel, das wir nachahmen können).
Bibliothek für den Spothandel mit digitalen Währungen, die visuelle Definition am Anfang:
/*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
}
*/
Sie entsprechen jeweils den Modulen auf der Seite zur visuellen Bearbeitung:

Mit vorgefertigten Beispielen ist es sehr einfach, diese selbst zu konstruieren. Folgen Sie einfach dem Beispiel.
Erstellen Sie zunächst eine neue Vorlage in der Sprache JavaScript.

Bearbeiten Sie den Vorlagencode.
/*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
}
*/
Nachdem Sie die neue Vorlage bearbeitet haben, speichern Sie sie.
Aktivieren Sie diese Vorlage in der Richtlinie, in der wir diese Vorlage verwenden müssen.

Sie können sehen, dass es zwei weitere Module gibt:

Schauen wir uns den Ausführungscode des Moduls mit dem Namen testA an:

function(){return 99;}()
Es handelt sich um eine sehr einfache JavaScript-Funktion, die bei Ausführung den Wert 99 zurückgibt.

Schauen wir uns den Ausführungscode des Moduls mit dem Namen „MA-Zyklus“ an:

(function(){var r = exchange.GetRecords(); return (!r || r.length < %1) ? false : TA.MA(r, %1); })()
Der Code ist ein anonymer Funktionsaufruf. Die anonyme Funktion führt zuerst den Vorgang zum Abrufen der K-Line-Daten aus.r. Dann, abhängig davon, ob das erhaltene r istnulloderrIst die Länge kleiner als der Eingabeparameter des Moduls?%1Um die Rendite zu beurteilenfalseOder zurückTA.MA(r, %1)Berechnete Indikatorergebnisse.
Dann können Sie es verwenden.
Visueller Strategie-Editor:

laufen:

Es ist ersichtlich, dass die vom MA-Indikator berechneten Daten wie gewünscht erzielt wurden.
Das Obige stellt nur einen Ausgangspunkt dar. Das Design des Visualisierungsmoduls kann mithilfe der Vorlagenfunktion erweitert werden.