Zeitreihen beziehen sich auf die Datenreihen, die in einem kontinuierlichen Zeitintervall von gleicher Zeit erhalten werden. Bei quantitativen Anlagen spiegeln sich diese Daten hauptsächlich im Preis und in der Bewegung der Datenpunkte des verfolgten Anlageobjekts wider. Zum Beispiel für Aktienkurse können sich die Daten der Zeitreihen, die regelmäßig innerhalb eines bestimmten Zeitraums aufgezeichnet werden, auf das folgende Diagramm beziehen, das den Lesern ein klareres Verständnis gibt:
Wie Sie sehen können, ist das Datum auf der X-Achse und der Preis auf der Y-Achse angezeigt. In diesem Fall bedeutet
Wenn Sie jedoch Zeitreihendaten verwenden, sehen Sie häufig mehr als nur diese Art von Daten, die nur zwei Spalten enthalten: Datum und Preis. In den meisten Fällen verwenden Sie fünf Spalten von Daten: Datenperiode, Eröffnungspreis, höchster Preis, niedrigster Preis und Schlusskurs. Dies bedeutet, dass, wenn Ihre Datenperiode auf das tägliche Niveau gesetzt ist, sich die Preisänderungen des Tages in den Daten dieser Zeitreihe widerspiegeln.
Tick-Daten sind die detaillierteste Handelsdatenstruktur in der Börse. Es handelt sich auch um eine erweiterte Form der oben genannten Zeitreihendaten, darunter: Eröffnungspreis, höchster Preis, niedrigster Preis, letzter Preis, Handelsmenge und Umsatz. Wenn die Transaktionsdaten mit einem Fluss verglichen werden, sind die Tick-Daten die Daten des Flusses an einem bestimmten Querschnitt.
Jede Aktion der ausländischen Börsen wird in Echtzeit auf den Markt geschoben, während die inländische Börse zweimal pro Sekunde überprüft wird. Wenn es in diesem Zeitraum Aktionen gibt, wird ein Snapshot generiert und geschoben. Im Vergleich dazu kann Datenpush bestenfalls nur als OnTime betrachtet werden, nicht als OnTick.
Alle Codes und Zeitreihen-Datenerfassung in diesem Tutorial werden auf der FMZ Quant-Plattform abgeschlossen.
Obwohl die inländischen Tick-Daten kein echter Tick sind, können sie unendlich nahe an und die Realität zumindest wiederherstellen, indem diese Daten für Backtesting verwendet werden. Jeder Tick zeigt die wichtigsten Parameter des Produkts auf dem Markt zu diesem Zeitpunkt an, und unser Code im echten Bot wird nach dem theoretischen Tick von zweimal pro Sekunde berechnet.
Nicht nur das, auf dem FMZ Quant kann auch wenn die Daten mit einer 1-Stunden-Periode geladen werden, die Datengranularität immer noch angepasst werden, z. B. die Datengranularität auf 1 Minute anpassen. In diesem Moment besteht die 1-Stunden-K-Linie aus 1-Minuten-Daten. Natürlich besteht die 1-Stunden-K-Linie aus 1-Minuten-Daten. Je kleiner die Granularität, desto höher ist die Präzision. Was noch leistungsfähiger ist, ist, dass, wenn Sie die Daten auf einen echten Bot-Tick umschalten, Sie die echte Bot-Umgebung nahtlos wiederherstellen können. Das heißt, die realen Daten der Tick Exchange von zweimal pro Sekunde.
Jetzt haben Sie die grundlegenden Konzepte gelernt, die Sie verstehen müssen, um dieses Tutorial abzuschließen.
Bessere Werkzeuge machen gute Arbeit. Wir müssen zunächst einen Docker auf der FMZ Quant-Plattform bereitstellen. In Bezug auf das Konzept eines Dockers können sich Leser mit Programmiererfahrung es sich als offiziell verpacktes Docker-System vorstellen, das die öffentlichen API-Schnittstellen verschiedener Mainstream-Börsen und die technischen Details des Strategie-Schreibens und Backtestings eingekapselt hat. Die ursprüngliche Absicht der Einrichtung dieses Systems besteht darin, quantitative Trader beim Einsatz der FMZ Quant-Plattform auf Strategie-Schreiben und -Design zu konzentrieren. Diese technischen Details werden Strategie-Autoren in einer eingekapselten Formel präsentiert, um ihnen viel Zeit und Mühe zu sparen.
Methode A: Benutzer können Server selbst mieten oder kaufen und auf verschiedenen Cloud-Computing-Plattformen wie AWS, Alibaba Cloud, Digital Ocean und Google Cloud bereitstellen. Der Vorteil ist, dass sowohl die Strategiesicherheit als auch die Systemsicherheit gewährleistet sind. Für die FMZ Quant-Plattform werden Benutzer ermutigt, diese Methode zu verwenden. Die verteilte Bereitstellung beseitigt die versteckte Gefahr von Serverangriffen (ob es sich um den Kunden oder die Plattform selbst handelt).
Methode B: Verwenden Sie den öffentlichen Server der FMZ Quant-Plattform für die Bereitstellung, die Plattform bietet vier Standorte für die Bereitstellung in Hongkong, Singapur, Japan und den östlichen USA. Die Benutzer können entsprechend dem Standort der Börse, an der sie handeln möchten, und dem Prinzip der Nähe bereitstellen. Der Vorteil dieses Aspektes besteht darin, dass es einfach und einfach mit einem Klick abgeschlossen werden kann, was besonders für Anfänger geeignet ist. Es ist nicht notwendig, viele Dinge über den Kauf von Linux-Servern zu wissen, und es spart auch Zeit und Energie beim Erlernen von Linux-Befehlen. Der Preis ist relativ günstig. Für Benutzer mit geringen Mitteln empfiehlt die Plattform die Verwendung dieser Bereitstellungsmethode.
Für Anfänger wird in diesem Artikel Methode B verwendet.
Die spezifischen Vorgänge sind:FMZ.COM, klicken Sie auf Dashboard, Docker und klicken Sie auf One-click Rent a docker VPS um den Docker zu mieten.
Geben Sie nach erfolgreichem Einsatz das Passwort wie unten gezeigt ein:
Das Erstellen eines Roboters ist sehr einfach. Nach der Bereitstellung des Dockers klicken Sie auf die Spalte Bot auf der linken Seite, klicken Sie auf Bot hinzufügen, füllen Sie einen Namen in den Tagnamen ein und wählen Sie den gerade bereitgestellten Docker aus.
Wir haben unsere Arbeitsumgebung so weit aufgebaut, dass wir sehen können, dass sie sehr einfach und effektiv ist und jede Funktion ihre eigenen Aufgaben erfüllt.
Wir haben die Konzepte der Zeitreihendaten und Tick-Daten oben erwähnt. Als nächstes verwenden wir eine einfache EMA-Strategie, um die beiden Konzepte zu verbinden.
Durch eine langsame Periode EMA, wie die 7-tägige EMA, und eine schnelle Periode EMA, wie die 3-tägige EMA. Sie werden auf dem gleichen K-Liniendiagramm angewendet. Wenn die schnelle Periode EMA über die langsame Periode EMA kreuzt, nennen wir es Golden Cross; Wenn die langsame Periode EMA durch die schnelle Periode EMA hinuntergeht, nennen wir es Bearish Crossover.
Die Basis für die Eröffnung einer Position ist die Eröffnung von Long-Positionen mit einem Golden Cross und die Eröffnung von Short-Positionen mit einem Bearish Crossover.
Machen wir auf.FMZ.COM, melden Sie sich in das Konto, Dashboard, Strategie-Bibliothek an und erstellen Sie eine neue Strategie. Wählen Sie Python in der Strategie-Schreibsprache in der linken oberen Ecke aus. Nachfolgend ist der Code dieser Strategie. Jede Zeile enthält detaillierte Kommentare. Bitte nehmen Sie sich Zeit zu verstehen. Diese Strategie ist keine echte Bot-Strategie. Experimentieren Sie nicht mit echtem Geld. Der Hauptzweck ist es, Ihnen eine allgemeine Vorstellung von Strategie-Schreiben und eine Vorlage zum Lernen zu geben.
import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.
def main(): # The main function, where the strategy logic begins.
STATE_IDLE = -1 # Mark position status variables
state = STATE_IDLE # Mark the current position status
initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
while True: # Enter the loop
if state == STATE_IDLE : # Here begins the logic of opening positions.
n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
if Dict : # Check the dict variable and prepare for the following log output.
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
Log("Details of opening positions",Dict,"Cross-period",n) # Log information
else: # Here begins the logic of closing positions.
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
nowAccount = ext.GetAccount() # Refresh and get account information again.
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
state = STATE_IDLE # Mark the position status after closing positions.
nowAccount = ext.GetAccount() # Refresh and get account information again.
LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
Klicken Sie auf den Backtest, Sie können sehen, dass es viele einstellbare Parameter gibt, die direkt geändert werden können. Für die Zukunft ist die Strategie immer komplexer und die Parameter immer mehr. Diese Modifikationsmethode kann den Benutzern helfen, den Ärger zu vermeiden, Code einzeln zu ändern, was bequem, schnell und klar ist.
Die folgenden Optimierungsoptionen können die eingestellten Parameter automatisch optimieren. Das System wird verschiedene optimale Parameter ausprobieren, um Strategieentwicklern bei der Suche nach der optimalen Wahl zu helfen.
Aus den obigen Beispielen können wir sehen, dass die Grundlage des quantitativen Handels durch die Analyse von Zeitreihendaten und das Backtesting der Wechselwirkung von Tickdaten liegt. Egal wie komplex die Logik ist, sie kann nicht von diesen beiden grundlegenden Elementen getrennt werden. Der Unterschied ist nur der Unterschied in den Dimensionen. Zum Beispiel benötigen Hochfrequenztransaktionen detailliertere Datenaspekte und mehr Zeitreihendaten. Ein anderes Beispiel ist der Arbitragehandel, der viele Daten aus der Backtestprobe erfordert. Es kann kontinuierliche detaillierte Daten von zwei Handelsobjekten über mehr als zehn Jahre erfordern, um die statistischen Ergebnisse ihrer Zinserweiterung und -reduzierung herauszufinden. In zukünftigen Artikeln werde ich Hochfrequenzhandel und Arbitragehandelsstrategien nacheinander einführen. Bitte freuen Sie sich darauf.