Grundlegendes Tutorial für die FMZ Quant-Plattform Strategie schreiben

Schriftsteller:- Ich bin ein Idiot., Erstellt: 2022-03-18 09:00:46, aktualisiert: 2022-04-02 11:48:15

Sie können mit Python direkt in die Datenbank schreiben.

function onexit(){
    _G('profit', profit)
}
function main(){
    _G("num", 1); // Set a global variable num, with a value of 1 second 
    _G("num", "ok"); // Change a global variable num, whose value is the string "ok"
    _G("num", null); // Delete the global variable num 
    _G("num"); // Return the value of the global variable num; if it does not exist, return null

    var profit = 0
    if(_G('profit')){
        profit = _G('profit')
    }
}

_N

Bei der Bestellung müssen die Präzisionen von Preis und Volumen normalerweise kontrolliert werden; FMZ hat die _N-Funktion eingebaut, um die zu speichernden Dezimalstellen zu bestimmen; zum Beispiel das Ergebnis von_N(4.253,2)ist 4,25.

_C

Das Aufrufen der Plaform-API kann nicht garantieren, dass der Zugriff jedes Mal erfolgreich ist, und _C ist eine automatische Wiederholungsfunktion. Es ruft immer die angegebenen Funktionen an, bis es erfolgreich zurückkehrt (die Funktion wird erneut versucht, wenn sie null oder falsch zurückgibt); zum Beispiel,_C(exchange.GetTicker), mit dem Standard-Wiederversuchsintervall von 3 Sekunden, und Sie können die _CDelay-Funktion aufrufen, um das Wiederversuchsintervall zu steuern, z. B. _CDelay(1000), was bedeutet, das _C-Funktionswiederversuchsintervall auf 1 Sekunde zu ändern.GetTicker(), exchange.GetDepth, GetTrade, GetRecords, GetAccount, GetOrdersundGetOrderum die durch den Zugriffsausfall verursachte Unterbrechung des Programms zu verhindern.

CancelOrderkann die _C-Funktion nicht verwenden, da es verschiedene Gründe für das Scheitern der Stornierung einer Bestellung gibt. Wenn eine Bestellung ausgeführt wurde, wird die Stornierung der Bestellung ein Scheitern zurückgeben, und die Verwendung der _C-Funktion führt dazu, dass Sie die ganze Zeit erneut versuchen. Die _C-Funktion kann auch in Parametern übergeben werden und wird auch in benutzerdefinierten Funktionen verwendet.

function main(){
    var ticker = _C(exchange.GetTicker)
    var depth = _C(exchange.GetDepth)
    var records = _C(exchange.GetRecords, PERIOD_D1) // Pass in the parameters
}

_D

Ich rufe an._D()wird direkt die aktuelle Zeitrahmenfolge zurückgeben, z. B.:2019-08-15 03:46:14. Wenn es während des Backtests aufgerufen wird, wird die Backtestzeit zurückgegeben. Sie können die _D-Funktion verwenden, um die Zeit zu beurteilen, z. B.:_D().slice(11) > '09:00:00':. _D(timestamp, fmt), wird der ms-Zeitstempel in eine Zeitkette umgewandelt, z. B._D(1565855310002)Der fmt-Parameter ist das Zeitformat, und der Standard istyyyy-MM-dd hh:mm:ss.

TA-Indikatorfunktionen

Für einige häufig verwendete Indikatorfunktionen, wie MA\MACD\KDJ\BOLL und andere gängige Indikatoren, die direkt von der FMZ-Plattform eingebaut wurden, und die spezifischen unterstützten Indikatoren finden Sie im API-Dokument.

Vor der Verwendung der Indikatorfunktionen ist es am besten, die Länge der K-Linie zu beurteilen.nullZum Beispiel, wenn die Eingabe K-Linienlänge 100 und der Zeitraum für die Berechnung MA ist 10, dann sind die ersten 9 Werte alle Null, und die Berechnung nach den Form 9 Werte wird normalerweise durchgeführt.

