
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:
Planen Sie, Python zur Implementierung zu verwenden? Warum? Weil es praktisch ist :) Wenn Sie Bedarf haben, werden Sie aktiv!
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.
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 # 开启校验用户
Befehl:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
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
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.

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.
Ausführen des Hostprogramms

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

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

Roboter A verwendet Datenbankdaten:

Roboter B verwendet Datenbankdaten:

wexAppSeite:

Wie in der Abbildung zu sehen ist, teilen Roboter mit unterschiedlichen IDs die K-Line-Daten aus derselben Datenquelle.
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.

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


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