
Auf der Inventor Quantitative Trading PlattformStrategieplatzEs gibt viele interessante Strategien im Internet. Damals nutzten die meisten digitalen WährungsbörsenrestDie API-Schnittstelle des Protokolls, viele Strategien basieren aufrestSchnittstelle, manchmal sind die Marktaktualisierungen langsam. Darüber hinaus sind in letzter Zeit einige Börsen aufgetauchtrestEin Schnittstellenfehler führt dazu, dass die Richtlinie unbrauchbar wird. Wenn die Richtlinie geändert wird, fügen Sie hinzuwebsocketDie Schnittstellenunterstützung erfordert bestimmte Änderungen am Strategiecode, was normalerweise problematisch ist (eine Änderung der Strategie ist viel schwieriger als ihr Neuschreiben).
Wie kann ich die gleiche Strategie verwenden, ohne sie zu ändern?websocketWas ist mit der Marktschnittstelle?
Dies zeigt deutlich die enorme Flexibilität der Inventor Quantitative Trading Platform. Wir können:
exchange.GetTicker Funktions-Hook-Operation zum Abrufen von Marktinformationen.Dies ermöglicht die Steuerung der Strategie durchwebsocketDie über die Marktschnittstelle gesteuerten Daten werden ausgeführt.
Verwendete ProgrammierspracheJavaScriptSprache.
Zum Beispiel wollen wir eine klassische alte Strategie “Icebreaker” modifizieren
Schauen wir uns zunächst den Strategiecode an und stellen fest, dass die Strategie von den Tick-Marktbedingungen bestimmt wird und hauptsächlichtickerIn den DatenBuy、Sell、LastDiese Eigenschaften,tickerDie Daten werden über die API-Funktion der FMZ-Plattform bezogen:exchange.GetTicker Erhalten. Damit ist das Ziel klar.exchange.GetTickerFunktionHookDer Vorgang (d. h. das Überschreiben durch eine andere Version und anschließende Ersetzen) ist alles, was erforderlich ist.
Wir können die Icebreaker-Strategie jedoch nicht umschreiben, da dies Auswirkungen auf die Strategie hätte. Was wir wollen, ist eine nahtlose Verbindung! !
Der nächste Protagonist muss also her.
initFunktionskoordinationWir erstellen eine „Vorlagenbibliothek“ und nennen sie:SeamlessConnWS, löschen Sie den Anfangscode.

Dann geben SieSeamlessConnWSDie Vorlage legt 2 Parameter fest

Wird verwendet, um zu steuern, ob die Funktion aktiviert oder deaktiviert wird.websocketSchnittstellenfunktion, Steuerung und Festlegung der Öffnung spezifischer Marktschnittstellen. In diesem Beispiel können aus Platzgründen nurexchange.GetTickerDie Schnittstelle führt Hook-Operationen aus. Die Parameter werden also nur aktiviert,GetTickerDie Schnittstelle ist der Steuerparameter des Websocket-Modus: Hook_GetTicker.
Sobald die Vorlage erstellt ist, können Sie die spezifische Börse, auf die zugegriffen werden soll, in die Vorlage schreiben.websocketSchnittstelle, abonnieren Sie bestimmte Kurse und warten Sie dann, bis die Börse Daten überträgt. Der spezifische Code wird hier nicht wiederholt. Sie können auf den SeamlessConnWS-Code (öffentlich verfügbar) und die API-Dokumentation verweisen. Was Sie sich ansehen müssen, ist die VorlageinitFunktionen und globale Variablen_DictConnectCreater、_ConnMap:
Code:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("切换为ws接口只针对 exchange 交易所对象(即第一个添加的交易所对象)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "没有找到实现"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
Sie können sehen, dass diese Vorlage nur 2 Austausche implementiert.websocketDie Marktschnittstellen sind Binance Spot und Huobi Spot.initDie Funktion besteht darin, die „Icebreaker“-Strategie zu referenzierenSeamlessConnWSNachdem die Vorlage erstellt wurde, wird beim Ausführen der realen Festplatte als erstes Folgendes ausgeführt:initFunktion, die automatischexchange.GetTickerErsetzen Sie den Funktionsinhalt durchwebsocketImplementierung des Schnittstellencodes zur Erzielung einer nahtlosen VerbindungwebsocketZitate.
SeamlessConnWS-Vorlagenadresse
Es ist ganz einfach! BündelnSeamlessConnWSNachdem Sie die Vorlage in Ihre eigene Strategiebibliothek kopiert haben, müssen Sie sie nur noch in der „Icebreaker“-Strategie referenzieren, wie in der Abbildung gezeigt:

Prüfen, speichern, fertig.
Erstellen Sie einen Echtzeitroboter für die „Icebreaker“-Strategie und wählen Sie Binance als Börse
.
OffenSeamlessConnWSKontrollieren Sie die Parameter auf der Vorlage.

Führen Sie es aus:

Um die Anzeige der gepushten Daten zu vereinfachen, habe ich in Zeile 157 einen Druckprotokollcode hinzugefügt, der die von der Börse gepushten Daten ausgibt.

Das Roboterprotokoll zeigt:

Auf diese Weise muss keine einzige Zeile Strategiecode geändert werden und es wird eine nahtlose Integration der WebSocket-Marktschnittstelle und der Strategie erreicht.
Dieses Beispiel dient nur zurexchange.GetTickerDie Strategie der Marktschnittstellenfunktion wird erläutert. Andere Marktschnittstellen wieexchange.GetDepth、exchange.GetTrades 、exchange.GetRecordsEs ist die gleiche Routine! Für die BeispielvorlageSeamlessConnWS, welches noch weiter ausgebaut werden kann.
Für bestimmte Links in VorlagenwebsocketDie Implementierung verwendetDialFunktion (siehe API-Dokumentation Wählfunktion), welche je nach Bedarf angepasst werden kann. Sie können beispielsweiseread()Funktion angegebene Parameter-2, das heißt nur zurückgebenwebsocketDie Verbindung empfängt die neuesten Daten in ihrem Puffer.
Vielen Dank fürs Lesen