JavaScript unterstützt auch das komplette Talib, als Drittanbieterbibliothek, mit Aufrufmethoden wietalib.CCI(records)Siehehttp://ta-lib.org/function.html. Für Python können Sie die Talib-Bibliothek selbst installieren. Aufgrund der Notwendigkeit der Kompilierung können Sie Pip nicht einfach zum Installieren verwenden. Sie können nach der Installationsmethode selbst suchen.

Indikatorfunktionen können nicht nur die K-Liniendaten passieren, sondern auch jedes Array passieren

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    if (records && records.length > 9) {
        var ma = TA.MA(records, 14)
        Log(ma)
    }
}

Häufig verwendete Funktionen in JavaScript

Hier stellen wir einige häufig verwendete JavaScript-Funktionen in den Bots vor.

  • Date.now()gibt den aktuellen Zeitstempel zurück;
  • parseFloat()Überträgt Zeichenfolgen in Zahlen, wieparseFloat("123.21");
  • parseInt()Strings in Ganzzahlen übertragen;
  • num.toString()Zahlen in Zeichenfolgen mit der Zahlenvariable num übertragen;
  • JSON.parse()Formate von Json-Strings, wieJSON.parse(exchange.GetRawJSON());
  • JavaScript hat seine eigenen mathematischen Funktionen, wie die üblichen mathematischen Operationen, einschließlichMath.max(), Math.abs()und so weiter; Bezugnahme:https://www.w3school.com.cn/jsref/jsref_obj_math.asp ;
  • Die von FMZ verwendete Mathematikbibliothek eines Drittanbieters; Referenz:https://mathjs.org/ ;
  • Die von FMZ verwendete Drittanbieter-Unterstufungsbibliothek von JavaScript, die empfohlen wird, Kenntnisse zu haben und die langweiligen Js-Operationen bequemer macht; Referenz:https://underscorejs.org/.

Vorlage

Es gibt viele Situationen, die beim Schreiben einer Bot-Strategie-Funktion berücksichtigt werden müssen. Zum Beispiel eine einfache Funktion wie den Kauf von 5 Münzen müssen wir berücksichtigen: Ist der aktuelle Saldo ausreichend? Wie hoch ist der Auftragspreis? Was ist die Präzision? Müssen Sie Aufträge aufteilen, um die Auswirkungen auf den Markt zu vermeiden? Wie geht man mit unvollendeten Aufträgen um? Und einige Details wie diese. In verschiedenen Strategien sind diese Funktionen gleich, so dass Sie sie in eine Vorlage umwandeln können. Nach den offiziellen Vorlagen können Benutzer auch ihre eigenen Vorlage-Strategien schreiben. Hier stellen wir einige sehr häufig verwendete Vorlage-Klassenbibliotheken vor, die offiziell von FMZ veröffentlicht wurden, damit Benutzer schnell ihre eigenen Strategien schreiben können.

Die JavaScript Kryptowährungshandelsbibliothek und die Rohstoff-Futures-Handelsbibliothek sind standardmäßig integriert und müssen nicht kopiert werden.https://www.fmz.com/square/20/1) Kopieren und speichern Sie die Vorlagenbibliothek und überprüfen Sie, welche Bibliothek Sie verwenden möchten, wenn Sie Ihre eigene Strategie erstellen.

JavaScript-Vorlagefunktionen beginnen alle mit$, während die Python-Systeme alle mitext.

Kryptowährungshandelsbibliothek

Quelle-Code-Adresse:https://www.fmz.com/strategy/10989, die bereits eingebaut ist, so dass keine Kopie erforderlich ist.

Erhalten Sie das Konto:

$.GetAccount(e)

Log($.GetAccount()); // Obtain the account information, with fault tolerance function 
Log($.GetAcccount(exchanges[1]));

Bestellung und Stornierung:

$.Buy/Sell(e, amount)
$.Buy(0.3); // The main platform buys 0.3 coin
$.Sell(0.2); // The main platform sells 0.2 coin
$.Sell(exchanges[1], 0.1); // The secondary platform sells 0.1 coin
$.CancelPendingOrders(e, orderType)

