avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Erstellt in: 2020-04-16 12:44:03, aktualisiert am: 2024-12-12 20:55:38
comments   7
hits   3870

Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Beim programmatischen Handel und beim quantitativen Handel sind die Erforschung und Entwicklung von Strategien sowie die Durchführung von Backtesting-Analysen untrennbar mit der Unterstützung durch Marktdaten verbunden. Eine Erfassung sämtlicher Marktdaten ist nicht realistisch, dafür ist die Datenmenge einfach zu groß. Für den Markt für digitale Währungen unterstützt die Inventor Quantitative Trading Platform Backtesting-Daten für begrenzte Börsen und Handelspaare. Wenn Sie einige Börsen und Handelspaare einem Backtest unterziehen möchten, die derzeit keine Daten unterstützen. Sie können benutzerdefinierte Datenquellen zum Backtesting verwenden, benötigen hierfür jedoch Ihre eigenen Daten. Daher besteht dringender Bedarf nach einem Programm zur Erfassung von Marktinformationen, die dauerhaft gespeichert und vorzugsweise in Echtzeit abgerufen werden können.

Dadurch werden mehrere Anforderungen erfüllt, beispielsweise:

  • Datenquellen können mehreren Robotern zur Verfügung gestellt werden, wodurch die Häufigkeit des Zugriffs jedes Roboters auf die Austauschschnittstelle reduziert werden kann.
  • Wenn der Roboter startet, kann er K-Line-Daten mit einer ausreichenden Anzahl von K-Line-BARs abrufen, sodass Sie sich beim Start des Roboters keine Sorgen mehr über eine unzureichende Anzahl von K-Line-BARs machen müssen.
  • Es kann Marktdaten kleiner Währungen sammeln, um eine benutzerdefinierte Datenquelle für das Backtesting-System der Inventor Quantitative Trading Platform bereitzustellen, um das Backtesting-System zum Backtesting von Strategien zu verwenden.
  • usw..

Planen Sie, Python zur Implementierung zu verwenden? Warum? Weil es praktisch ist :) Wenn Sie Bedarf haben, werden Sie aktiv!

Vorbereiten

  • Pythons Pymongo-Bibliothek

Denn zur dauerhaften Speicherung wird eine Datenbank benötigt. Datenauswahl verwendenMongoDB, verwenden Sie die Programmiersprache Python, um das Sammlungsprogramm zu schreiben, daher wird die Treiberbibliothek dieser Datenbank benötigt. Installation auf PythonpymongoDas ist es.

  • Installieren Sie MongoDB auf dem Hostcomputer

Beispiel: Installieren Sie MongoDB auf einem MAC. Die Installation von MongoDB auf einem WIN ist natürlich ähnlich. Es gibt viele Tutorials online. Nehmen Sie als Beispiel die Installation auf einem Apple MAC:

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

  • Entpacken Nach dem Download entpacken Sie es in das Verzeichnis:/usr/local

  • Konfigurieren von Umgebungsvariablen Terminaleingang:open -e .bash_profile, schreiben Sie nach dem Öffnen der Datei:export PATH=${PATH}:/usr/local/MongoDB/bin Nach dem Speichern verwenden Sie das Terminalsource .bash_profileNehmen Sie vor, dass die Änderungen wirksam werden.

  • Manuelles Konfigurieren des Datenbankdateiverzeichnisses und des Protokollverzeichnisses Erstellen Sie ein Verzeichnis/usr/local/data/dbDer entsprechende Ordner in . Erstellen Sie ein Verzeichnis/usr/local/data/logsDer entsprechende Ordner in .

  • Bearbeiten der Konfigurationsdateimongo.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 beenden
  use admin;
  db.shutdownServer();

Implementieren des Collector-Programms

Der Collector läuft als Python-Roboterstrategie auf der Inventor Quantitative Trading Platform. Aufgrund meiner eingeschränkten Python-Kenntnisse habe ich nur ein einfaches Beispiel implementiert, um die Ideen dieses Artikels zu demonstrieren.

Kollektor-Strategiecode:

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)
        

Vollständige Richtlinienadresse:Link

Nutzungsdaten

Erstellen Sie strategische Bots, die Daten verwenden. Hinweis: Sie müssen überprüfenStrichzeichnungsbibliothekWenn Sie keines haben, können Sie eines in Ihre eigene Strategiebibliothek kopieren. Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

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)

Es ist ersichtlich, dass der Strategierobotercode, der Daten verwendet, nicht auf eine Austauschschnittstelle zugreift. Er erhält Daten durch Zugriff auf die Datenbank. Das Marktkollektorprogramm zeichnet die Daten des aktuellen BAR nicht auf. Es sammelt den K-Line BAR im abgeschlossener Zustand. Wenn der aktuelle BAR in Echtzeit aktualisiert werden muss, können die Daten leicht geändert werden. Der aktuelle Beispielcode dient nur zur Demonstration. Beim Zugriff auf die Datensätze in der Tabelle in der Datenbank werden alle Datensätze abgerufen. Mit zunehmender Datenerfassungszeit werden immer mehr Daten erfasst. Das Abfragen aller Daten wirkt sich auf die Leistung aus bis zu einem gewissen Grad. Sie können nur Abfragedaten entwerfen, die neuer als die aktuellen Daten sind, und sie den aktuellen Daten hinzufügen.

laufen

Ausführen des Hostprogramms Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Führen Sie auf dem Gerät des Hosts ausMongoDBDatenbankdienste ./mongod -f mongo.conf Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Der Sammler rennt los, um die simulierten Datenträger der quantitativen Handelsplattform des Erfinders einzusammelnwexAppvonBTC_USDTHandelspaare: Adresse:wexApp Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Roboter A verwendet Datenbankdaten: Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Roboter B verwendet Datenbankdaten: Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

wexAppSeite: Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Wie in der Abbildung zu sehen ist, teilen Roboter mit unterschiedlichen IDs die K-Line-Daten aus derselben Datenquelle.

Sammeln Sie K-Line-Daten für jeden beliebigen Zeitraum

Mithilfe der leistungsstarken Funktionen der Quantitative Trading Platform des Erfinders können wir problemlos K-Line-Daten für beliebige Zeiträume erfassen. Ich möchte beispielsweise eine 3-Minuten-K-Linie sammeln. Was soll ich tun, wenn die Börse keine 3-Minuten-K-Linie hat? Das ist ok, das lässt sich leicht erreichen.

Wir ändern die Konfiguration des Sammelroboters und stellen die K-Linien-Periode auf 3 Minuten ein. Die Inventor Quantitative Trading Platform synthetisiert automatisch eine 3-minütige K-Linie für das Sammelprogramm. Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Wir verwenden den Parameter删除表的名称,aufstellen:["records"]Löschen Sie die zuvor erfasste 1-Minuten-K-Line-Datentabelle. Bereiten Sie sich auf die Erfassung von 3-minütigen K-Line-Daten vor.

Start-up收集器程序, Neustart使用数据的策略机器人

Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren

Aus dem gezeichneten K-Liniendiagramm können Sie ersehen, dass das Intervall zwischen den BARs 3 Minuten beträgt und jeder BAR eine K-Linienspalte mit einer Periode von 3 Minuten ist.

In der nächsten Ausgabe werden wir versuchen, die Anforderungen benutzerdefinierter Datenquellen umzusetzen. Vielen Dank fürs Lesen