avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

Erstellt in: 2021-04-19 14:16:21, aktualisiert am: 2024-12-04 21:21:43
comments   0
hits   4009

Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

Im vorherigen Artikel haben wir über programmatische Handelsskripte gesprochen. Tatsächlich ist eine Handelsstrategie ein Handelsskriptprogramm. Der Artikel befasst sich hauptsächlich mit der Notwendigkeit eines Hardwareträgers für das Handelsskriptprogramm (auf dem das Programm ausgeführt wird), mit welcher Computerprogrammiersprache dieses Skripthandelsprogramm geschrieben werden kann (Auflistung die Verwendung der Inventor Quantitative Trading Platform Es gibt drei Programmiersprachen. Natürlich können Sie jede beliebige Programmiersprache verwenden, um Strategien für den programmatischen Handel umzusetzen). In diesem Artikel diskutieren wir weiter über die quantitative Analyse des Kryptowährungskreises und verstehen die Erkenntnisse der quantitativen Analyse des Kryptowährungskreises.

Programmatische Handelsskripte

  • Arten von Handelsstrategien Neulinge, die neu im programmatischen Handel und im quantitativen Handel sind, können durch verschiedene Begriffe wie Trendstrategien, Arbitragestrategien, Hochfrequenzstrategien, Rasterstrategien usw. verwirrt sein. Tatsächlich können die gängigen Strategietypen des programmatischen Handels und des quantitativen Handels einfach wie folgt beschrieben: Mehrere Richtungen.

    • Arbitrage-Hedging-Strategie Vereinfacht ausgedrückt kann die Strategie, auf der einen Seite eine Long-Position und auf der anderen Seite eine Short-Position zu halten, grundsätzlich als Arbitragestrategie klassifiziert werden. Es gibt viele spezifische Typen, darunter Cross-Spot-Markt, Cross-Futures-Periode, Spot-Futures-Arbitrage, Cross-Product-Arbitrage usw.
    • Trendstrategie Einfach ausgedrückt handelt es sich dabei um eine Strategie, bei der Trends gefolgt wird, um Aufträge zu erteilen und Positionen zu halten, wie etwa doppelte gleitende Durchschnitte, MACD und andere Strategien.
    • Regressionsstrategie Beispielsweise können mit der Netzstrategie Gewinne aus Preisschwankungen in volatilen Märkten erzielt werden.
    • Hochfrequenzstrategien Einfach ausgedrückt handelt es sich dabei um eine Hochfrequenzhandelsstrategie, bei der mithilfe einiger Algorithmen Marktmikrostrukturen, Regeln, Chancen usw. entdeckt werden.