$.CancelPendingOrders(); // Cancel all entrusted orders of the main platform 
$.CancelPendingOrders(ORDER_TYPE_BUY); // Cancel all buy orders of the main platform
$.CancelPendingOrders(exchanges[1]); // Cancel all orders of the secondary platform
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // Cancel all sell orders of the secondary platforom 

Beurteilen Sie das Kreuz:

$.Cross(periodA, periodB) / $.Cross(arr1, arr2);

var n = $.Cross(15, 30);
var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6])
If n = 0, it means that the current prices of exactly 15-period EMA and 30-period EMA are equal. 
If n > 0, such as 5, it means that the 15-period EMA up-crosses the 30-period EMA by 5 periods (Bar)
If n < 0, such as -12, it means that the 15-period EMA down-crosses the 30-period EMA by 12 periods (Bar)
If it is not an array passed to the Cross, the function automatically obtains the K-line for moving average calculation.
If an array is passed to Cross, compare directly.

$.withdraw ((e, Währung, Adresse, Betrag, Gebühr, Passwort) Funktion:

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

Bibliothek für den Handel mit Rohstofffutures

Für die Verwendung der Rohstoff-Futures-Handelsbibliothek ist sehr stabil, es wird empfohlen.https://www.fmz.com/strategy/12961, die bereits eingebaut ist, so dass keine Kopie erforderlich ist.

CTA-Bibliothek

  • Der Bot wird den Index automatisch mit dem Hauptkontinuumvertrag verknüpfen.
  • Es wird den Umzug automatisch bearbeiten;
  • Sie können die Abbildung für den Backtest angeben, z. B. rb000/rb888, die die k-Linie des rb-Index zum Handel des Hauptkontinuumkontrakts abbildet;
  • Es kann auch mit anderen Verträgen verknüpft werden; z. B. muss man sich die K-Linie des rb-Index ansehen, um den MA-Hauptkontinuumvertrag zu handeln.
function main() {
    $.CTA("rb000,M000", function(r, mp) {
        if (r.length < 20) {
            return
        }
        var emaSlow = TA.EMA(r, 20)
        var emaFast = TA.EMA(r, 5)
        var cross = $.Cross(emaFast, emaSlow);
        if (mp <= 0 && cross > 2) {
            Log("Golden cross period", cross, "the moment position", mp);
            return 1
        } else if (mp >= 0 && cross < -2) {
            Log("Death cross period", cross, "the moment position", mp);
            return -1
        }
    });
}

Einladung Beispiel für Bibliothek

function main() {
    var p = $.NewPositionManager();
    p.OpenShort("MA609", 1);
    p.OpenShort("MA701", 1);
    Log(p.GetPosition("MA609", PD_SHORT));
    Log(p.GetAccount());
    Log(p.Account());
    Sleep(60000 * 10);
    p.CoverAll("MA609");
    LogProfit(p.Profit());
    Log($.IsTrading("MA609"));
    // Multiple varieties use the trading queue to complete the non-blocking trading task
    var q = $.NewTaskQueue();
    q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
        Log(task.desc, ret)
    })
    while (true) {
        // Call "poll" to execute the unfinished tasks in the spare time
        q.poll()
        Sleep(1000)
    }
}

Zeichnungsbibliothek

Da die Rohfunktionen für das Zeichnen sehr kompliziert sind, die im nächsten Tutorial vorgestellt werden, empfehlen wir Anfängern, die Zeichnbibliothek zu verwenden, um sehr einfache Liniendiagramme und K-Liniendiagramme zu zeichnen, etc. Die einfache Zeichnbibliothek wurde in FMZ eingebaut, die auf der Strategiebearbeitungsseite zu sehen ist; wenn die Bibliothek noch nicht eingebaut ist, müssen Benutzer die Bibliothek in der Strategie kopieren und speichern, um sie zu überprüfen und zu verwenden.

img

