Hand in Hand lehrt man, wie man einen Datensammler realisiert.

Schriftsteller:Kleine Träume, Erstellt: 2020-04-16 12:44:03, Aktualisiert: 2023-10-11 19:57:00

img

Die Unterstützung von Marktdaten ist unabdingbar bei programmatisierten Transaktionen, Forschungsstrategien, Designstrategien und Rückmessungsanalysen bei quantitativen Transaktionen. Alle Daten auf dem Markt werden nicht gesammelt und sind nicht realistisch, denn die Datenmenge ist zu groß. Für den digitalen Währungsmarkt unterstützen die Erfinder eine begrenzte Anzahl von Exchanges, Rückmessungsdaten für Transaktionspaare auf der quantitativen Handelsplattform.

Das kann einige Bedürfnisse lösen, wie zum Beispiel:

  • Die Datenquellen können mehreren Robotern zur Verfügung gestellt werden, was die Häufigkeit der Zugriffe auf die Börsenoberfläche durch jeden Roboter reduzieren kann.
  • Es ist möglich, den Roboter zu starten, um eine ausreichende Anzahl von K-Line-BAR-Daten zu erhalten, ohne sich mehr Sorgen machen zu müssen, dass die Anzahl der K-Line-BARs beim Start des Robots nicht ausreicht.
  • Es kann Marktdaten für kleine Währungen gesammelt werden, um den Erfindern eine benutzerdefinierte Datenquelle für die Quantifizierung des Retest-Systems der Handelsplattform zur Verfügung zu stellen, um die Retest-System-Retest-Strategie zu verwenden.
  • Warten Sie...

Ich habe vor, mit Python zu realisieren, warum? Wenn es eine Nachfrage gibt, dann tun Sie es!

Bereit sein

  • Die Python-Pymongo-Bibliothek

    Die Datenbank ist für die Permanente-Speicherung erforderlich.MongoDBDie Datenbank wird in Python geschrieben, sodass ein Treiber für diese Datenbank benötigt wird. Installiert in PythonpymongoDas ist alles.

  • Installieren von MongoDB auf dem Gerät des Administrators

    Zum Beispiel: MAC installiert MongoDB, natürlich ist das Win-System ähnlich wie MongoDB installiert. Es gibt viele Tutorials im Internet, um beispielsweise auf dem Apple MAC zu installieren:

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

  • Kompressionsfreiheit Nach dem Herunterladen wird es in den Verzeichnis freigegeben:/usr/local

  • Umgebungsvariablen konfigurieren Endgeräte:open -e .bash_profileDer Autor des Dokuments schreibt:export PATH=${PATH}:/usr/local/MongoDB/binNach dem Speichern für den Endverbrauchsource .bash_profileDie Änderungen werden in Kraft treten.

  • Manuelle Konfiguration von Datenbank-Datei- und Log-Verzeichnissen Erstellen von Verzeichnissen/usr/local/data/dbDie entsprechenden Ordner. Erstellen von Verzeichnissen/usr/local/data/logsDie entsprechenden Ordner.

  • Bearbeiten von Profilenmongo.conf

    #bind_ip_all = true                        # 任何机器可以连接
    bind_ip = 127.0.0.1                        # 本机可以访问
    port = 27017                               # 实例运行在27017端口(默认)
    dbpath = /usr/local/data/db                # 数据文件夹存放地址(db要预先创建)
    logpath = /usr/local/data/logs/mongodb.log # 日志文件地址
    logappend = false                          # 启动时 添加还是重写日志文件
    fork = false                               # 是否后台运行
    auth = false                               # 开启校验用户
    
  • MongoDB-Dienst ausführen

    Befehl:

    ./mongod -f mongo.conf
    
  • Dienst eingestellt

    use admin;
    db.shutdownServer();
    

Implementierung von Sammlerprozessen

Der Sammler arbeitet in Form eines Python-Roboter-Strategies auf einer von den Erfindern quantifizierten Handelsplattform. Da der Python-Level begrenzt ist, wurde nur ein einfaches Beispiel realisiert, um die Idee zu demonstrieren.

Der Sammler-Politik-Code:

import pymongo
import json

