Type/to search
8
Follow
1363
Followers
Bringen Sie Ihnen Schritt für Schritt bei, einen Marktsammler zu implementieren
Discussions
Created 2020-04-16 12:44:03  Updated 2024-12-12 20:55:38
 7
 4144

img

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:

python
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.
img

python
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
img

Führen Sie auf dem Gerät des Hosts ausMongoDBDatenbankdienste
./mongod -f mongo.conf
img

Der Sammler rennt los, um die simulierten Datenträger der quantitativen Handelsplattform des Erfinders einzusammelnwexAppvonBTC_USDTHandelspaare:
Adresse:wexApp
img

Roboter A verwendet Datenbankdaten:
img

Roboter B verwendet Datenbankdaten:
img

wexAppSeite:
img

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.
img

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使用数据的策略机器人

img

img

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

Related Recommendations
Comment
All comments (6)

    Wonderful

    6 years ago

    6 years ago

    6 years ago

    6 years ago

    感谢支持,我是python小白,抛砖引玉,有更好的实现或者建议的话,期待完善。

    6 years ago

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)