Kopieradresse der Javascript-Version der Zeichnungsbibliothek:https://www.fmz.com/strategy/27293Kopie der Python-Version der Zeichnungsbibliothek:https://www.fmz.com/strategy/39066

Konkretes Beispiel:

function main() {
    while (true) {
        var ticker = exchange.GetTicker()
        if (ticker) {
            $.PlotLine('Last', ticker.Last) // You can draw two lines at the samw time, "Last" is the name of the line
            $.PlotLine('Buy', ticker.Buy)
        }
        Sleep(6000)
    }
}

Einstellungen für Strategieparameter

Unter der Edit Strategy gibt es Strategieparameter-Einstellungen, die den globalen Variablen der Strategie entsprechen und an jedem beliebigen Ort im Code zugänglich sind. Die Strategieparameter können auf der Bot-Seite geändert werden, und sie sind nach dem Neustart gültig. Daher können einige Variablen auf die Parameter gesetzt werden, und die Parameter können ohne Änderung der Strategie geändert werden.
img

  • Variablename: nämlich die Zahl, die Zeichenfolge und die Kombination usw. auf dem obigen Bild, die direkt in der Strategiegruppe verwendet werden können.
  • Beschreibung: der Name eines Parameters auf der Strategieoberfläche, der für die Benutzer bequemer ist, um die Bedeutung des Parameters zu verstehen.
  • Anmerkung: die detaillierte Erläuterung eines Parameters, der entsprechend angezeigt wird, wenn die Maus über den Parameter steht.
  • Typ: der Typ eines Parameters, der später näher erläutert wird.
  • Standardeinstellung: der Standardwert des Parameters a.

Es ist sehr einfach zu verstehen, und String-Typ und Nummer-Typ. die sehr häufig verwendete Typen sind. Die Combo-Box wird die Optionen in der Box auf der Parameter-Schnittstelle anzeigen. Zum Beispiel können Sie den SYMBOL-Parameter alsBTC|USDT|ETHin der Kombinationsbox; wenn Sie USDT in der Box auf der Seite wählen, ist der SYMBOL-Wert in der Strategie USDT-Index 1. Check options bezieht sich auf ein optionales Kontrollkästchen; check bedeutet true, während kein Check falsch bedeutet.

Es gibt mehr Parameter für die Einstellungen; referene:https://www.fmz.com/api.

Strategie-Backtest

Wenn die Quantifizierung einer Strategie abgeschlossen ist, können Sie sie anhand der Historie-Daten testen, um die Gewinnsituation der Strategie zum Historiedatum zu überprüfen. Natürlich ist das Backtestresultat nur zur Referenz. FMZ Quant-Plattform unterstützt die Backtests von Kryptowährungen Spot und Futures, BitMEX Perpetual Contract, Rohstofffutures, bei denen nur Mainstream-Kryptowährungen unterstützt werden. Der Javascript-Backtest wird im Browser ausgeführt, der Python-Backtest auf dem Docker und unsere Plattform bietet öffentliche Dockers für Benutzer.

Baktest-Mechanismus

Der Onbar-Backtest-Mechanismus basiert auf der K-Linie, d.h. jede K-Linie erzeugt einen Zeitpunkt für den Backtest. Zu diesem Zeitpunkt können Sie Informationen erhalten, einschließlich der offenen, geschlossenen, höchsten und niedrigsten Preise und des Handelsvolumens der aktuellen K-Linie, sowie die historischen K-Line-Informationen vor dem Punkt. Der Nachteil dieser Art von Mechanismus ist sehr offensichtlich: nur ein Kauf kann auf einer K-Linie generiert werden; normalerweise ist der verwendete Preis der Schließpreis der thr K-Linie. Außerdem kann eine K-Linie nur vier Preise erhalten, nämlich die schließenden, offenen, höchsten und niedrigsten Preise; die Informationen, einschließlich der Veränderung der Preise in einer K-Linie und ob sich der höchste Preis oder der niedrigste Preis zuerst ändert, können nicht erhalten werden. Nehmen Sie den einstündigen K-Test-Bot als Beispiel.