Das Obige ist aus der Perspektive der Handelsstrategien unterteilt. Aus der Perspektive des Strategiedesigns auf der Inventor Quantitative Trading Platform können Strategien auch unterteilt werden in:

  • Einzelproduktstrategie Das heißt, diese Strategie betreibt nur ein Produkt, wie etwa den BTC-Handel oder den ETH-Handel.

  • Mehrproduktstrategie Vereinfacht ausgedrückt geht es darum, mehrere Varianten nach einer Strategielogik zu betreiben.

  • Multi-Account-Strategie Einfach ausgedrückt geht es darum, mehrere Exchange-Objekte auf einer realen Festplatte zu konfigurieren (das Konzept des Austauschs wurde im vorherigen Artikel vorgestellt, und das Exchange-Objekt mit konfiguriertem API-Schlüssel stellt ein Exchange-Konto dar). Beispielsweise umfassen einige Copy-Trading-Strategien mehrere Konten, die der Transaktion folgen (es kann sich um dieselbe Börse oder um verschiedene Börsen handeln). Kurz gesagt werden mehrere Börsenobjekte (Konten) auf einem realen Konto verwaltet.

  • Mehrere Logikstrategien Beispielsweise werden in einem realen Markt MACD-Strategie, gleitende Durchschnittsstrategie, Rasterstrategie usw. gleichzeitig entwickelt (natürlich arbeiten sie an unterschiedlichen Börsenobjekten. Wenn Sie dasselbe Börsenobjekt betreiben, müssen Sie sehen, ob die spezifischen Strategien weisen logische Konflikte auf)

  • Exchange-API-Schnittstelle Wie betreiben programmierte Handelsskripte Börsenkonten? Die Antwort erfolgt über die von der Börse geöffnete API-Schnittstelle. Welche Arten von Schnittstellen stehen also für den Austausch offen? Im vorherigen Artikel haben wir über den Abschnitt „Austausch“ gesprochen, in dem es hieß, dass Austausche im Allgemeinen über REST- und Websocket-Schnittstellen verfügen. Hier fügen wir einige Konzepte aus der strategischen Programmebene hinzu. Austauschschnittstellen werden in zwei Typen unterteilt: verifiziert und nicht verifiziert, je nachdem, ob sie verifiziert sind oder nicht (sowohl REST als auch Websocket).

    • Schnittstellen, die keine Authentifizierung erfordern Dieser Schnittstellentyp wird allgemein als „öffentliche Schnittstelle“ bezeichnet und erfordert keine ÜberprüfungAPI KEY(Wenn Sie vergessen, was der API-Schlüssel ist, können Sie im vorherigen Artikel nachlesen). Bei dieser Art von Schnittstelle handelt es sich im Allgemeinen um eine Marktschnittstelle, die beispielsweise das Abfragen umfassender Marktinformationen, das Abfragen von K-Line-Daten, das Abfragen von Finanzierungssätzen, das Abfragen von Informationen zu Transaktionsprodukten, das Abfragen von Zeitstempeln von Börsenservern usw. ermöglicht. Einfach ausgedrückt kann eine Schnittstelle, die nichts mit Ihrem Konto zu tun hat, grob als öffentliche Schnittstelle bestimmt werden (keine Überprüfung erforderlich).
      Wenn auf der Inventor Quantitative Trading Platform eine nicht verifizierte API-Funktion aufgerufen wird (die die nicht verifizierte Schnittstelle der Börse, die öffentliche Schnittstelle, kapselt), können die von der Schnittstelle zurückgegebenen Daten normal abgerufen werden, auch wenn der API-Schlüssel falsch konfiguriert ist. (Weil es nicht verifiziert ist)

    • Zu verifizierende Schnittstellen Einfach ausgedrückt handelt es sich um eine Schnittstelle, die überprüft werden muss (überprüft durch API-Schlüssel). Diese Art von Schnittstelle wird als private Schnittstelle bezeichnet. Diese Art von Schnittstelle bezieht sich normalerweise auf einige Vorgänge oder Informationen Ihres Kontos, wie z. B. die Abfrage von Kontovermögen, die Abfrage von Kontopositionen, die Abfrage ausstehender Aufträge, die Abfrage von Überweisungen, die Überweisung von Münzen, die Anpassung der Hebelwirkung, das Einstellen von Positionsmodi usw. Diese Vorgänge müssen überprüft werden. Wenn auf der Inventor Quantitative Trading Platform eine API-Funktion aufgerufen wird, die eine Verifizierung erfordert (die Schnittstelle, die der gekapselte Austausch verifizieren muss, die private Schnittstelle), und der API-Schlüssel falsch konfiguriert ist, wird beim Aufruf der Schnittstelle ein Fehler gemeldet und ein Es wird ein Nullwert zurückgegeben.

Wie werden diese Schnittstellen auf der Inventor Quantitative Trading Platform verwendet?

