Ich zeige Ihnen, wie man einen Marktzins-Sammler implementiert.

Schriftsteller:Gutes, Erstellt: 2020-05-30 10:03:39, Aktualisiert: 2023-11-02 19:52:02

img

Bei der Erforschung, Gestaltung und Backtestung von Handelsstrategien ist die Unterstützung von Marktkursdaten unerlässlich. Es ist nicht realistisch, alle Daten von jedem Markt zu sammeln, schließlich ist die Datenmenge zu groß. Für den digitalen Währungsmarkt unterstützt die FMZ-Plattform begrenzte Backtestdaten für Börsen und Handelspare. Wenn Sie einige Börsen und Handelspare, die vorübergehend nicht von der FMZ-Plattform unterstützt wurden, backtesten möchten, können Sie eine benutzerdefinierte Datenquelle für den Backtest verwenden, aber diese Prämisse erfordert, dass Sie Daten haben. Daher besteht ein dringender Bedarf an einem Marktkursdaten-Sammelprogramm, das beständig und am besten in Echtzeit erhalten werden kann.

Auf diese Weise können wir verschiedene Bedürfnisse lösen, wie:

  • Mehrere Roboter können mit Datenquellen versehen werden, was den Zugang jedes Roboter zur Austauschoberfläche erleichtern kann.
  • Sie können K-Liniendaten mit einer ausreichenden Anzahl von K-Linien-BARs erhalten, wenn der Roboter startet, und Sie müssen sich nicht mehr um die unzureichende Anzahl von K-Linien-BARs sorgen, wenn der Roboter startet.
  • Es kann Marktdaten über seltene Währungen sammeln und eine benutzerdefinierte Datenquelle für das FMZ-Plattform-Backtest-System bereitstellen.

und viele mehr...

Wir planen, Python zu verwenden, um dies zu erreichen, warum?

Ich bin bereit.

  • Python's Pymongo Bibliothek Denn Sie müssen Datenbank für dauerhafte Speicherung verwenden.MongoDBund die Python-Sprache wird verwendet, um das Sammelprogramm zu schreiben, also ist die Treiberbibliothek dieser Datenbank erforderlich. Installieren Sie einfachpymongoauf Python.

  • MongoDB auf dem Hosting-Gerät installieren Zum Beispiel: MacOS installiert MongoDB, genauso wie Windows-System installiert MongoDB. Es gibt viele Tutorials online. Nehmen Sie die Installation von MacOS-System als Beispiel:

  • Herunterladen Download-Link:https://www.mongodb.com/download-center?jmp=nav#community

  • Zügel öffnen Nach dem Herunterladen öffnen Sie das Verzeichnis:/usr/local

  • Umgebungsvariablen konfigurieren Eingabe des Endgeräts:open -e .bash_profile, schreibt man nach dem Öffnen der Akte:exportPATH=${PATH}:/usr/local/MongoDB/binNach der Speicherung, im Terminal, verwendetsource .bash_profiledie Änderungen wirksam werden lassen.

  • Manuelle Konfiguration des Dateidatenbank-Dateiverzeichnisses und des Protokollverzeichnisses Erstellen des entsprechenden Ordners im Verzeichnis/usr/local/data/db- Ich weiß. Erstellen des entsprechenden Ordners im Verzeichnis/usr/local/data/logs.

Bearbeiten der Konfigurationsdateimongo.conf:

#bind_ip_all = true # Any computer can connect
bind_ip = 127.0.0.1 # Local computer can access
port = 27017 # The instance runs on port 27017 (default)
dbpath = /usr/local/data/db # data folder storage address (db need to be created in advance)
logpath = /usr/local/data/logs/mongodb.log # log file address
logappend = false # whether to add or rewrite the log file at startup
fork = false # Whether to run in the background
auth = false # Enable user verification
  • MongoDB-Dienst ausführen

Befehl:

./mongod -f mongo.conf
  • MongoDB-Dienst stoppen
use admin;
db.shutdownServer();

Durchführung des Sammlerprogramms

Der Sammler arbeitet als Python-Roboterstrategie auf der FMZ-Plattform. Ich habe gerade ein einfaches Beispiel implementiert, um die Ideen dieses Artikels zu zeigen.

Sammlerprogrammcode:

import pymongo
import json