Der Backtest auf FMZ enthält zwei Arten, nämlich den Simulations-Level-Backtest und den Realmarkt-Level-Backtest. Der Simulations-Level-Backtest kann den simulierten Tick nach den Unterlagen-K-Linien-Perioden erzeugen, und jede Unterlagen-K-Linien-Periode erzeugt 14 Backtestzeitpunkte.Der reale Marktlevel-Backtest wird jedoch tatsächlich alle paar Sekunden Ticks sammeln, und jetzt unterstützt er echte Tiefe (einschließlich 20 Ebenen) und echte Handelsausführung von tarde.Das Datum Volumen ist ziemlich groß, und die Backtest-Geschwindigkeit ist sehr langsam, so dass der Backtest nicht in einer langen Zeit ausgeführt werden kann. FMZ Backtest-Mechanismus kann mehrere Trades der startegy auf einer K-Linie zu realisieren, um die Situation zu verhindern, dass der Handel nur durch den Schlusskurs ausgeführt werden kann, und auch zunehmend das Ziel und die Pflege der Backtest-Geschwindigkeit.https://www.fmz.com/bbs-topic/9126.

Der Rahmen von Backtest und Bot ist der gleiche, beide eine unendliche Schleife. Da der Backtest auf verschiedene Backtestpunkte überspringen soll, kann der Backtest ohne Verwendung von Sleep ausgeführt werden, und er wird automatisch zum nächsten Zeitpunkt überspringen, wenn eine Schleife vorbei ist. Python benötigt jedoch aufgrund des Programmmechanismus eine Einschränkung vonSleep(10), um nicht festzustecken.

Rücktest-Übereinstimmung

Die Backtest-Engine wird den vom Benutzer platzierten Auftragspreis und den Marktpreis zum Zeitpunkt des Backtests abbilden. Wenn der Kaufpreis höher ist als der Verkaufspreis, wird der Verkaufspreis ausgeführt. Wenn der Handel nicht ausgeführt werden kann, wird ein ausstehender Auftrag generiert. Um den Handel zu gewährleisten, muss ein Slippage hinzugefügt werden. Wenn die Position während des Backtests nicht geöffnet oder geschlossen werden kann, überprüfen Sie, ob die Position aufgrund unvollendeter Aufträge eingefroren ist.

Einstellungen der Backtestseite

img

  • 1.die Seite Backtest wählen, von der links die Seite Edit Strategy ist;
  • 2.Die Start- und Endzeit des Backtests; für Daten, die möglicherweise unvollständig sind, kann der Backtest direkt von dem Zeitpunkt an beginnen, zu dem die Daten vorliegen;
  • 3.die Ausfallfrist für die Rückprüfung derGetRecords()Funktion; Sie können auch einen Periodenparameter im Code angeben;
  • 4.Auswahl des Mechanismus für Backtests;
  • 5.die Anzeige oder Verbergung mehrerer Backtest-Einstellungen;
  • 6.die Höchstmengen von Log-Elementen, Gewinnlog-Elementen und Chart-Log-Elementen, um den Browser vor dem Ausfall zu schützen, der durch eine riesige Datenmenge verursacht wird;
  • 7.die Periode, die durch die Unterschichtzelle gemäß der K-Linie erzeugt wird;
  • 8.Rutschpunkt;
  • 9. Fehlertoleranz, die die Situation simuliert, wenn die API-Anfrage falsch ist, und die Fehlertoleranzfähigkeit der Strategie testet;
  • 10. ob das Marktdiagramm erstellt werden soll; wenn bei dem Backtest eine TA-Indikatorfunktion verwendet wird, wird die Funktion automatisch im Diagramm angezeigt und auch der Kauf und Verkauf markiert;
  • 11.Stellung von Dienstleistungsgebühren;
  • 12.Zusatzplattformen - Handelspare und Vermögenswerte;
  • 13.Einstellungen der Parameter des Backtests; wenn die Parameter Zahlen sind und auch eine Einschlüsseloptimierung unterstützen, werden die Parameter im Backtest automatisch in einem bestimmten Bereich durchlaufen.

