[TOC]
Was kann die FMZ-Quantitätshandelsplattform tun?
FMZ (Erfinder) Quantitative HandelsplattformEs handelt sich um die professionellste Quantifizierungs-Community im Bereich der Quantifizierung, in der Sie Quantifizierungsstrategien lernen, schreiben, teilen, kaufen und verkaufen können; Online-Rezensionen und Analog-Trading mit Analog-Trägern; Lauf-, Offensiv- und Objektiv-Trägern; Unterstützung für nahezu alle Mainstream-Digital-Währungs-Exchanges.
Die vollständige Serie von Tutorials
Ich habe das Gefühl, dass ich es nicht kann.
Video-Tutorials:
JavaScript
Die vollständigen Inhalte wie Tutorials, Plattformnutzung und Strategien schreiben. Wenn Sie ein Programm- und Handelskenntnis haben, können Sie in etwa zwei Tagen eine einfache Strategie schreiben, wenn Sie keine Programmierkenntnisse haben, benötigen Sie nur ein oder zwei Wochen, um die Grundlagen zu lernen.bilibili
Es gibt auch Video-Tutorials:Erfinder von Quantitative Handelsplattformen - Konzept der Treuhänder
Erfinder der Quantitative Handelsplattform - Übersicht der Website
Erfinder von Quantitative Trading Plattformen - Einführung von Administratoren
Die Erfinder quantifizieren die Plattform - sie erstellen eine virtuelle Plattform.
Erfinder Quantitative Handelsplattform - Registrierungsstrategie, Kopie-Code erklärt
Erfinder Quantitative Handelsplattform - vollständige Strategien, Parameterkonfiguration, Import und Export
Erfinder von Quantitative Trading Plattformen - Debugging-Tools und Remote-Editing-FunktionenWenn Sie Probleme haben, können Sie jederzeit auf das Forum gehen, Fragen stellen, diskutieren, auf der Plattform einen Auftrag stellen oder in einem Telegramm schreiben.TelegrammIch möchte Ihnen sagen, dass ich die Frage, die Sie mir stellen, sehr schnell beantworten kann.
Unterstützung für ChatGPT-Unterstützung
Die FMZ-Quantitätshandelsplattform verfügt über ChatGPT als Hilfsprogramm für die Entwicklung, und Sie können "ChatGPT" in der Schnellknopfbar im "Control Center" klicken, um zu "ChatGPT" zu kommen.Chat-GPT-Hilfen-Seite。
Was für Programmiersprachen kann ich verwenden, um meine Strategie umzusetzen?
FMZ-Quantitative Handelsplattform unterstütztJavaScript
、TypeScript
、Python
、C++
、PINE
、麦语言
、Blockly可视化
Sie schreiben eine Designstrategie.
UnterstützungTypeScript
Die Sprache, die bei der Strategieentwicklung immer noch alsJavaScript
Das ist die Strategie, die wir zu Beginn des Strategie-Codes schreiben.// @ts-check
Oder klicken Sie auf "TypeScript" in der oberen rechten Ecke des Richtlinienbereichs, um zu wechseln.TypeScript
Die Plattform erkennt den Code automatisch als:TypeScript
Sie können auch die Kompilierungs- und Typprüfungsunterstützung für:
TypeScript
Die Static-Type-Checking-Funktion von Microsoft Office hilft Ihnen dabei, potenzielle Fehler zu erkennen und die Qualität zu verbessern.TypeScript
Das Typ-System ermöglicht es Ihnen, die gewünschten Eigenschaften und Methoden schneller zu finden, wenn Sie Code schreiben, was die Entwicklungseffizienz verbessert.TypeScript
Sie können Ihren Code besser organisieren und pflegen, damit er leicht zu lesen und zu verstehen ist.TypeScript
Es bietet leistungsstarke objektorientierte Programmiereigenschaften wie Schnittstellen, Klassen und Panotypen, die Ihnen helfen, robustere, wiederverwendbare Strategie-Code zu schreiben.Eine Kenntnis einer dieser Strategien ist ausreichend. Zusätzlich zur Unterstützung der Programmierung kann die Strategie auch mit Blockly genutzt werden. Die Strategie der Visualisierung von Modulen ist intuitiver und erfordert keine Programmierung.
Blockly
Das Video zeigt:
Einstellungen
Python
Strategieprogramm verwendetPython
Erklärer
NutzungPython
Schriftliche Richtlinien, Tests oder Festplatten, wenn die Systemumgebung, in der der Host ist, gleichzeitig installiert istPython2undPython3Das Programm kann gestartet werden, wenn die Politik in der ersten Zeile gestartet wird.Python
Die meisten von ihnen sind nicht in der Lage, sich zu bewegen.#!python3
,#!python2
Das System findet automatisch einen Interpreter. Es kann auch einen absoluten Pfad angeben, z. B.:#!/usr/bin/python3
。
Was ist ein Treuhänder?
TreuhänderVerständlich als Ausführungsstelle für Ihre Handelsstrategie, verantwortlich für komplexe Datenanfragen, Datenempfang, Netzwerkverbindungen, Log-Return usw. Die Administratoren laufen auf Ihren Servern und beeinträchtigen Ihre Administratoren nicht, auch wenn die FMZ-Quantitäts-Handelsplattform-Website durch einen Netzwerkausfall gestört wird.Linux,Fenster,Mac-Betriebssystem,Android,ARM-Linux von Raspberry PiDas ist ein großes Problem.Verwalterseite,Installation und Aktualisierung von Linux-Hosts■ Die von den Treuhandverwaltern verwalteten Festplattenprotokolle werden im Verzeichnis der Treuhandprogramme gespeichert../logs/storage
In dem Dokument heißt esdb3
DieSqlite
Die Datenbank kann in einem Dokument verwendet werden.Sqlite
Die Software wird direkt bearbeitet und für diese Erweiterungen heißt es:db3
Die Dateiname ist die Dateiname der Festplatte.ID
。
Unterstützte Vereinbarung
Entwickeln Sie Strategien auf der FMZ Quantitative Trading Platform, die nur für die FMZ Quantitative Account-Inhaber sichtbar sind.Python
Das Paket wird in den Strategiecode geladen, was die Lokalisierung der Strategie ermöglicht.
Python
Die Sicherheit des Codes:
WeilPython
Die Sprache ist offen und sehr leicht zu kontracompilieren, wenn die Politik nicht selbstständig ist, sondern vermietet wird, wenn man befürchtet, dass die Politik bei einer Leckage an einem von ihm eingesetzten Trustee ausgeführt wird und in Form von Unterkonto- oder Volltrustverwaltung vermietet wird.
Python
Die Strategie-Code ist:
Sie sind nicht mehr in der Lage, sich zu bewegen.Python
Strategie: Codeautoren verschlüsseln nicht, wenn sie es selber benutzen, sondern wenn sie es an andere vermieten.Python
Die Strategie zum Start wird mit dem folgenden Code bearbeitet, der für Selbstbedienung oder Vermietung bestimmt werden kann.Python
Ob die Strategie beim Ausführen verschlüsselt wird.Python
Die Version lautet:Python 2.7
Ich bin nicht derjenige, der das tut.Python 3.5
Ich bin nicht derjenige, der das tut.Python 3.6
Die Versionen sind hier:
Der Code wird von den Autoren selbst ausgeführt und durch Registrierungscodes an andere weitergegeben:#!python
Komma verwendet, um eine Python-Interpreterversion anzugeben,
Intervall, Eingabe von Verschlüsselungsanweisungenencrypt
Und wenn nichtPython
Version direkt hinzugefügt#!encrypt
。
#!python,encrypt
Oder
#!encrypt
Die Autoren der Strategie betreiben sie selbst und geben ihren Code nicht verschlüsselt an andere weiter, indem sie Registrierungscodes verwenden:
#!python,not encrypted
Oder
#!not encrypted
UrteilPython
Strategiecode-Verschlüsselung wirkt mit Codeos.getenv('__FMZ_ENV__')
und die String zurückgibt"encrypt"
Die Erklärung ist in Kraft getreten. Nur die Festplatte ist gültig, die Nachprüfung wird nicht verschlüsselt.Python
Die Strategie-Code.
#!encrypt
def main():
ret = os.getenv('__FMZ_ENV__')
# 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
Log(ret, ret == "encrypt")
Sensible Daten wie Kontoinformationen, die auf der FMZ-Quantitätshandelsplattform konfiguriert werden, und die Verschlüsselungsstränge in den Politikparametern werden an der Browserseite verschlüsselt. Diese Informationen, die auf der FMZ-Quantitätshandelsplattform gespeichert werden, sind verschlüsselt ("nicht-offensichtliche Daten"). Nur die privaten Geräte der Benutzer können entschlüsselt werden, was die Sicherheit der sensiblen Daten erheblich verbessert. Bitte verkaufen Sie oder verkaufen Sie die Politik nicht, wenn andere sensible Informationen in den Politikcodes, -parameter-Einstellungen oder -beschreibungen enthalten sind.
Die Plattform unterstützt die lokalisierte Konfiguration von sensiblen Informationen wie Kontoinformationen, Geheimschlüssel und so weiter.
Auf der Seite der Plattformkonfiguration der Börseninformationen werden alle versteckten, verschlüsselten Textfeldsteuerungen unterstützt, um die Pfade der Konfigurationsdatei in die lokalen Dateien der Treuhänder zu laden.RSA KEY
Ein Beispiel ist die Verifizierungsmethode, die detailliert beschreibt, wie sensible Informationen lokal auf dem Gerät konfiguriert werden können, auf dem sich die Administratorprogramme befinden.
1. Erstellen Sie einen öffentlichen oder privaten RSA-Schlüssel.PKCS#8
Es gibt viele Tools, mit denen Sie Ihre öffentlichen Schlüssel und Ihre privaten Schlüssel erstellen können.openssl
Das ist nicht wahr.
2. Auf einer Börse erstelltRSA KEY
, beim Erstellen hochgeladenDer erste SchrittDer öffentliche Schlüssel wurde in.
3 wirdDer erste SchrittDer private Schlüssel wurde intxt
Die Dateiformate speichern den gleichwertigen Verzeichnis des Administrators und können auch andere Pfade in dem Verzeichnis speichern, in dem sich der Administrator befindet.
4. Konfiguration der Börse auf FMZAccess Key
Sie müssen die Liste der in der Börse erstellten Bilder im Editor-Box ausfüllen.RSA KEY
Das ist nicht wahr.
5. Konfiguration der Börse auf FMZSecret Key
In der Redaktionsliste finden Sie:Schritt dreiSie werden in den Administrator-Peer-Directory platziert.txt
Der Pfad der Datei, z.B. der Name der Datei, die platziert wird, heißt:rsaKey.txt
In diesem Fall werden die folgenden Informationen in den gleichwertigen Verzeichnissen für das Dokument und den Treuhänder eingegeben:file:///rsaKey.txt
◦ die nächste Stufe des Verzeichnisses, in dem sich das Dokument befindetrsa_key
Sie füllen:file:///rsa_key//rsaKey.txt
Und wenn sie platziert werden.rsaKey.txt
Es ist wichtig zu beachten, dass die Datei nur die Platzierung in dem gleichwertigen oder untergeordneten Verzeichnis des Host-Levels unterstützt.
Das bedeutet, dass die Lokalisierung des privaten Schlüssels sicherer ist und dass man sich auf den genauen Ablauf beziehen kann.Video erklärt
Was ist ein Retest-System und wofür ist es nützlich?
Wenn Sie eine Quantitative Trading Strategie entwickelt haben, wie können Sie die Grundlagen Ihrer Strategie verstehen, wie sie funktioniert, wie sie sich auswirkt? Natürlich können wir nicht direkt mit echtem Gold und Silber handeln, sondern wir können Ihre Strategie mit historischen Daten testen.
Wie genau sind die Daten des Retest-Systems und wie genau sind die Ergebnisse?
Die FMZ-Quantitative-Trading-Plattform unterteilt das Rückmessmodell inEchtzeit-RückprüfungundAnalog-Level-Rückprüfungen❖ Die realen Datenträger werden vollständig mit den vollständigen historischen Daten getestet; die simulierten Datenträger werden mit den realen K-Line-Daten erzeugt.tick
Die Daten werden für eine Rückprüfung verwendet. Beide Daten basieren auf echten historischen Daten, aber die Daten auf echten Datenträgern sind genauer und die Ergebnisse sind glaubwürdiger.FMZ-RückmessmechanismenAber Retrospektive ist lediglich eine Strategie, die sich auf historische Daten stützt. Historische Daten sind nicht vollständig repräsentativ für zukünftige Ereignisse.
Die Frage, auf die man bei der Rezension verschiedener Sprachstrategien achten sollte:
JavaScriptundC++Die Strategie-Rückprüfung erfolgt am Browser-End, auf dem Festplatte oder auf dem PC.WexAppDas ist eine echte Plattform, die sich als FMZ-Quantitäts-Trading-Plattform erweist.WexAppDie Simulation Exchange (SME) funktioniert ohne die Installation von anderen Software, Bibliotheken oder Modulen.PythonDie Nachprüfung erfolgt auf dem Host, kann auf dem FMZ-Quantifizierten öffentlichen Server oder auf dem eigenen Host des Benutzers durchgeführt werden.PythonWenn einige Bibliotheken benötigt werden, müssen sie selbst installiert werden (nur häufig genutzte Bibliotheken werden auf dem öffentlichen Server unterstützt).
Daten im Retestsystem
FMZ Quantitative Trading Platform Retesting gibt es in zwei Arten: Analog-Level-Retesting und Realdisk-Retesting, wobei Analog-Level-Retesting basiert auf der Basis der im Untergrund generierten K-Line-Zyklen.tick
, wobei 12 Retrospektivzeitpunkte für jeden unteren K-Linienzyklus erzeugt werden, während die echten Datenträger tatsächlich gesammelt werden.tick
Das FMZ-Rücklaufverfahren ermöglicht es, dass die Strategie mehrmals auf einer K-Leitung gehandelt wird, wodurch ein Fall vermieden wird, bei dem nur die Verkaufspreise geschlossen werden können.Links。
DEBUG-Methode für die Politik im Requestsystem
JavaScript-Richtlinien werden im Chrome-Browser DevTools deaktiviert。
Kryptowährung (digitale Währung)
Name | Typ | Erläuterung |
---|---|---|
Bitfinex | Gegenstand der Börse | Es gibt eine Reihe von Möglichkeiten, wie Sie sich in der Lage machen, eine begrenzte Anzahl von Transaktionen zu unterstützen.BTC_USD ,ETH_USD ,LTC_USD Es gibt also eine Reihe von Möglichkeiten, wie man Geld verdient.USD Es ist in Dollar geschätzt. |
Binance | Gegenstand der Börse | Es gibt eine Reihe von Möglichkeiten, wie Sie sich in der Lage machen, eine begrenzte Anzahl von Transaktionen zu unterstützen.BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC Und so weiter. |
OKX | Gegenstand der Börse | Es gibt eine Reihe von Möglichkeiten, wie Sie sich in der Lage machen, eine begrenzte Anzahl von Transaktionen zu unterstützen.BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC Und so weiter. |
Münzen | Gegenstand der Börse | Es gibt eine Reihe von Möglichkeiten, wie Sie sich in der Lage machen, eine begrenzte Anzahl von Transaktionen zu unterstützen.BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC Und so weiter. |
OKX-Futures | Gegenstand der Futures-Börse | Es gibt eine Reihe von Möglichkeiten, wie Sie sich in der Lage machen, eine begrenzte Anzahl von Transaktionen zu unterstützen.BTC_USD ,ETH_USD Das bedeutet, dass die Transaktionen mit den WährungenUSD Siehe auch:exchange.SetContractType Der Code für die Unterstützung von Kontrakten besteht aus:this_week 、next_week 、quarter 、swap 。 |
HuobiDM | Gegenstand der Futures-Börse | HuobiDM steht für Token-Futures (Token-Kontrakte) und unterstützt eine begrenzte Anzahl von Handelsparen, wie zum Beispiel:BTC_USD ,ETH_USD Das bedeutet, dass die Transaktionen mit den WährungenUSD Siehe auch:exchange.SetContractType Der Code für die Unterstützung von Kontrakten besteht aus:this_week 、next_week 、quarter 、swap 。 |
BitMEX | Gegenstand der Futures-Börse | Das Transaktionspaar ist:XBT_USD Siehe auch:exchange.SetContractType Der Code für die Unterstützung von Kontrakten besteht aus:XBTUSD 。 |
Binance-Futures | Gegenstand der Futures-Börse | Es gibt eine Reihe von Möglichkeiten, wie Sie sich in der Lage machen, eine begrenzte Anzahl von Transaktionen zu unterstützen.BTC_USDT ,ETH_USDT Das bedeutet, dass die Transaktionen mit den WährungenUSDT Siehe auch:exchange.SetContractType Wir haben eine Funktion.USDT Der Code für die Unterstützung dieses Vertrags lautet:swap 。 |
Deribit-Optionen | Objekt der Optionsbörse | Das Transaktionspaar ist:BTC_USD ,ETH_USD Siehe auch:exchange.SetContractType Die Funktion ist, dass die Kontrakt-Konto-Kontrakte. |
Die Futures-Exchange-Objekte des Retest-Systems unterstützen die Umschaltung von Paaren in den Strategiecodes momentan nicht.
Analog-Level-Rückmessungen werden anhand der unteren K-Linien-Daten des Rückmesssystems nach einem bestimmten Algorithmus in einem Rahmen simuliert, der sich aus den Wertstrukturen Höchst-, Mindest-, Eröffnungs- und Schließpreis der unteren K-Line Bar zusammensetzt.tick
Daten, die in Echtzeit funktionierentick
Die Daten werden bei der Anforderung der Schnittstelle zurückgegeben.Beschreibung des Mechanismus zur Quantifizierung von Analog-Level-Rückmessungen。
Die Echtzeit-Rückprüfung ist real.tick
Die Stufendaten werden in der Zeitrahmenfolge von Bar angegeben.tick
Für die Strategie der Ebene-Daten ist die Verwendung von Echtplatten-Rückmessungen näher an der Realität.tick
Es handelt sich um reale, nicht simulierte Datenerzeugung. Unterstützt Tiefendaten, Markttransaktionsdatenspiel, unterstützt eine kundenspezifische Tiefe, unterstützt Skala-Daten. Festplatten-Skala-Skala-Daten unterstützt maximal 50 MB, ohne Begrenzung des Skala-Zeitraums innerhalb der Datengrenze.GetDepth
、GetTrades
Funktion erhält Transaktionsdaten zurück. Anruft sie zu einem bestimmten Zeitpunkt auf der Zeitachse.GetTicker
,GetTrades
,GetDepth
,GetRecords
, wird nicht mehrmals die Zeit auf der Rückmessungszeitachse bewegen ((keine Sprung zum nächsten Marktdatenmoment auslösen)). Für einen der oben genannten Funktionen wird durch wiederholten Aufruf die Rückmessungszeit auf der Rückmessungszeitachse bewegt ((zu dem nächsten Marktdatenmoment springen)). Bei der Rückmessung ist es nicht ratsam, eine zu frühe Zeit zu wählen, da es möglicherweise zu frühe Zeiträume ohne Realdisk-Daten gibt.
Festplatten-Rückmessung unterstützt:
Die Funktion des FMZ Quantified Trading Platform Retesting System Parameter Optimierung wird bei der Retestung entsprechend den Optimierungsoptionen für die einzelnen Parameter angepasst, wie folgt:
Es werden Parameterkombinationen erzeugt, die über diese Parameterkombinationen hinweg überprüft werden (d. h. jede Parameterkombination wird einmal überprüft).
Ein Beispiel für die Einstellung von Optimierungsparametern auf der Wiederholungsseite:
Parameter-optimierte Modelle werden überprüft:
Auf der Seitenseite der Strategie-Editing-Seite kann unter "Analog-Rücksicht" ("Analog-Rücksicht"), unter "Rücksicht-System" ("Rücksicht-System") die Optionen "Rücksicht-Konfiguration" und "Rücksicht-Parameter" ("Rücksicht-Parameter") eingestellt werden. Auf der Seite "Rücksicht-System" werden die Bedingungen "Rücksicht-Zeitspanne", "Rücksicht-Handelsplatz", "Rücksicht-Zeitpunkt", "Rücksicht-Gebühr" ("Rücksicht-Parameter") und "Rücksicht-Parameter" ("Rücksicht-Parameter") eingestellt.
MitJavaScript
Zum Beispiel klicken Sie auf "Save Retrospective Setup to Source File":
JavaScript
/Python
/C++
/麦语言
Die Einstellungen für die Speicherung und Wiederholung der Quelldateien unterscheiden sich etwas:
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
Maisch:
(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)
SystemnutzungGET
Die Methode fordert eine benutzerdefinierte URL (eine öffentlich zugängliche Adresse) zur Wiederholung einer externen Datenquelle mit folgenden zusätzlichen Anforderungsparametern:
Parameter | Bedeutung | Erläuterung |
---|---|---|
Symbol | Name der Sorte | Beispiel: BTC_USD_OKCoin_EN |
Eid | Börsen | Zum Beispiel: OKCoin_EN |
rund | Preispräzision | Wenn wir 3 haben, dann ist der Preis in der zurückgegebenen Datenmenge multipliziert mit 1000. |
Verwandt | Mengenpräzision | Wenn wir 2 haben, dann ist die Zahl in der zurückgegebenen Datenmenge multipliziert mit 100 und integriert. |
Periode | Bar-Zyklus (milli Sekunden) | Zum Beispiel 60000 für eine Anfrage in Bar-Minuten. |
Tiefe | Tiefenbilder | 1-20 |
Handel | Ob Sie Daten aufteilen müssen | wahr/falsch |
von | Startzeit | Unix-Zeitfenster |
zu | Endzeit | Unix-Zeitfenster |
Bitte beachten Sie:
round与vround是为了避免网络传输过程中浮点数的精度丢失设计的两个参数,价格数据和成交量、订单量数据都采用整型传输。
Ein Beispiel für die Daten, die zusammengefügt wurden:
http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200
Das zurückgegebene Format muss eines der folgenden zwei Formate sein (systems auto-recognition):
Normaler Bar-Level-Rückmessung
{
"schema":["time","open","high","low","close","vol"],
"data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}
Tick-Level-Rücksichtsdaten (beinhaltet Tischtiefe-Informationen, Tiefe-Format ist [Preis, Menge], kann mehrere Tiefen haben, asks als Preissteigerung, bids als Preisrückgang)
{
"schema":["time","asks", "bids","trades","close","vol"],
"data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}
Erläuterung
Feld | Erläuterung |
---|---|
Schema | Geben Sie die Eigenschaften für die Linien in der Datamatrix an, unterscheiden Sie sie in Groß und Klein und beschränken Sie sich auf time, open, high, low, close, vol, asks, bids |
Daten | Eine Array, die nach dem Schema auf eine Datensammlung verweist |
Datenformate
Feld | Erläuterung |
---|---|
Anträge/Angebote | [Preis, Menge,...] |
Handel | [[Zeit, Richtung ((0: Kauf, 1: Verkauf), Preis, Menge],...] |
Die Zahlen für die Kapitalquote: Bei einer Binance-Futures-Rückmeldung werden beispielsweise zusätzliche Kapitalraten-Daten benötigt, die von einer benutzerdefinierten Datenquelle bereitgestellt werden müssen. Die Datenstruktur für die bei einer Binance-Futures-Rückmeldung angeforderten Kapitalraten ist z. B. wie folgt aufgeführt.
{
"detail": {},
"symbol": "futures_binance.eth_usdt.funding",
"schema": ["time", "open", "high", "low", "close", "vol"],
"data": [
[1582876800000, 25289, 25289, 25289, 25289, 0],
[1582905600000, 30522, 30522, 30522, 30522, 0],
[1582934400000, 40998, 40998, 40998, 40998, 0],
...
[1626652800000, 198, 198, 198, 198, 0],
[1626681600000, 691, 691, 691, 691, 0], // 相邻的周期间隔8小时
[1626710400000, 310, 310, 310, 310, 0], // 币安资金费率8小时更新一次,资金费率数据为什么为310?
[1626739200000, 310, 310, 310, 310, 0], // 因为和K线数据一样,为了避免网络传输过程中浮点数的精度丢,数据采用整型,所以需要根据round参数处理数据,处理后用于返回给回测系统的数据就为310
[1626768000000, -41610, -41610, -41610, -41610, 0], // 资金费率数据也可能为负值
[1626796800000, -5125, -5125, -5125, -5125, 0],
...
[1627977600000, 10000, 10000, 10000, 10000, 0]
]
}
Beispiele für Datenanfragen, die von Requestsystems ausgegeben werden, sind:
http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400
Ein Beispiel für eine benutzerdefinierte Datenquelle:
Datenquelle und Adresse angegeben:http://xxx.xx.x.xx:9090/data
Die Daten-Server werden mit Golang geschrieben:
package main
import (
"fmt"
"net/http"
"encoding/json"
)
func Handle (w http.ResponseWriter, r *http.Request) {
// e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
// r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
// response
defer func() {
// response data
/* e.g. data
{
"schema":["time","open","high","low","close","vol"],
"data":[
[1564315200000,9531300,9531300,9497060,9497060,787],
[1564316100000,9495160,9495160,9474260,9489460,338]
]
}
*/
ret := map[string]interface{}{
"schema" : []string{"time","open","high","low","close","vol"},
"data" : []interface{}{
[]int64{1564315200000,9531300,9531300,9497060,9497060,787},
[]int64{1564316100000,9495160,9495160,9474260,9489460,338},
},
}
b, _ := json.Marshal(ret)
w.Write(b)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
Die Teststrategie:JavaScript
Ein Beispiel:
/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/
function main() {
var ticker = exchange.GetTicker()
var records = exchange.GetRecords()
Log(ticker)
Log(records)
}
Die Daten, die im Retesting-System angepasst wurden, werden in folgenden Graphen dargestellt:
Die Strategie ist, Informationen zu drucken:
Die FMZ-Quantitätshandelsplattform ist offenJavaScript
Sprache undPython
Native Wiederholungs-Engine für Sprache, unterstützt Wiederholungs-EinstellungenUnteren K-Linien-Zyklus。
Schaltfläche für die Schaltfläche der Strategie-Bearbeitungsseite und die Schaltfläche für die Strategie-Rücksicht.
NutzungCtrl + ,
Schaltfläche, Umschalt- und Richtlinienbearbeitungsseite, gedrücktCtrl
Nach der Taste drücken,
Ich bin nicht derjenige, der das tut.
Schaltfläche für die Speicherung der Strategie
NutzungCtrl + s
Schaltfläche, Speicher-Richtlinie.
Schaltfläche, um die Wiederholung zu starten
NutzungCtrl + b
Schaltfläche, Start der Wiederholung.
Funktionsnamen | Erläuterung |
---|---|
main() |
Für die Eingabefunktion. |
onexit() |
Für die normalen Ausstiegs-Sweeptail-Funktionen, die eine maximale Ausführungszeit von 5 Minuten haben, kann nicht erklärt werden, wenn die Zeit überschritten wird, wird ein Fehler zurückgegebenUnterbrechenIch habe einen Fehler gemacht. |
onerror() |
Eine Funktion, die die Ausführung für einen Ausfall auslöst, hat eine maximale Ausführungszeit von 5 Minuten und kann nicht erklärt werden.Python Die Sprache.C++ Die in der Sprache geschriebene Politik unterstützt diese Funktion nicht. |
init() |
Für die Initiierung von Funktionen wird ein Politikprogramm zu Beginn der Ausführung automatisch zuerst aufgerufen, kann aber nicht erklärt werden. |
onerror()
Die Funktion.onerror()
Die Funktion wird nicht mehr ausgelöst.onexit()
Die Funktion.onexit()
Das Programm wird von den Benutzern durchgeführt, um die Schleusen zu bearbeiten, die bis zu 5 Minuten dauern.
function main(){
Log("开始运行, 5秒后停止,并执行扫尾函数!")
Sleep(1000 * 5)
}
// 扫尾函数实现
function onexit(){
var beginTime = new Date().getTime()
while(true){
var nowTime = new Date().getTime()
Log("程序停止倒计时..扫尾开始,已经过去:", (nowTime - beginTime) / 1000, "秒!")
Sleep(1000)
}
}
import time
def main():
Log("开始运行, 5秒后停止,并执行扫尾函数!")
Sleep(1000 * 5)
def onexit():
beginTime = time.time() * 1000
while True:
ts = time.time() * 1000
Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!")
Sleep(1000)
void main() {
Log("开始运行, 5秒后停止,并执行扫尾函数!");
Sleep(1000 * 5);
}
void onexit() {
auto beginTime = Unix() * 1000;
while(true) {
auto ts = Unix() * 1000;
Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!");
Sleep(1000);
}
}
init()
, Benutzer implementieren die Initiierungsfunktioninit()
Das Programm wird automatisch ausgeführt, wenn es ausgeführt wird.init()
Funktionen, die die in der Strategie entworfenen Initialisierungsaufgaben erledigen.
function main(){
Log("程序第一行代码执行!", "#FF0000")
Log("退出!")
}
// 初始化函数
function init(){
Log("初始化!")
}
def main():
Log("程序第一行代码执行!", "#FF0000")
Log("退出!")
def init():
Log("初始化!")
void main() {
Log("程序第一行代码执行!", "#FF0000");
Log("退出!");
}
void init() {
Log("初始化!");
}
onerror()
Das ist eine Art "Straum", wenn es etwas Abweichendes gibt.onerror()
Funktion ausgeführt, die nicht unterstützt wirdPython
、C++
Die Strategie der Sprache.
function main() {
var arr = []
Log(arr[6].Close)
}
function onerror() {
Log("错误")
}
# python不支持
// C++不支持
In derJavaScript
、Python
、C++
In einer Sprache, in der Strategien geschrieben werden, müssen sie in einem Strategie-Hauptzyklus aufgerufen werden.Sleep()
Die Funktion wird verwendet, um die Rücklaufgeschwindigkeit zu steuern. Die Funktion wird verwendet, um die Zeitintervalle für die Strategieanfragen auf dem Festplattenplatz zu steuern, um die Anfragefrequenz für den Zugriff auf die API-Schnittstelle der Börse zu steuern.
Ein Beispiel für ein grundlegendes Rahmenwerk für eine digitale Währungsstrategie:
function onTick(){
//在这里写策略逻辑,将会不断调用,例如打印行情信息
Log(exchange.GetTicker())
}
function main(){
while(true){
onTick()
// Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
Sleep(60000)
}
}
def onTick():
Log(exchange.GetTicker())
def main():
while True:
onTick()
Sleep(60000)
void onTick() {
Log(exchange.GetTicker());
}
void main() {
while(true) {
onTick();
Sleep(60000);
}
}
Das einfachste Beispiel: Wenn ich alle 1 Sekunde auf einer Börse einen Preis von 100 und eine Anzahl von Zahlungen von 1 anzeigen möchte, kann man das so schreiben:
function onTick(){
// 这个仅仅是例子,回测或者实盘会很快把资金全部用于下单,实盘请勿使用
exchange.Buy(100, 1)
}
function main(){
while(true){
onTick()
// 暂停多久可自定义,单位为毫秒,1秒等于1000毫秒
Sleep(1000)
}
}
def onTick():
exchange.Buy(100, 1)
def main():
while True:
onTick()
Sleep(1000)
void onTick() {
exchange.Buy(100, 1);
}
void main() {
while(true) {
onTick();
Sleep(1000);
}
}
Die Template-Klasse-Dateiist ein Code-Modul, der in der FMZ-Quantitätshandelsplattform wiederverwendbar ist und eine Kategorie von Strategiekoden ist.Die Template-Klasse-DateiEine Vorlage-Klasse-Datei wird in der Konto-Politik-Datei erstellt, in der sich der Erfinder derzeit bei der Quantitative-Trading-Plattform angemeldet hat.
JavaScript
Das Modell-Klassikum für Sprachen:
Python
Das Modell-Klassikum für Sprachen:
C++
Das Modell-Klassikum für Sprachen:
Exportfunktionen für die Template-Klassenlibrary Die Export-Funktion ist eine Interface-Funktion für die Template-Klasse und kann anhand der Politik der Template-Klasse aufgerufen werden. Die Export-Funktion wird in der Template-Klasse erklärt und die Implementierungsbeispiele sind wie folgt:
/*
-- 策略引用该模板以后直接用 $.Test() 调用此方法
-- main 函数在策略中不会触发, 只做为模板调试的入口
*/
$.Test = function() {
Log('Test')
}
function main() {
$.Test()
}
def Test():
Log("template call")
# 导出Test函数, 主策略可以通过ext.Test()调用
ext.Test = Test
// 策略引用该模板以后直接用 ext::Test() 调用此方法
void Test() {
Log("template call");
}
Parameter für die Template-Klassenlibrary Die Parameter der Template Bibliothek werden im Code der Template Bibliothek in Form von globalen Variablen verwendet.
Die Parameter für die Template-Klassenlibrary:
Code für die Template-Klasse:
$.SetParam1 = function(p1) {
param1 = p1
}
$.GetParam1 = function() {
Log("param1:", param1)
return param1
}
def SetParam1(p1):
global param1
param1 = p1
def GetParam1():
Log("param1:", param1)
return param1
ext.SetParam1 = SetParam1
ext.GetParam1 = GetParam1
void SetParam1(float p1) {
param1 = p1;
}
float GetParam1() {
Log("param1:", param1);
return param1;
}
AusführungenDie Template-Klasse-DateiDas ist ein Beispiel für den Strategic Code:
function main () {
Log("调用$.GetParam1:", $.GetParam1())
Log("调用$.SetParam1:", "#FF0000")
$.SetParam1(20)
Log("调用$.GetParam1:", $.GetParam1())
}
def main():
Log("调用ext.GetParam1:", ext.GetParam1())
Log("调用ext.SetParam1:", "#FF0000")
ext.SetParam1(20)
Log("调用ext.GetParam1:", ext.GetParam1())
void main() {
Log("调用ext::GetParam1:", ext::GetParam1());
Log("调用ext::SetParam1:", "#FF0000");
ext::SetParam1(20);
Log("调用ext::GetParam1:", ext::GetParam1());
}
Verweisen auf die Template-Klasse
Sie können die Politik speichern, nachdem Sie die Referenz in der Schablone "Policies Edit Page" ausgewählt haben.
exchange
Als ein Austauschobjekt betrachtet, ist es der erste Austauschobjekt, der standardmäßig in den Strategieparametern hinzugefügt wird. Alle Interaktionen mit dem Austausch werden über die Funktionen in diesem Objekt durchgeführt.
Überprüfen Sie das Hinzufügen von Exchange-Objekten
Anzeige von Objekten auf der Festplatte
Das hinzugefügte Austauschobjekt entspricht dem Code.exchange
Objekt:
function main() {
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
Das ist die gleiche Art von Speicherung.exchange
Die Arrays aller Exchange-Objekte können mehrere Exchange-Objekte enthalten.exchanges[0]
Das heißtexchange
。
Das hinzugefügte Austauschobjekt entspricht dem in der Strategiekode enthaltenenexchanges[0]
、exchanges[1]
、exchanges[2]
Ich habe mich in meinem eigenen Land niedergelassen.
function main() {
for(var i = 0; i < exchanges.length; i++) {
Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
}
}
def main():
for i in range(len(exchanges)):
Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
void main() {
for(int i = 0; i < exchanges.size(); i++) {
Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel());
}
}
Order
Die StrukturStatus
Eigenschaften.
Name der Konstante | Definition | Wert |
---|---|---|
Ausstehen des Auftrags | Unvollendet | 0 |
- Das ist nicht der Fall. | Das ist erledigt. | 1 |
- Das ist nicht der Fall. | Es wurde abgesagt. | 2 |
- Das ist nicht der Fall. | Status unbekannt (anderer Status) | 3 |
- Das ist nicht der Fall.Status kann aufgerufen werdenexchange.GetRawJSON()
Erhalten Sie Informationen über den ursprünglichen Bestellstatus, wenden Sie sich an die Dokumentation der Börse und sehen Sie sich die Beschreibung an.
Die Variablennamen in Tabellen können direkt in der Strategiecode verwendet werden undOrder
Die StrukturStatus
Eigenschaftsvergleiche, Beurteilung der Gleichheit, um den Bestellstatus zu bestimmen.Name der KonstanteEntsprechendeWertDie folgenden anderen konstanten Namen sind nicht mehr beschrieben.
Order
Die StrukturType
Eigenschaften.
Name der Konstante | Definition | Wert |
---|---|---|
Der Wert des Zertifikats wird in der Liste aufgeführt. | Bezahlung | 0 |
Der Wert des Zertifikats wird in der Liste aufgeführt. | Verkauf | 1 |
Position
Die StrukturType
Eigenschaften.
Name der Konstante | Definition | Erläuterung | Anwendbar | Wert |
---|---|---|---|---|
PD_LONG | Zeigt mehrere Positionen an | Futures für digitale Währungenexchange.SetDirection("closebuy") Setzen Sie die Position Richtung, die Position dieser Art zu platzieren |
Futures für digitale Währungen | 0 |
PD_SHORT | Zeigt die Position der Leerzeichen an | Futures für digitale Währungenexchange.SetDirection("closesell") Setzen Sie die Position Richtung, die Position dieser Art zu platzieren |
Futures für digitale Währungen | 1 |
Order
Die StrukturOffset
Eigenschaften.
Name der Konstante | Definition | Wert |
---|---|---|
Die Ausgabe der Ausgabe wird in der Liste aufgeführt. | Eröffnung von Bestellungen | 0 |
Die Ausgabe der Ausgabe wird von der Ausgabe der Ausgabe abgelehnt. | Bestellungen auf dem Lager | 1 |
In der Strategiecode werden die Strategieparameter, die auf der Strategieoberfläche gesetzt werden, in Form von globalen Variablen dargestellt.JavaScript
In der Sprache kann man direkt auf die Parameterwerte zugreifen oder sie ändern, die in der Policy-Schnittstelle festgelegt sind.Python
Benutzt, um globale Variablen in einer Funktion der Strategie zu ändernglobal
Schlüsselwörter.
Parameterart:
Variablen | Beschreibung | Anmerkungen | Typ | Standardwert | Erläuterung |
---|---|---|---|---|---|
Zahl | Zahlenart | Anmerkungen | Zahl (number) | 1 | Die C++-Strategie ist floppend. |
String | String | Anmerkungen | String (String) | Hallo FMZ. | Die Default-Werte werden ohne Anführungszeichen eingegeben und als String behandelt. |
Verknüpfung | Ziehen | Anmerkungen | Zieh-unter-Rahmen ((selected)) | 1|2|3 | Die combox-Variable selbst ist ein Zahlenwert, der den Zielführer für die Auswahl des Abzugsteuerungsteils darstellt, wobei der erste Abzugsteuerungsteil 1 enthält, dessen Indexwert 0 ist, und so weiter. |
Boole | Auswahlmöglichkeiten | Anmerkungen | Die Bulle (true/false) | - Das stimmt. | Wenn es ausgewählt wird, ist die Variable bool wahr, wenn es nicht ausgewählt wird, ist die Variable bool falsch. |
secretString | Verschlüsselungsstränge | Anmerkungen | Verschlüsselungsstring | Passwort | Die Verwendung ist die gleiche wie bei einem String. Die verschlüsselte String wird verschlüsselt gesendet und wird nicht mit offenem Text übertragen. |
number
、string
、combox
、bool
、secretString
。Die Parameter hängen von den folgenden Einstellungen ab:
Sie können einen Parameter so einstellen, dass ein anderer Parameter auf der Grundlage dieser Parameterwahl angezeigt und verborgen wird.numberA
, ist ein Zahlentyp.numberA
Das ist ein Parameter:isShowA
Die falsche Entscheidung von (Bull-Typen)numberA
Sie müssen sich anpassen, ob Sie sich an die Seite wenden oder nicht.numberA
Die Variablen werden in den Interface-Parametern so eingestellt:numberA@isShowA
。
So wird nicht geklärt.isShowA
Die ParameternumberA
Die Parameter sind versteckt. Für die Parameter des Types des Dropdown-Controllers hängen die Parameter teilweise davon ab, ob sie einer Option des Dropdowns entsprechen.IndexwerteIch bin nicht derjenige, der das sagt.isShowA
Als Beispiel für Parameter kann man bei Parameter-Variablen schreiben:numberA@combox==2
。numberA
Die Parameter basieren aufcombox
Ob die Parameter für die dritte Option angezeigt oder versteckt werden (Index 0 für die erste Option, Index 1 für die zweite Option, Index 2 für die dritte Option).
Strategie-Interface-Parameter, Interaktionssteuerelemente, Parametergruppen in Templates:
Wir fügen nur die Beschreibung der Parameter an, mit denen wir anfangen zu gruppieren.(?第一组)
Das ist ein Beispiel, wie es in der folgenden Abbildung zu sehen ist.
Die Strategie wird mit folgenden Parametern zusammengefasst:
Der Parameter wird als Default gespeichert:
Die Politikparameter sind wie gezeigt, wenn Sie den Standardwert der Politikparameter beim Rückruf speichern möchten, können Sie darauf klicken, nachdem Sie die Politikparameter geändert haben.保存回测设置
Die Schaltfläche.
Die eingestellten Politikparameter können in Codeform in der Politik gespeichert werden:
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
Einige Funktionen werden mit der ursprünglichen Funktion versehen, die bei einem Aufruf angefordert wird.JSON
Die Daten, die ursprünglichJSON
Die Daten werden auf die zurückgegebenen Objekte gespeichert.Info
In der Attribute.......................................Info
Eigenschaften, hier sind die wichtigsten Eigenschaften der einzelnen Datenstrukturen beschrieben.
Erhalten Sie alle Transaktionsgeschichten (ohne Ihre eigene) vonexchange.GetTrades()
Die Funktion gibt zurück.
{
Id : 9585306, // 交易记录ID,如果交易所接口没有提供订单ID则使用时间戳填充
Time : 1567736576000, // 时间(Unix timestamp 毫秒)
Price : 1000, // 价格
Amount : 1, // 数量
Type : 0 // 订单类型,参考常量里的订单类型,0即为ORDER_TYPE_BUY,ORDER_TYPE_BUY的值为0
}
Der Markt wird vonexchange.GetTicker()
Die Funktion gibt zurück.
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
High : 1000, // 最高价,如果交易所接口没有提供24小时最高价则使用卖一价格填充
Low : 500, // 最低价,如果交易所接口没有提供24小时最低价则使用买一价格填充
Sell : 900, // 卖一价
Buy : 899, // 买一价
Last : 900, // 最后成交价
Volume : 10000000, // 最近成交量,原则上现货成交量单位为交易币种(baseCurrency),期货成交量单位为合约张数。如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
Time : 1567736576000 // 毫秒级别时间戳
}
StandardOHLC
Struktur, die für das Zeichnen von K-Linien und für die Berechnung von Indikatoren verwendet wird.exchange.GetRecords()
Die Funktion kehrt die Array zurück, die diese Struktur hat.Record
Die Struktur stellt eine K-Linien-Säule dar, also eine K-Line.BAR
。Record
Einer davonTime
Für diese K-Säulen-Zyklus-Anfangszeit.
{
Time : 1567736576000, // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
Open : 1000, // 开盘价
High : 1500, // 最高价
Low : 900, // 最低价
Close : 1200, // 收盘价
Volume : 1000000 // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
Die Bestellstruktur kann vonexchange.GetOrder()
、exchange.GetOrders()
Die Funktion gibt zurück.exchange.GetOrders()
Die zurückgegebene Array ist die Array der Struktur oder die leere Array, wenn keineBestellungen, die noch nicht abgeschlossen sindZurück[]
, das ist eine leere Array) ◄
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
Id : 123456, // 交易单唯一标识
Price : 1000, // 下单价格,注意市价单的该属性可能为0或者-1
Amount : 10, // 下单数量,注意市价单的该属性可能为金额并非币数
DealAmount : 10, // 成交数量,如果交易所接口不提供该数据则可能使用0填充
AvgPrice : 1000, // 成交均价,注意有些交易所不提供该数据。不提供、也无法计算得出的情况该属性设置为0
Status : 1, // 订单状态,参考常量里的订单状态,例如:ORDER_STATE_CLOSED
Type : 0, // 订单类型,参考常量里的订单类型,例如:ORDER_TYPE_BUY
Offset : 0 // 数字货币期货的订单数据中订单的开平仓方向。ORDER_OFFSET_OPEN为开仓方向,ORDER_OFFSET_CLOSE为平仓方向
ContractType : "" // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
Der Markt ist tief.exchange.GetDepth()
Die Funktion kehrt in die Datenstruktur zurückAngebote、Er fragt.Datenstruktur der Elemente in der Array.
{
Price : 1000, // 价格
Amount : 1 // 数量
}
Die Markttiefe wird vonexchange.GetDepth()
Die Funktion gibt zurück.
{
Asks : [...], // 卖单数组,MarketOrder数组,按价格从低向高排序
Bids : [...], // 买单数组,MarketOrder数组,按价格从高向低排序
Time : 1567736576000 // 毫秒级别时间戳
}
Kontoinformationen vonexchange.GetAccount()
Die Funktion gibt zurück. Die Daten in der zurückgegebenen Struktur beziehen sich auf die aktuell eingestellten Paare und den eingestellten Vertragskode.
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
Balance : 1000, // 可用计价币数量,现货中如果交易对是BTC_USDT,Balance指的是当前可用USDT数量。U本位期货合约中Balance指的是可用保证金USDT的数量
FrozenBalance : 0, // Balance表示的资产用于挂单的冻结数量
Stocks : 1, // 可用交易币数量,现货中如果交易对是BTC_USDT,Stocks指的是当前可用BTC数量。币本位期货合约中Stocks指的是可用保证金的币(baseCurrency)的数量
FrozenStocks : 0 // Stocks表示的资产用于挂单的冻结数量
}
Die Informationen über Positionen, die in Futures gehalten werden, werden vonexchange.GetPosition()
Die Funktion kommt hierher.Position
Die StrukturArithmetische Gruppen。
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
MarginLevel : 10, // 持仓杆杠大小,如果交易所接口没有提供该数据则通过计算填充,可能会有误差
Amount : 100, // 持仓量,持仓合约张数,通常是正整数。注意每个交易所的合约乘数、价值等合约规格可能不一样,下单规则也可能不一样,例如币安合约可以0.1张下单
FrozenAmount : 0, // 仓位冻结量,用于平仓挂单时的临时冻结仓位数量
Price : 10000, // 持仓均价,原则上该属性为仓位总体的平均价格(不参与结算),如果交易所接口没有提供该数据则用交易所接口现有的持仓均价填充(参与结算)
Profit : 0, // 持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口没有提供该数据则用交易所接口其它盈亏数据填充,盈亏数值的单位和当前合约保证金的单位相同
Type : 0, // PD_LONG为多头仓位,PD_SHORT为空头仓位
ContractType : "quarter", // 合约代码,具体可以参看SetContractType函数描述中传入的参数
Margin : 1 // 仓位占用的保证金,如果交易所接口没有提供该数据则使用0填充
}
Es ist wichtig zu beachten, dass die digitalen Währungs-Futures nicht nur für die digitalen Währungen verwendet werden, sondern auch für die digitalen Währungen.exchange.GetPosition()
Die Funktion wird zurückgegebenPosition
Struktur-Array.FrozenAmount
、Profit
、Margin
Eigenschaften, weil die Daten, die von den Börsen bereitgestellt werden, nicht einheitlich sind, werden von verschiedenen Börsenobjekten aufgerufenexchange.GetPosition()
Die Definition der Daten, die bei der Schnittstelle zurückgegeben werden, kann unterschiedlich sein. Zum Beispiel haben einige Börsen keine Position in den Lagerdaten eingefroren.FrozenAmount
Für 0; kann verwendet werden, wenn bestimmte Daten berechnet werden müssenInfo
Die Analyse der ursprünglichen Daten in der Eigenschaft.
Marktinformationen über Handelssorten werden vonexchange.GetMarkets()
Die Funktion gibt das zurück.Market
Die StrukturWörterbuch。
{
Symbol : "btcusdt", // 该交易品种在交易所的原始名称
BaseAsset : "BTC", // baseCurrency 交易币,统一大写
QuoteAsset : "USDT", // quoteCurrency 计价币,统一大写
TickSize : 0.01, // 价格最小变动数值
AmountSize : 0.01, // 下单量最小变动数值
PricePrecision : 2, // 价格精度,表示价格精确到2位小数
AmountPrecision : 3, // 下单量精度,表示下单量精确到3位小数
MinQty : 0.001, // 最小下单量
MaxQty : 1000, // 最大下单量
MinNotional : 5, // 最小下单金额
MaxNotional : 9999999, // 最大下单金额
CtVal : 100, // 合约价值
Info : {...} // 交易所该品种的原始数据
}
Da die Unterstützung von Marktinformationsdaten bei den verschiedenen Börsen unterschiedlich ist, werden die nicht unterstützten Felder ignoriert. Alle oben genannten Datenfelder stammen aus den Rohdaten der Interface der Börse.Info
Der Inhalt des Feldes.
Version()
, die aktuelle Version des Systems zurückgibt.
Sleep(Millisecond)
, eine Ruhezustandfunktion, die das Programm für eine Weile pausiert.Millisecond
Als Zahlenwerttyp. Die Parameter sind Millisekunden, z. B.:Sleep(1000)
Ein Sekunde Ruhe.
Unterstützt Operationen mit einer Ruhezustandzeit von weniger als 1 Millisekunde, z. B. EinstellungenSleep(0.1)
◎ Unterstützt die minimale Parameter:0.000001
, Nanosekunden-Schlaf. 1 Nanosekunde entspricht1e-6
Ich bin nicht derjenige, der das sagt.
Bitte beachten:
In GebrauchPython
Bei der Erstellung von Sprachstrategien sollten Bewegungen wie Abstand, Wartezeit und Abfragen verwendet werden.Sleep(Millisecond)
Funktionen. Nicht empfohlenPython
Dietime
Die Küchetime.sleep(second)
Funktionen. Weil sie in Strategien verwendet werdentime.sleep(second)
Eine Funktion, die bei der Wiederholung die Politiker tatsächlich auf eine bestimmte Anzahl von Sekunden warten lässt.second
Die Parameter werden für die Anzahl der Sekunden festgelegt, in denen sie unterbrochen werden), was zu einer sehr langsamen Wiederholung der Strategie führt.
IsVirtual()
, um zu beurteilen, ob die aktuelle Strategie für die analoge Rückprüfung ausgeführt wird.
Analog-Rückruf-Zustand zurücktrue
Die Echtplatte kehrt zurück.false
。
Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body)
, Senden einer E-Mail-Funktion << Parameterwert: Alle Parameter sind String-Typen << Rückgabewert: Bull-Typ, Senden erfolgreich zurückgegebentrue
。
smtpServer
Um die E-Mails zu versendensmtp
Das ist nicht wahr.smtpUsername
Ich habe die E-Mail-Accounts nicht benutzt.smtpPassword
Das SMTP-Code für die E-Mail-Box (nicht das Login-Code für die E-Mail-Box)mailTo
Ich habe die E-Mail-Adresse von meinem Freund und ich habe die E-Mail-Adresse von meinem Freund und ich habe die E-Mail-Adresse von meinem Freund.title
Die Überschrift der E-Mails, die gesendet werden, wird von der Website des E-Mail-Nachrichtendienstes verbreitet.body
Der Inhalt der E-Mails, zum Beispiel:
function main(){
Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
- Ich weiß nicht.Es gibt ein Problem, ob die _C_Funktion immer wiederholt wird oder nur einmal.
Ich habe dich nicht gesehen._C ((function, args...) ist das Default 3s? Kann man das Default ändern und direkt _CDelay ((1000) vor _C ((function, args...) setzen?
LunchzeitCluster: Wenn Sie 1000 Roboter gleichzeitig und ohne Stress erstellen, können Sie mehrere Administratoren erstellen, um Aufgaben zu verteilen. Gibt es Codebeispiele, wie man Clusters erstellt?
Wir sind hier.Log ((talib.help (('MACD')); kann nur unter js verwendet werden, Python hat keine talib.help-Attribute...
Czz140Was ist der Unterschied zwischen der _C ((function, args...) und der Sleep-Funktion, die ich für eine Wiederholung halte?
3263243ySetErrorFilter: Wie entfernt man einen Fehlerfilter, ohne Fehlermeldungen zu filtern?
QQ47898077Wenn Sie eine Drittanbieter-Bibliothek nutzen möchten, gibt es eine Möglichkeit?
QQ47898077Was sollte die Stammklasse ausfüllen, wenn man eine neue Klasse erben möchte, die von einem Börsenobjekt definiert wird?
EtherGibt es ein lokales Debugging-Tool?
ZürichWas ist mit exange.IO?
ZürichWarum ist die Funktion sell in Grau? Ist die Funktion nicht mehr verfügbar?
ZürichWarum ist die Funktion sell in Grau? Ist die Funktion nicht mehr verfügbar?
ZürichIch habe keine Sprache, haha, aber ich möchte fragen, ob es die Unterstützung von es6 hat.
ZürichIch habe keine Sprache, haha, aber ich möchte fragen, ob es die Unterstützung von es6 hat.
Don.Wie schreibt man die Mittellinie von Volumen?
SchildkröteWas gibt es zurück, wenn es nicht klappt, den Marktpreis zu kaufen?
Der Mann von NingDie neue Schrift sieht gut aus.
FlügelDas Testnetz von Bitmex (testnet.bitmex.com) verfügt ebenfalls über eine API-Schnittstelle, jedoch können die Börsen derzeit nur die Bitmex-Haupthandelsstation auswählen. Die API-Dokumentation ist unter https://testnet.bitmex.com/app/apiOverview Wie unterstützen Sie uns?
- Ich weiß nicht.Der Preis für die Produkte wird von den US-amerikanischen Behörden veranschlagt. Log (('ok Futures Estimated Delivery Price', ret1); https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png Wenn Sie die Funktionsoberfläche anderer Börsen aufrufen und einen Fehler melden, warum?
allenfrostlineWas ist der Unterschied zwischen realTicker und Ticker? In jüngster Zeit wurde die Strategie für die Umschreibung von Profit-Suites neu geschrieben und beide erscheinen gleichzeitig, aber die erste API scheint keine Erwähnung zu haben.
VisionenHallo, als Python-Entwickler, was glaubst du, dass deine API-Dokumentation schreibt?
allenfrostlineGetAccount: [EAPI:Rate limit exceeded] Ich möchte wissen, wie man das löst?
Zjx2314StochRSI wird nicht unterstützt, ob es so schnell wie möglich hinzugefügt werden kann
YhfggWenn die Python-Politik auf der Festplatte ist, ist das Skript auf dem eigenen Ali Cloud-Server oder im Botvs-Cluster?
YhfggWelche Version von Python benutzt man?
Schon gutDie Definition von GetFee sollte sein, dass sie eine Fee-Struktur zurückgibt.
ZkwapWie kann man Talib mit js aufrufen?
YhfggAnforderung der python-Dokumentation
- Das ist nicht wahr.Kann man einen schwarzen Code-Hintergrund für Strategie-Editoren verwenden? Weiße Augen, schriftliche Nachtcode, leicht kurzsichtig
Don.Wie kann ich die Zusammenfassung in der Bots-Wechat-Push einstellen?
ZahlreicheKann man in der Order-Struktur ein Feld mit einem gleichen Transaktionspreis hinzufügen?
Kleine KleinigkeitGetOrders: Erhält alle unvollendeten Bestellungen, gibt eine Arraystruktur an, die in China Bitcoin-ETH-Trading, nur die letzten 10 zurückgibt. Hier gibt es eine Funktion, die alle unvollendeten Bestellungen in China Bitcoin ETH zurückgibt, was bedeutet, dass andere Plattformen alle mit GetOrders zurückgeben können.
YhfggDie mathematischen Funktionen, die für die statistische Wahrscheinlichkeit verwendet werden müssen, wo kommen sie her?
Sieh nach.Was bedeutet der Wert, den die Funktion $.Cross ((x, y)) zurückgibt?
Meine Mutter nennt michDas LogReset räumt alle Logs aus und kann einen Zahlenparameter verwenden, um die Anzahl der reservierten Einträge festzulegen. Wie löscht man die letzten Tage?
- Ich weiß nicht.Die CORRE-Funktion in talib scheint nicht übernommen worden zu sein, oder ist sie entfallen?
Die armen Berge von LiuyangEs scheint, dass es keine Indikatorreferenz-Funktion gibt!
Kleine und kleineWie kann ich die Zeit der K-Zeile lesen, um sie in die Zeit der Gegenwart zu übersetzen?
Kleine und kleineWie kann man Zahlen aus Arrays entfernen, wenn ich mit records.remove ((records[0]) arbeite?
SchlangeWie kann man ATR für die Tages-K-Linie aufrufen?
SchlangeWie kann man ATR für die Tages-K-Linie aufrufen?
57278863Lernen Sie, wie man traditionelle Futures zum Preis und zum Auftrag bekommt, leider ist die Basis dünn
KirinDas ist ein Beispiel für traditionelle Futures.
Kleine und kleineZero, kannst du ein Beispiel für traditionelle Futures schreiben?
Kleine und kleineWie kann ich den Zustand von mehreren Leerzeichen gleichzeitig ausdrucken, wie kann ich den Zustand von mehreren Leerzeichen ausdrucken, wie kann ich den Zustand von mehreren Leerzeichen und Leerzeichen ausdrucken, und wie kann ich den Zustand von mehreren Leerzeichen und Leerzeichen erhalten?
- Ich weiß nicht.Kann eine Futures-Börse mit GetTicker (() Märkte abrufen, die diese Art von Vertragsmärkten ((in der Woche, in der nächsten Woche...) zurückgeben?
VerkauftWas ist der StochRSI, kann man dazu hinzufügen?
MoxCancelOrder ((orderId) Kannseln Sie eine Bestellung nach der Bestellnummer, geben Sie true oder false zurück, und fragen Sie true= Die Zelle wurde erfolgreich abgesagt, richtig?
Mox_G(K, V) Speicherbare globalen Wörterbücher Diese Methode speichert globalen Variablen, die für die Datenabteilung zwischen verschiedenen Strategien verwendet werden können.
FlustigDie Schlagzeile
NullSie können das Ertragsprotokoll mit LogProfitReset neu einstellen. Die Geschichte auf den vorherigen Ertragsdiagrammen ist nicht mehr vorhanden.
ZyKann man die EA direkt kopieren?
- Ich weiß.Ich finde die Plattform großartig.
Kleine und kleineWas ist das für eine Sprache, gibt es eine Lernquelle?
jxhbtcDatenfehler eine Woche lang, kein Roboter verbunden
Das ist alles.Der Indexbank TA, ist es nur eine Berechnung für den Verkaufspreis?
BtcrobotHallo, Welt.
Kleine TräumeDie _C-Funktion versucht es ohne Gedanken, bis sie erfolgreich ist.
Kleine TräumeDie Talib-Bibliothek für Python muss installiert werden. https://www.botvs.com/bbs-topic/669 kann in diesem Beitrag besucht werden.
Kleine TräumeSleep ist die Anzahl von Millisekunden, in denen ein Programm nichts tut und wartet, bis die Parameter gesetzt sind, und _C ist die Anzahl der Millisekunden, in denen die Funktion, die die Parameter übermittelt hat, erneut aufgerufen wird.
Kleine TräumeJS wird ohne Vererbung direkt in den Objekt eingebunden.
Kleine TräumeEiner der wichtigsten Funktionen ist die Verwendung von Remote Debugs.
Kleine TräumeIch habe eine Frage, die ich mir nicht stellen kann.
Kleine TräumeIn der API-Dokumentation bedeutet Grau, dass die Funktion ohne zu viele Ausführungen erscheint.
Kleine TräumeES6 ist momentan nicht unterstützt ^^
Kleine TräumeIch bin in der Gruppe QQ, beschreibe die Frage und ich werde sie beantworten ^^
Kleine TräumeDie Anzeige wird direkt einen Fehler zurückgeben und keine Bestellung mehr erfolgen (in Wirklichkeit ist es ein Kauf, nicht genug Geld!).
SchildkröteWie wird OKCoin zurückgegeben, wenn die Anzahl der gekauften Münzen die Menge der gehaltenen Münzen übersteigt?
Kleine TräumeIch habe eine Frage an die Börse gestellt: "Welche Börse gibt es, an der ich eine Bestellnummer bei OK Futures zurückgeben kann?"
NullEs wird bereits unterstützt, dass Transaktionspaare beim Laufen gewechselt werden können, und es ist erforderlich, den neuesten Host herunterzuladen. Unterstützt wird Bter/Poloniex Details API-Dokumentation Transaktionsfunktion Tabellen Beschreibung unten ((Freien Sie den Browser-Cache und aktualisieren Sie, wenn Sie es nicht sehen können)
Kleine TräumeQQ, ich helfe dir, deine Fragen zu beantworten.
BerufstätigeIch setze die IPs der Hosting-Plattformen ein, um eine weiße Liste zu erstellen.
Kleine TräumeDas ist ein unterer Link, der nicht aufgebaut wurde. Der Server reagiert nicht.
BerufstätigeDas ist peinlich... Ich kann die Strategien auswechseln, die in der Bitcoin-Ära fehlten, und GetAccount kann nicht auf GetAccount zugreifen: Post http://api.btc38.com/v1/getMyBalance.php: read tcp 192.168.0.227:58596->211.149.148.144:80: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 2017-05-23 21:08:24 Bitcoin-Zeitfehler GetAccount: timeout 2017-05-23 21:08:02 Bitcoin-Zeitalter Fehler GetAccount: timeout 2017-05-23 21:07:40 Bitcoin-Zeit Fehler GetAccount: timeout 2017-05-23 21:07:20 Wiederaufnahme Ist es ein Problem mit der IP-Whitelist?
Kleine TräumeDer Server der Börse reagierte nicht, das TCP-Protokoll wurde nicht eingerichtet und die drei Handschläge wurden nicht durchgeführt.
BerufstätigeEine Verbindungsaufgabe scheiterte, weil die verbundene Partei nicht richtig nach einer Zeit reagierte, und die Verbindungsaufgabe scheiterte, weil die verbundene Partei nicht richtig reagierte.
Kleine TräumeHallo! Hier geht es um die Funktion exchange.IO ((
BerufstätigeEin Anschlussversuch scheiterte, weil die angeschlossene Partei nach einer gewissen Zeit nicht richtig reagierte.
BerufstätigeDie Zeit der Bitcoins unterstützt sie nicht?
Kleine TräumeSiehe auch: https://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png Das ist nicht schlecht.
Der Mann von NingZum Beispiel möchte ich einen poloniex-Vollwährungstransaktion durchführen, aber es gibt nur ein paar Währungen, die von BOTvs unterstützt werden, und exchange.IO scheint das P-Netz nicht zu unterstützen.
Kleine TräumeDas kann man mit exchange.IO anrufen.
Der Mann von NingWas ist mit einer API, die einen Account verifizieren muss?
Kleine TräumeWenn keine API zur Authentifizierung eines Kontos benötigt wird, kann httpQuery verwendet werden (siehe BotVS-Dokumentation für weitere Informationen), die tatsächliche Transaktions-API benötigt Zugriff.
Kleine TräumeDie API-Parameter können mit HttpQuery übermittelt werden: https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd. Für Börsen-APIs ohne Authentifizierung von Konten müssen Sie die HttpQuery-Funktion direkt auf der Plattform verwenden. Der Post: https://www.botvs.com/bbs-topic/850
VisionenIch hoffe, dass die API-Dokumentation perfekt ist.
Kleine TräumeWo ist die realTicker-API zu sehen?
Kleine TräumeSiehe auch: https://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png Die API-Dokumentation ist in der JavaScript-Sprache beschrieben, die Python-Version beschrieben, die oben auf der Chat-Community-Seite angezeigt wird.
NullHallo, danke für die Tipps, die API-Dokumentation wird gerade neu erstellt.
Kleine TräumeHallo ~ zeigt, dass die Zugriffsfrequenz über die Grenzen hinaus ist. https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png Ist die Sleep-Funktion in der Strategie eingesetzt worden? Diese 1000 ist eine Sekunde Pause pro Runde, die selbst eingestellt werden kann, um die Häufigkeit des Zugriffs auf die API zu steuern, da einige Börsen eine maximale Zugriffsbeschränkung festlegen, die den Zugriff verweigert und die IP-Adresse sperrt.
Kleine TräumeSiehe auch: https://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png Ich persönlich habe geschrieben, dass der bereits verglichenen OK-STOCHRSI-Indikator einverstanden ist, dass die Geschwindigkeit etwas langsamer ist und vorübergehend optimiert werden kann.
NullSie können selbst wählen, ob Sie die Überprüfung auf dem von botvs bereitgestellten Server oder auf dem Server Ihres Hosts durchführen möchten.
Kleine TräumeIch habe das Gefühl, dass ich es nicht kann.
Kleine TräumeJetzt können Sie den Hintergrundstil selbst konfigurieren.
Kleine TräumeDie python-Dokumentation wird geschrieben.
Kleine TräumeIch bin der Meinung, dass es eine gute Idee ist.
Hzzgood48 https://www.botvs.com/bbs-topic/276
Kleine TräumeEs scheint ein Beispiel auf Strategie Square zu geben: https://www.botvs.com/strategy/15098
NullDer Zugriff auf die AvergPrice-Attribute von Order, die von den Börsen unterstützt wird, kann, und die nicht unterstützte Börse wird die Attribute immer 0 haben.
YhfggWie zitiert man in einer Drittanbieter-Buchstelle?
NullWenn mathjs das nicht kann, kann es nur nach einer Drittanbieter-Bibliothek suchen, um diese zu kopieren und zu importieren.
Kleine TräumeIch bin nicht sehr freundlich, es gibt Probleme in der Gruppe, ich kann mich - ich bin im Prinzip online - M- machen.
Sieh nach.Ich danke Ihnen.
Kleine TräumeSie können sich die Anmerkungen zu den Codeanalysen der Kryptowährungs-Trading-Klasse anschauen, in denen die Anmerkungen zu der $.Cross-Funktion enthalten sind.
NullEs ist nicht möglich, die neuesten zu löschen, sondern nur die neuesten zu behalten.
KirinUm jede Position mit Position[i] zu erhalten, ist Position eine Array.
Der Mann von NingÜbermittlung von Daten über das System.
KirinMein traditionelles Futures ist immer das GetAccount: not login, "Passwort nicht falsch eingegeben, also nicht eingeloggt".
NullDer Standard ist Woche, um den angegebenen SetContractType zu erhalten.
NullWir haben gerade gesehen, dass das True den Wert der Rückgabe für die Aktion der Stornierung der Bestellung ist, die die Börse zurückgegeben hat, aber die tatsächliche Stornierung ist nicht storniert, abhängig davon, wie sie intern behandelt wird.
Mox3q
NullNein, sondern sie sind abgeschnitten.
ZuanxuanNatürlich nicht, das ist MT4-Exklusivität.
NullJavascript-Informationen gibt es überall im Internet.
VerkauftSind deine Probleme gelöst?
NullDie meisten Daten können entweder direkt als Rekorde oder als reine Preissätze übertragen werden.