Die Inventor Quantitative Trading Platform kapselt das Börsenverhalten und definiert konsistente Schnittstellen (wie K-Line-Schnittstelle, Deep Market-Schnittstelle, Abfrageschnittstelle für aktuelle Vermögenswerte, Auftragsschnittstelle, Schnittstelle für Auftragsrücknahme usw.). Diese Schnittstellen werden als API-Funktionen der Die Inventor Quantitative Trading Platform kann durch Abfragen der API-Dokumentation (https://www.fmz.com/api) angezeigt werden.

Wie also können einige Austauschschnittstellen mit inkonsistentem Verhalten und inkonsistenten Definitionen auf der Inventor Quantitative Trading Platform verwendet werden?

Zu diesen Austauschschnittstellen gehören: Vermögensübertragung, bedingte Betrauung, Sammelauftragserteilung, Sammelauftragsstornierung, Auftragsänderung usw. Einige Börsen verfügen über diese Schnittstellen, andere nicht. Ihre Funktionen und Nutzungsdetails können sehr unterschiedlich sein. Daher sind diese Schnittstellen auf der Inventor Quantitative Trading Platform verfügbar.exchange.IODiese Funktion wird für den Zugriff verwendet (Einzelheiten finden Sie im API-Dokument der Inventor Quantitative Trading Platform: https://www.fmz.com/api#exchange.io…). Es gibt auch einige praktische IO-Beispielstrategien auf der Inventor Quantitative Trading Platform Strategy Square.

Generieren alle API-Funktionen in der API-Dokumentation der Inventor Quantitative Trading Platform Netzwerkanforderungen?

Nehmen wir zunächst an, dass die API-Schnittstelle der Börse eine Häufigkeitsbegrenzung für den Zugriff hat (z. B. 5 Mal pro Sekunde). Der Zugriff darf nicht zu häufig erfolgen, da sonst ein HTTP-429-Fehler gemeldet und der Zugriff verweigert wird (die meisten Börsen melden einen 429-Fehler). ). Dieselbe Einschränkung gilt auch für den Aufruf der gepackten Austauschschnittstelle auf der Inventor Quantitative Trading Platform. Für API-Funktionen auf der Inventor Quantitative Trading Platform, die keine Netzwerkanforderungen generieren, gibt es keine solche Einschränkung. Nicht alle API-Funktionen der Inventor Quantitative Trading Platform generieren Netzwerkanfragen. Einige der API-Funktionen von Inventor ändern nur einige lokale Einstellungen, wie z. B. das Festlegen des aktuellen Handelspaars, das Festlegen des Vertragscodes, die Funktion zur Berechnung von Indikatoren, das Abrufen des Börsenobjektnamens, usw. Grundsätzlich können Sie anhand des Zwecks der Funktion beurteilen, ob eine Netzwerkanforderung auftritt. Solange es sich um das Abrufen von Austauschdaten, das Bearbeiten von Austauschkonten usw. handelt, wird eine Netzwerkanforderung generiert. Sie müssen auf den Aufruf achten Häufigkeit dieser Schnittstellen.

  • Lassen Sie uns über einige häufige Probleme und Erfahrungen bei der Verwendung von API-Funktionen in der Inventor Quantitative Trading Platform sprechen.

    • Fehlertoleranz Dies ist der häufigste Fehler, der unzählige Neulinge plagt. Oft ist der Strategie-Backtest normal, aber warum stürzt der reale Markt nach einer Weile ab (was jederzeit ausgelöst werden kann)?

    Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

    Beim Schreiben von Strategien müssen wir die von der Schnittstelle zurückgegebenen Daten beurteilen und überprüfen. Diese Codezeile wird beispielsweise verwendet, um Marktinformationen über die Inventor Quantitative Trading Platform abzurufen (dasselbe gilt beim Schreiben eines Programms zum direkten Zugriff auf die Börse Schnittstelle):var ticker = exchange.GetTicker()Wenn wir dies nutzen müssentickerVariable (siehe die von der Funktion GetTicker zurückgegebene Struktur)Last(aktueller Preis) Daten müssen wir verwendenvar newPrice = ticker.LastHolen Sie sich die Daten wie folgt (was ist newPrice? neu: aktuell, Price: Preis, ja! Fügen Sie sie zusammen!) Zu diesem Zeitpunkt, wennGetTicker()Es ist in Ordnung, wenn die Funktion normale Daten zurückgibt, aber wenn die Anforderung abläuft, Netzwerkfehler auftreten, die Vermittlungsstelle das Netzwerkkabel abzieht, das Kabel durchtrennt wird, ein unartiges Kind den Netzschalter betätigt usw., führt dies dazu,GetTicker()Funktion gibt zurücknull. zu diesem ZeitpunkttickerDer Wert von istnullIch werde es wieder besuchen.LastEs tritt eine Programmausnahme auf, die zum Stoppen des Richtlinienprogramms führt. Es scheint, dass der Fehler beim Aufruf der Schnittstelle (der GetTicker-Aufruf schlug fehl und gab null zurück) nicht die direkte Ursache für den tatsächlichen Handelsstopp der Strategie ist (die direkte Ursache ist der Zugriff auf einenullVariable Eigenschaften), Fehler und Ausfälle des Schnittstellenaufrufs führen nicht dazu, dass der tatsächliche Handel gestoppt wird (Hervorhebung hinzugefügt). Was können wir also tun, um eine anormale Aussetzung des realen Handels zu vermeiden? Die Antwort besteht darin, die von der Schnittstelle zurückgegebenen Daten einer Fehlertoleranzverarbeitung zu unterziehen. Es ist sehr einfach, einfach festzustellen, ob die zurückgegebenen Datennull(JavaScript wird als Beispiel verwendet, für andere Sprachen gilt grundsätzlich das Gleiche) Schreiben Sie einen kleinen Codeausschnitt zur Erklärung (dies ist nur eine Erklärung, es funktioniert nicht, wenn Sie es direkt ausführen!)

      var ticker = exchange.GetTicker()
      if (ticker) {
          var newPrice = ticker.Last
          Log("打印最新价格:", newPrice)
      } else {
          // 数据为null,不做操作就不会出问题
      }
    

    Nicht nurGetTickerDie Schnittstelle muss fehlertolerant sein. Alle Schnittstellen mit Netzwerkanforderungen müssen fehlertolerant für Rückgabewerte sein (wenn Sie den Rückgabewert der Funktion verwenden). Es gibt viele Möglichkeiten, Fehler zu tolerieren. Sie können_C()Funktion (siehe FMZ-API-Dokumentation), schreiben Sie Ihre eigene fehlertolerante Funktion und entwerfen Sie Ihren eigenen fehlertoleranten Mechanismus und Ihre eigene fehlertolerante Logik. um_C()Bei der Verwendung von Funktionen kommt es häufig vor, dass viele Studienanfänger diese falsch anwenden._C()Funktionsparameter sind Funktionsreferenzen, keine Funktionsaufrufe. Einfach ausgedrückt: _C(funcName, param1, param2), der Aufruf ist korrekt, funcName hat keine Klammern, param1 und param2 sind die Parameter, die an die Funktion funcName übergeben werden sollen. _C(funcName(param1, param2)), Aufruffehler, normalerweise schreiben Neulinge, die die FMZ-API-Dokumentation nicht sorgfältig lesen, es so.

    • Die Bestellmenge der Spotmarkt-Kauforder Die Auftragsmenge einer Spotmarkt-Kauforder wird auch oft von vielen neuen Händlern verwechselt. Im vorherigen Artikel haben wir erwähnt, dass die Auftragsmenge einer Spotmarkt-Kauforder normalerweise der Betrag ist (einige Börsen haben möglicherweise andere Einstellungen, im Allgemeinen auf FMZ, Diese speziellen Austauscheinstellungen werden in der FMZ-API-Dokumentation beschrieben.) Zum Testen habe ich beispielsweise die OKEX V5-Simulationsdiskette verwendet: Die Handelspaareinstellungen sind:LTC_USDT
      function main() {
          exchange.IO("simulate", true)   // 切换为OKEX交易所的模拟盘
          exchange.Buy(-1, 1)             // 价格是-1,表示下的订单为市价单,数量为1表示下单量是1USDT
      }
    

    Da Börsen im Allgemeinen über Bestellmengenlimits verfügen, werden Bestellungen, die unter diesem Limit liegen, nicht übermittelt (bei Binance Spot ist beispielsweise für eine erfolgreiche Übermittlung jede Bestellung über 5 USDT erforderlich). Wenn Sie eine Bestellung wie diese aufgeben, tritt daher ein Fehler auf:

      错误	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
    
    • Richtung bei der Platzierung einer Futures-Order Bei der Entwicklung von Futures-Strategien machen Neulinge häufig Fehler bei der Auftragsrichtung, was zu Problemen führt. Nehmen Sie als Beispiel das Schreiben von Strategien auf der Inventor Quantitative Trading Platform. Schauen wir uns zunächst die Beschreibung in der API-Dokumentation an: https://www.fmz.com/api#exchange.setdirection...

    Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

    Da die Orderfunktion nurBuy,Sell. Allerdings haben Futures (natürlich gibt es kein Problem mit Spot, Spot hat nur Kauf und Verkauf) Richtungen wie Eröffnung Long, Schließung Long, Eröffnung Short und Schließung Short. Offensichtlich kann Buy/Sell nicht Operationen in so viele Richtungen darstellen. . Zu diesem Zeitpunkt ist es notwendig, die Festlegung der Futures-Handelsrichtung einzuführen. Diese Funktionexchange.SetDirection()。 Auf FMZ exchange.SetDirection("buy")(zuerst die Richtung festlegen) undexchange.BuyBei gemeinsamer Verwendung bedeutet dies, dass es sich bei der erteilten Bestellung um eine Bestellung zum Eröffnen einer Long-Position handelt. Und so weiter: exchange.SetDirection("sell")Undexchange.SellBei gemeinsamer Verwendung bedeutet dies, dass es sich bei der erteilten Bestellung um eine Bestellung zum Eröffnen einer Short-Position handelt. exchange.SetDirection("closebuy")Undexchange.SellBei gemeinsamer Verwendung bedeutet dies, dass es sich bei der erteilten Order um eine Order zum Schließen einer Long-Position handelt. exchange.SetDirection("closesell")Undexchange.BuyBei gemeinsamer Verwendung bedeutet dies, dass es sich bei der erteilten Order um eine Order zum Schließen einer Short-Position handelt. Normalerweise werden Neulingeexchange.SetDirection("sell")Undexchange.BuyWird in Verbindung mit anderen oder anderen falschen Kombinationen verwendet. Dann wurde ein Fehler gemeldet (beim Backtesting wird möglicherweise kein Fehler gemeldet, aber es handelt sich hier offensichtlich um einen logischen Fehler, und Menschen mit Zwangsstörungen können das nicht tolerieren …). Ein weiterer häufiger Fehler von Neulingen

      function main() {
          exchange.SetContractType("quarter")   // 设置当前合约为季度合约
          exchange.SetDirection("sell")
          var id = exchange.Sell(-1, 1)    
          Log("看我市价单下单了,成交了,就有持仓了", exchange.GetPosition())    
          exchange.SetDirection("closebuy")   // closebuy 和Sell 搭配使用,嗯没错~
          exchange.Sell(-1, 1)
      }
    

    Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)
    Angesichts dessen fragen Sie sich vielleicht: „Warum habe ich eine Position und verwende „Closebuy“ und „Sell“ zusammen, aber es tritt ein Fehler auf und ich kann die Position nicht schließen?“ Ich würde antworten: „Ich habe in die falsche Richtung geschlossen! Ich habe die Long-Position geschlossen.“ Eine weitere mögliche Situation für den obigen Fehler ist: Die Schließrichtung ist korrekt eingestellt, die Auftragsfunktion wird korrekt verwendet und die Position wird in dieser Richtung gehalten, aber dieser Fehler wird trotzdem gemeldet. Der Grund dafür ist, dass Ihr Programm möglicherweise mehrere Aufträge erteilt hat, der ursprüngliche Auftrag jedoch nicht ausgeführt wurde und der Schlussauftrag auf dem Markt hing und darauf wartete, ausgeführt zu werden. Zu diesem Zeitpunkt fährt das Programm mit dem Schließen der Position fort und fordert Sie auf ein Fehler beim Überschreiten der Schlussposition.

    • Protokollausgabe und Anzeige von Transaktionsinformationen Das Entwerfen und Schreiben programmierter und quantitativer Handelsstrategien ist untrennbar mit der Gestaltung der Mensch-Computer-Interaktion wie „Datenanzeige“ und „Ausgabe des Betriebsprotokolls“ verbunden. Echtzeitskripte und Strategieprogramme werden normalerweise in nativen Programmiersprachen geschrieben. Nutzen Sie direkt die Ausgabefunktion der aktuellen Sprache. Zum Beispiel: Pythonprint。 JavaScriptconsole.log。 Golangfmt.Println()。 C++cout

    Lassen Sie uns über die auf der FMZ-Plattform angezeigten Informationen sprechen. Auf der Inventor Quantitative Trading Platform gibt es zwei Hauptorte, an denen Informationen angezeigt werden.

     - Statusleiste
    Nachdem die reale Festplatte ausgeführt wurde, sieht die Seite der realen Festplatte wie in der Abbildung dargestellt aus.
    
    
    ![Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)](/upload/asset/16bafc3d4df6dfa18102.png)
    
    
    Der Anzeigeteil ist die Statusleisteninformation. Die Statusleiste wird hauptsächlich verwendet, um einige sich in Echtzeit ändernde Daten anzuzeigen (da Änderungen in Echtzeit beobachtet werden müssen und nicht jedes Mal als Protokoll ausgedruckt werden können, daher diese Art von Daten können in der Statusleiste angezeigt werden. Wenn jedes einzelne ausgedruckt wird, enthält das Protokoll viele wiederholte und bedeutungslose Daten, was sich auf die Abfrage auswirkt).
    Datennutzung in der Statusleiste anzeigen`LogStatus`Funktion, Einzelheiten entnehmen Sie bitte der API-Dokumentation von FMZ.
    
     - Spalte „Protokoll“
    Auch auf der realen Marktseite, wie in der Abbildung gezeigt:
    
    
    ![Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)](/upload/asset/16cf9d61e66384022a76.png)
    
    
    Der Anzeigeteil ist die Protokollleiste, die hauptsächlich dazu verwendet wird, bestimmte Daten zu einem bestimmten Zeitpunkt dauerhaft aufzuzeichnen oder eine bestimmte Operation einer Strategie zu einem bestimmten Zeitpunkt aufzuzeichnen.
    Es gibt verschiedene Arten von Protokollen:
    1. Normales Protokoll: Die FMZ-Strategie verwendet die Protokollfunktion zur Ausgabe und zum Drucken im Strategieprotokoll.
    
    
    ![Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)](/upload/asset/16ddc72e1f7d07dcfa5a.png)
    
    
    2. Auftragsprotokoll, verwendet in der FMZ-Strategie`exchange.Sell`/`exchange.Buy`Es wird automatisch in der Protokollausgabe aufgezeichnet.
    
    
    ![Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)](/upload/asset/172aac2089e93865e3c2.png)
    
    
    3. Auftragsstornierungsprotokoll, verwendet in der FMZ-Strategie`exchange.CancelOrder`, wird das Auftragsstorno-Protokoll automatisch im Protokoll ausgegeben.
    
    
    ![Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)](/upload/asset/15e90c7be742743c7421.png)
    
    
    4. Fehlerprotokoll. Wenn bei der Ausführung der FMZ-Strategie ein Aufruffehler in der Schnittstelle für Netzwerkanforderungen auftritt oder eine Ausnahme ausgelöst wird (z. B. eine Anweisung wie „throw“), wird automatisch ein Fehlerprotokoll im Protokoll ausgegeben.
    
    
    ![Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)](/upload/asset/166196451439434a800f.png)
    

    FMZ-API-Funktionen, die Protokollausgaben generieren können, wie z. B. Log(…), exchange.Buy(Price, Amount), exchange.CancelOrder(Id) usw., können nach den erforderlichen Parametern einige zusätzliche Ausgabeparameter folgen, wie: Austausch. CancelOrder(Bestellungen[j].Id, orders[j]) Hiermit können Sie die Bestellungen stornieren[j] Bei Abgabe dieser Bestellung werden die Bestellinformationen ausgegeben.

      function main() {
          Log("数据1", "数据2", "数据3", "...")
          var data2 = 200
          var id = exchange.Sell(100000, 0.1, "附带数据1", data2, "...")
          exchange.CancelOrder(id, "附带数据1", data2, "...")
          LogProfit(100, "附带数据1", data2, "...")
      }
    
    • Verwendung von Indikatorfunktionen Bevor wir über die Funktionen von Indikatoren sprechen, sollten wir zunächst verstehen, was Indikatoren sind. Einfach ausgedrückt handelt es sich dabei um Linien wie gleitende Durchschnitte, MACD und ATR. F: Woher kommen diese Indikatoren? Antwort: Natürlich ist es berechnet. F: Was ist die Grundlage für die Berechnung? Antwort: Berechnet auf Grundlage der K-Line-Daten. F: Können Sie ein Beispiel geben? Antwort: Am Beispiel des einfachsten Indikators, des gleitenden Durchschnittsindikators, verwenden wir die täglichen K-Linien-Daten (eine positive oder negative Linie repräsentiert einen Tag) als Datenquelle für die Indikatorberechnung. Wenn der Parameter des gleitenden Durchschnittsindikators 10 beträgt, dann ist der berechnete gleitende Durchschnittsindikator der gleitende 10-Tage-Durchschnitt. Frage: Kann der gleitende Durchschnittsindikator berechnet werden, wenn die Anzahl der K-Line-BARs weniger als 10 beträgt? Antwort: Nicht nur der gleitende Durchschnittsindikator kann nicht berechnet werden, sondern jeder Indikator kann keinen gültigen Indikatorwert berechnen, wenn die Anzahl der K-Linien-Datenbalken die Parameter des Indikatorzyklus nicht erfüllt. Die entsprechenden Positionen des berechneten Arrays werden mit leeren Werte, zum BeispielJavaScriptDie Sprachstrategie wird beim Drucken der berechneten Indikatordaten angezeigtnull

    Ein Lehrbeispiel gibt es auf Strategy Square: https://www.fmz.com/strategy/125770 Beim Backtesting dieser Beispielstrategie aus dem Tutorial können Sie das vom Backtesting-System generierte Diagramm und den gleitenden Durchschnitt über 10 Perioden sehen:

    Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

    Benutzerdefinierte Strategiezeichnung, gezeichnetes K-Linien- und gleitendes Durchschnittsdiagramm:

    Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)

    F: Was ist, wenn ich den gleitenden 10-Stunden-Durchschnitt möchte? Antwort: K-Line-Daten können die K-Line-Daten des Stundenzeitraums verwenden.

    Für Laien ausgedrückt ist die K-Linie, die wir sehen, ein Array, nachdem wir es digitalisiert haben (wenn Sie das Konzept des Arrays nicht verstehen, können Sie auf Baidu suchen), in dem jedes Element eine K-Linienspalte ist, die angeordnet ist in der Reihenfolge. Das erste Element ist am weitesten von der aktuellen Zeit entfernt und das letzte Element des Arrays ist der aktuellen Zeit am nächsten. Normalerweise ist der letzte Balken der K-Linien-Daten der Balken des aktuellen Zeitraums, der sich in Echtzeit ändert und unvollständig ist (Sie können die Änderungen beobachten, indem Sie sich auf der Seite einer Börse anmelden und deren K-Linie beobachten). Die berechneten Indikatoren entsprechen ebenfalls eins zu eins den K-Linien-Balken. Im obigen Beispiel können Sie sehen, dass ein Indikatorwert einem K-Linien-Balken entspricht. Beachten Sie, dass sich die letzte K-Line-Spalte in Echtzeit ändert und sich die berechneten Indikatoren auch mit den Änderungen in der K-Line-Spalte ändern.

    Auf der Inventor Quantitative Trading Plattform können Sie die TA-Bibliothek (eine von der FMZ-Plattform implementierte Bibliothek, die in den Custodian integriert ist und direkt in verschiedenen Sprachen verwendet werden kann) oder die Talib-Bibliothek (Talib ist eine etablierte Indikatorenbibliothek, integriert mit JS und C++, und Python muss von Ihnen selbst geschrieben werden) Installieren). Im obigen Beispiel wird der gleitende Durchschnitt wie folgt berechnet: Verwenden der TA-Bibliothek:

      function main() {
          var records = exchange.GetRecords()
          var ma = TA.MA(records, 10)
          Log(ma)       // 打印均线
      }
    

    Verwenden der Talib-Bibliothek:

      function main() {
          var records = exchange.GetRecords()
          var ma = talib.MA(records, 10)
          Log(ma)       // 打印均线
      }      
    

    Die berechneten Indikatordaten ma sind ein Array, dessen jedes Element dem K-Linien-Array (Datensätze) entspricht, d.h.ma[ma.length -1]entsprechenrecords[records.length - 1], und so weiter.

    Das Gleiche gilt für andere komplexe Indikatoren, und Sie müssen auf Indikatoren wie MACD achten.

      var macd = TA.MACD(records)   // 这样只传入K线数据,不传入指标参数,指标参数采用的就是默认值,其它指标函数也是同理
    

    Zu diesem Zeitpunkt ist die Variable macd ein zweidimensionales Array (wenn Sie das Konzept nicht verstehen, können Sie auf Baidu suchen). Einfach ausgedrückt ist ein zweidimensionales Array ein Array und jedes Element davon ist auch ein Array . Frage: Warum sind die Daten des MACD-Indikators ein zweidimensionales Array? Antwort: Weil der MACD-Indikator aus zwei Linien (DIF-Linie und DEA-Linie) und einer Reihe von Volumenbalken (MACD-Volumenbalken, tatsächlich können diese Volumenbalkendaten auch als Linie betrachtet werden) besteht. Daher kann die MACD-Variable wie folgt aufgeteilt werden:

      var dif = macd[0]
      var dea = macd[1]
      var macdColumn = macd[2]
    

    Hier gibt es auch ein fertiges Unterrichtsbeispiel, bei Interesse schauen Sie sich das doch mal an: https://www.fmz.com/strategy/151972

    Neulinge im quantitativen Handel in Kryptowährungskreisen, schauen Sie sich bitte dies an - Wir bringen Sie dem quantitativen Handel in Kryptowährungskreisen näher (Teil 2)