Unterschiede zwischen Bot & Backtest

  • 1.die einzigen gültigen Marktnotierungen im Backtest stammen nur von GetTicker und GetRecords; andere wie GetDepth und GetTrades sind nicht real (das Datenvolumen ist riesig, und obwohl der Backtest auf realen Marktniveaus jetzt die Daten bereits unterstützt, unterstützt er nur die neuesten Daten);
  • 2.die im Backtest hinzugefügten Plattformen sind alle getrennte Konten; das Wechseln der Handelspare wird nicht unterstützt; daher können Sie nicht zwei Handelspare auf einem Konto betreiben;
  • 3.Die Anforderung von netwrok kann nicht im Backtest verwendet werden;
  • 4.IOdie Erweiterung kann im Backtest nicht verwendet werden und nur grundlegende API können betrieben werden;
  • 5.Nur Standarddaten können im Backtest gewonnen werden, und Daten, wie z.B. Info, die mit dem Bot zusammenhängen, gibt es nicht;
  • 6.die Verzögerung kann bei der Rückprüfung nicht durchgeführt werden, und achten Sie auf die Situation bei eingefrorenen Aufträgen;
  • 7.inDer Rücktest von Rohstoff-Futures wird nicht unterstützt.

Strategie Fehlertoleranz und häufige Fehler

Wie wir bereits erwähnt haben, kann die Verwendung einer API-Schnittstelle im Bot nicht zugreifen und zurückkehrennull; wenn Sie die Daten weiterhin verwenden, wird ein Fehler gemeldet und der Bot wird gestoppt. Daher müssen Strategien in der Fehlerverträglichkeit gut funktionieren.

Häufige Arten, Fehler zu tolerieren

Häufige Ursachen:

  • API-Zugangsnetzwerkfehler; der Timeout für den Zugriff auf die Schnittstelle gibt nunll zurück und ein Fehler wird gemeldet.

  • Platfrom-Limitationsfehler, wie z. B. IP-Limitation, Auftragsgenauigkeit, Zugriffsfrequenz, Parameterfehler, Vermögensmangel, Markthandelsversagen, Stornierung ausgeführter Aufträge usw.; die Einzelheiten können im API-Dokument nach den falschen Codes abgerufen werden.

  • Datenfehler der Plattform; es kommt manchmal vor, wie z. B. die Rückgabe von Nulltiefe, verzögerte Kontoinformationen und verzögerter Bestellstatus usw.

  • Logischer Fehler im Programm.

Bevor Sie die zurückgegebenen Daten von API verwenden, sollten Sie beurteilen, ob die Daten null sind, und die üblichen Methoden werden wie folgt eingeführt:

//1.judge the data is null and handle 
var ticker = exchange.GetTicker();
while(ticker == null){
     Log('ticker obtain error');
     ticker = exchange.GetTicker();
 }
 Log(ticker.Last);
 // 2. judge the data is not null, and use 
 var ticker = exchange.GetTicker();
 if(!ticker){
     Log(ticker.Last);
 }
 // 3.retry _C() function 
 var ticker = _C(exchange.GetTicker);
 Log(ticker.Last);
 // 4.try cache fault tolerance
 try{
     var ticker = exchange.GetTicker();
     Log(ticker.Last);
 }
 catch(err){
     Log('ticker obtain error');
 } 

Wenn Sie Informationen über Fehler erhalten möchten, können SieGetLastError(), und die Zeichenfolgen der letzten Fehlerinformationen werden zurückgegeben, und die Fehler können durch Unterschiede verarbeitet werden.

Häufig gestellte Fragen

Zusammenfassung der häufigsten Fehler in den oberen Beiträgen der Foren:https://www.fmz.com/bbs-topic/9158. Hier stellen wir es kurz vor; Sie können Ctrl + F verwenden, um zu suchen, wenn Sie Probleme haben.

Wie wird der Docker eingesetzt?