def main():
    Log("测试数据收集")
    
    # 连接数据库服务
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # 创建数据库
    huobi_DB = myDBClient["huobi"]
    
    # 打印目前数据库表
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # 检测是否删除表
    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, "删除:", dropName)
                ret = tab.drop()
                collist = huobi_DB.list_collection_names()
                if dropName in collist:
                    Log(dropName, "删除失败")
                else :
                    Log(dropName, "删除成功")
    
    # 创建records表
    huobi_DB_Records = huobi_DB["records"]
    
    # 请求数据
    preBarTime = 0
    index = 1
    while True:
        r = _C(exchange.GetRecords)
        if len(r) < 2:
            Sleep(1000)
            continue
        if preBarTime == 0:
            # 首次写入所有BAR数据
            for i in range(len(r) - 1):
                # 逐根写入
                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)
        

Die vollständige Adresse der Strategie:Links

Nutzung der Daten

Die Entwicklung von Strategie-Robotern, die Daten nutzen. Bitte beachten Sie:"Draw Line Klassenbuch"Wenn nicht, dann kannst du einen in deine eigene Bibliothek kopieren.img

import pymongo
import json

def main():
    Log("测试使用数据库数据")
    
    # 连接数据库服务
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # 创建数据库
    huobi_DB = myDBClient["huobi"]
    
    # 打印目前数据库表
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # 查询数据打印
    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)
        
        # 使用画线类库,把取到的K线数据画出来
        ext.PlotRecords(arrRecords, "K")
        LogStatus(_D(), "records length:", len(arrRecords))
        Sleep(10000)

Man kann sehen, dass die Strategien, mit denen die Daten verwendet werden, nicht auf eine Austausch-Interface zugreifen, die Daten durch den Zugriff auf die Datenbank erhalten werden. Der Markt-Sammler-Prozess zeichnet keine Daten für die aktuelle BAR auf, sondern sammelt die bereits vollständige K-Line-BAR, die leicht geändert werden kann, wenn die aktuelle BAR-Realdaten benötigt werden. Der aktuelle Beispielcode ist nur zur Demonstration, dass alle Datensätze in Tabellen in einer Datenbank abgerufen werden, wenn sie aufgerufen werden, so dass alle Abfragen, die abgerufen werden, die Leistung zu einem gewissen Grad beeinflussen, wenn die Zeit der Datenerfassung wächst und mehr und mehr Daten gesammelt werden.

Laufen

Verwalterprogramm ausführenimg

Es wird auf dem Gerät des Administrators ausgeführt.MongoDBDatenbankdienste./mongod -f mongo.conf img

Der Sammler läuft, Sammlung der Erfinder Quantitative Handelsplattform SimulationwexAppDieBTC_USDTDie Transaktionspaare: Die Adresse:WexApp img

Der Roboter, der Daten aus der Datenbank verwendet A:img

Der Roboter B, der Daten aus der Datenbank benutzt:img

wexAppSeite:img

Wie Sie sehen können, teilen sich Roboter mit unterschiedlichen IDs K-Daten mit einer Datenquelle.

Sammeln von Daten über K-Linien mit beliebigen Perioden

Mit Hilfe der leistungsstarken Funktionen der quantitativen Handelsplattform der Erfinder können wir leicht K-Line-Daten von beliebigen Perioden sammeln. Zum Beispiel, wenn ich eine 3-minütige K-Linie sammeln möchte, was ist mit einer Börse, die keine 3-minütige K-Linie hat?

Wir haben die Konfiguration des Sammlerrobots geändert, so dass die K-Leinzyklose auf 3 Minuten gesetzt wird, und die Erfinder der quantitativen Handelsplattform synthetisieren automatisch 3 Minuten K-Leine für den Sammlerprogramm.img

Wir benutzen die Parameter.删除表的名称Die Einstellungen:["records"]Entfernen Sie die zuvor gesammelten 1-Minuten-K-Liniendatenblätter. Bereiten Sie sich vor, 3-Minuten-K-Liniendaten zu sammeln.

Start收集器程序Wieder anfangen使用数据的策略机器人

img

img

Sie können sehen, dass die K-Linien-Diagramme, die zwischen den BARs gezeichnet wurden, eine Intervallzeit von 3 Minuten haben, wobei jede BAR eine K-Linien-Säule mit einer 3-minütigen Periode darstellt.

In der nächsten Phase werden wir versuchen, die Notwendigkeit einer benutzerdefinierten Datenquelle zu realisieren. Danke fürs Lesen.


Verwandt

Mehr

- Ich weiß nicht.Das ist wundervoll.

ZltimDie Spitze

ZltimDie Spitze

PredigtIch danke dir.

Siehe auchDie Spitze

Kleine TräumeIch bin Python, und ich bin bereit, eine bessere Implementierung oder Vorschläge zu machen, und ich hoffe, dass sie perfekt sind.