def main():
    Log("Test data collection")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Check if the table is deleted
    arrDropNames = json.loads(dropNames)
    if isinstance(arrDropNames, list):
        for i in range(len(arrDropNames)):
            dropName = arrDropNames[i]
            if isinstance(dropName, str):
                if not dropName in collist:
                    continue
                tab = huobi_DB[dropName]
                Log("dropName:", dropName, "delete:", dropName)
                ret = tab.drop()
                collist = huobi_DB.list_collection_names()
                if dropName in collist:
                    Log(dropName, "failed to delete")
                else :
                    Log(dropName, "successfully deleted")
    
    # Create the records table
    huobi_DB_Records = huobi_DB["records"]
    
    # Request data
    preBarTime = 0
    index = 1
    while True:
        r = _C(exchange.GetRecords)
        if len(r) < 2:
            Sleep(1000)
            continue
        if preBarTime == 0:
            # Write all BAR data for the first time
            for i in range(len(r) - 1):
                # Write one by one
                bar = r[i]
                huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})                
                index += 1
            preBarTime = r[-1]["Time"]
        elif preBarTime != r[-1]["Time"]:
            bar = r[-2]
            huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})
            index += 1
            preBarTime = r[-1]["Time"]
        LogStatus(_D(), "preBarTime:", preBarTime, "_D(preBarTime):", _D(preBarTime/1000), "index:", index)
        Sleep(10000)

Vollständige Strategieadresse:https://www.fmz.com/strategy/199120

Verwendungsdaten

Erstellen Sie einen Strategie-Roboter, der Daten nutzt. Hinweis: Sie müssen die python PlotLine Vorlage überprüfen, wenn Sie sie nicht haben, können Sie eine aus dem Strategie-Feld in Ihre Strategie-Bibliothek kopieren.

img

Hier ist die Adresse:https://www.fmz.com/strategy/39066

import pymongo
import json

def main():
    Log("Test using database data")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Query data printing
    huobi_DB_Records = huobi_DB["records"]
    
    while True:
        arrRecords = []
        for x in huobi_DB_Records.find():
            bar = {
                "High": x["High"], 
                "Low": x["Low"], 
                "Close": x["Close"], 
                "Open": x["Open"], 
                "Time": x["Time"], 
                "Volume": x["Volume"]
            }
            arrRecords.append(bar)
        
        # Use the line drawing library to draw the obtained K-line data
        ext.PlotRecords(arrRecords, "K")
        LogStatus(_D(), "records length:", len(arrRecords))
        Sleep(10000)

Es kann gesehen werden, dass der Strategie-Roboter-Code, der die Daten verwendet, nicht auf eine Austauschoberfläche zugreift. Die Daten werden durch den Zugriff auf die Datenbank erhalten. Das Market Collector-Programm zeichnet die aktuellen BAR-Daten nicht auf. Es sammelt die K-Line BAR im vollständigen Zustand. Wenn die aktuellen BAR-Echtzeitdaten benötigt werden, kann sie leicht geändert werden.

Der aktuelle Beispielcode dient nur der Demonstration. Beim Zugriff auf die Datensätze in der Tabelle in der Datenbank werden alle erhalten. Auf diese Weise werden mit zunehmender Zeit für die Datenerfassung immer mehr Daten gesammelt. Alle Abfragen beeinflussen die Leistung in einem gewissen Maße und können entworfen werden. Nur Daten, die neuerer sind als die aktuellen Daten, werden abfragt und den aktuellen Daten hinzugefügt.

Lauf!

Ausführen eines Docker-Programms

img

Auf dem Gerät, auf dem sich der Docker befindet, den MongoDB-Datenbankservice ausführen

img

Der Sammler läuft, um die BTC_USDT-Handelspaare der FMZ-Plattform zu sammeln. WexApp-Adresse: https://wex.app/trade?currency=BTC_USDT

img

Der Roboter A verwendet Datenbankdaten:

img

Der Roboter B verwendet Datenbankdaten:

img

WexApp Seite:

img

Wie Sie in der Abbildung sehen können, teilen Roboter mit unterschiedlichen IDs K-Liniendaten mit einer Datenquelle.

Sammeln von K-Liniendaten für jeden Zeitraum

Aufgrund der leistungsstarken Funktionen der FMZ-Plattform können wir in jedem Zyklus leicht K-Liniendaten sammeln. Zum Beispiel möchte ich eine 3-minütige K-Linie sammeln, was ist, wenn die Börse keine 3-minütige K-Linie hat?

Wir ändern die Konfiguration des Sammlerroboters, die K-Zeile wird auf 3 Minuten gesetzt, und die FMZ-Plattform synthetisiert automatisch eine 3-minütige K-Zeile zum Sammlerprogramm.

img

Wir verwenden den Parameter zu löschenthe name of the table, Einstellung: [records] löschen Sie die zuvor gesammelte K-Liniendatentabelle mit 1 Minute. Bereiten Sie sich auf die Sammlung von K-Liniendaten mit 3 Minuten vor.

Starten Sie diecollector program, und dann starten Sie diestrategy robot using the data.

img

img

Sie können sehen, dass das K-Liniendiagramm gezeichnet ist, das Intervall zwischen BARs beträgt 3 Minuten, und jede BAR ist ein K-Linienbalken mit einer Periode von 3 Minuten.

In der nächsten Ausgabe werden wir versuchen, die Anforderungen an benutzerdefinierte Datenquellen umzusetzen.

Danke fürs Lesen!


Verwandt

Mehr