Es gibt eine ausführliche Einführung darüber im Abschnitt über das Hinzufügen eines Dockers.

Kann ich jemanden bitten, mir Strategien zu schreiben?

aufhttps://www.fmz.com/markets, gibt es einige Leute, die Dienstleistungen zur Erstellung von Strategien für andere anbieten, oder Sie können in den Chat-Gruppen fragen; beachten Sie, dass diese Art von Dienstleistungen von Ihnen selbst kontaktiert werden, und Sie sollten sich bewusst sein, dass das Risiko auch von Ihnen selbst getragen wird.

Alle Schnittstellen fordern bei Zugriff auf Timeout

Es bezieht sich auf die Timeout der zugänglichen Plattformoberfläche; wenn die Timeout gelegentlich eintritt, ist dies kein Problem; wenn die Timeout ständig angefordert wird, bedeutet dies, dass nicht alle Netzwerke zugänglich sind und ein ausländischer Server benötigt wird.

Erfolgreicher Abschluss

Wenn der Backtest einen Fehler meldet, handelt es sich in der Regel um einen Schreibfehler; wenn Sie versuchen, einen Auftrag zum Schließen einer Position zu erteilen, wenn keine Position vorliegt oder das Positionsvolumen nicht ausreicht, wird ein Fehler gemeldet.

Symbol nicht eingestellt

Es gibt keinen Vertrag im Code, der bei den Backtests von Futures-Plattformen verwendet wird.

BITMEX 429error,{error:{message:Rate limit exceeded re-try in 1 seconds......}}

Die Zugriffsfrequenz der Plattform-Schnittstelle ist zu hoch.

Der Zeitstempel ist außerhalb der Reichweite.

Der Zeitstempel des Servers überschreitet den Zeitrahmen für die Aktualisierung des Servers, und die überschrittene Zeit darf nicht zu lang sein.

GetOrder ((455284455)): Fehler: ungültige Bestell-ID oder Bestellung storniert.

Wird der Auftrag einer Plattform storniert, wird die Plattform die Auftragsinformationen nicht mehr aufbewahren, sodass die Informationen nicht mehr abgerufen werden können.

GetOrders: 400: {code:-1121,msg:ungültiges Symbol.}

Ungültiges Handelspaar; prüfen Sie, ob die Einstellung des Handelspaares falsch ist.

Geheime Schlüssel entschlüsseln fehlgeschlagen

Das APIKEY-Parsen scheitert. Wenn das FMZ-Passwort nach der Konfiguration des APIKEY geändert wurde, versuchen Sie, eine Plattformseite auf FMZ hinzuzufügen und die Plattform APIKEY neu zu konfigurieren.

Unterschrift nicht gültig: ungültige Einreichungszeit oder falsches Zeitformat

Ich schlage vor, Sie verwenden Linux-Server, oder installieren Sie Zeit-Synchronisierungs-Software auf diesen Windows-Systemen, wo dieses Problem auftritt.

Warum kann der Docker immer noch nicht auf die Plattform-API zugreifen, wenn ein globaler Proxy eingestellt ist?

Der globale Proxy verfügt nicht über einen Proxy-Docker-Netzwerk-Port. Aufgrund des Verzögerungsproblems ist es am besten, den Docker eines ausländischen Servers zu implementieren.

Wie kann man eine Strategie lokal speichern und nicht auf FMZ hochladen?

Mit Python können Sie lokale Dateien importieren, die von FMZ API normalerweise geschriebene Strategie als Datei speichern und in den Ausführungsweg auf Ihrem eigenen Server legen, und Sie können sie direkt lesen und ausführen.

#!python2.7

def run(runfile):
      with open(runfile,"r") as f:
            exec(f.read())
            
def main():
    run('my.py')

Wie man das Testnet einer Plattform oder wie man die API-Basisadresse ändert?

Verwenden Sie exchange.SetBase() um direkt auf die entsprechende API-Basisadresse zu wechseln.

exchange.SetBase("https://www.okex.me")

Mehr