Les stratégies de recherche, de conception et d'analyse de la retrospective sont indispensables pour les transactions programmées, les transactions quantifiées. Toutes les données sur le marché sont collectées et ne sont pas réalistes, après tout, la quantité de données est trop grande. Pour le marché de la monnaie numérique, les inventeurs prennent en charge une plate-forme de négociation quantifiée avec un nombre limité d'échanges et de paires de transactions. Si vous souhaitez retrospecter des échanges qui ne prennent pas en charge les données temporairement, les paires de transactions peuvent être retrospectivées à l'aide de sources de données personnalisées, mais cela dépend de la disponibilité des données.
Cela répond à plusieurs besoins, par exemple:
Pourquoi? Parce que c'est très pratique:) Si vous en avez besoin, dépêchez-vous!
Python dans sa bibliothèque PyMongo
Les données sont conservées en permanence, car elles sont utilisées pour la base de données.MongoDB
Le programme de collecte est écrit en Python et nécessite un pilote pour cette base de données.
Installez le logiciel sur Pythonpymongo
Je ne peux pas le faire.
Installer MongoDB sur le périphérique où se trouve l'hôte
Par exemple: installer MongoDB sur un MAC, bien sûr, le système WIN installe MongoDB de la même manière, il y a beaucoup de tutoriels en ligne pour l'installer sur un système MAC d'Apple:
Télécharger Le lien pour le téléchargement:https://www.mongodb.com/download-center?jmp=nav#community
Décompression
Une fois le fichier téléchargé, il est décompressé dans le répertoire:/usr/local
。
Variables d'environnement de configuration
Les données sont envoyées par l'intermédiaire d'une autre application.open -e .bash_profile
Il y a aussi un site internet qui propose des conseils sur la façon d'utiliser les fichiers.export PATH=${PATH}:/usr/local/MongoDB/bin
Une fois sauvegardé, utilisez le terminalsource .bash_profile
Les modifications sont en cours d'exécution.
Configurer manuellement les répertoires de fichiers et de journaux de la base de données
Créer un répertoire/usr/local/data/db
Le site Web de l'entreprise est également disponible en ligne.
Créer un répertoire/usr/local/data/logs
Le site Web de l'entreprise est également disponible en ligne.
Modifier le profilmongo.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 # 开启校验用户
Pour exécuter le service MongoDB
Les ordres:
./mongod -f mongo.conf
Arrêt du service
use admin;
db.shutdownServer();
Le collecteur fonctionne sous la forme d'une stratégie de robot Python sur la plate-forme de négociation quantifiée par l'inventeur.
Le code de la politique du collecteur:
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)
L'adresse de la stratégie complète est:Les liens
Les robots stratégiques utilisent les données. Remarque: il est nécessaire de cocher"La bibliothèque des lignes de dessin"Si vous n'en avez pas, vous pouvez en copier une dans votre propre bibliothèque.
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)
On peut voir que la stratégie utilisant les données n'a pas accès à aucune interface d'échange dans le code du robot, les données sont obtenues en accédant à la base de données, les programmes de collecte de marché ne enregistrent pas les données de la barre actuelle, mais collectent les données de la ligne K de la barre d'état terminée, qui peut être légèrement modifiée si les données de la barre actuelle sont nécessaires. Le code de l'exemple actuel, juste pour démontrer que lorsque vous accédez à une table dans une base de données, tous les enregistrements de données sont capturés, de sorte que toutes les requêtes qui en sortent affectent les performances dans une certaine mesure à mesure que le temps de collecte des données augmente.
Exécuter le programme de l'administrateur
Le système est installé sur l'appareil de l'hôte.MongoDB
Services de base de données./mongod -f mongo.conf
Le collecteur fonctionne, le disque de simulation de la plate-forme de négociation quantitative des inventeurswexApp
Je ne sais pasBTC_USDT
Les paires de transactions:
L'adresse:lexApp
Le robot qui utilise les données de la base de données A:
Le robot B utilise les données de base de données:
wexApp
Le blogueur a écrit:
Comme vous pouvez le voir sur le graphique, des robots avec des ID différents partagent des données K-string utilisant une source de données.
En s'appuyant sur les puissantes fonctionnalités de la plate-forme de négociation quantifiée par les inventeurs, nous pouvons facilement collecter des données K-line de cycles aléatoires. Par exemple, si je dois collecter une ligne K de 3 minutes, et que faire si les bourses n'ont pas de ligne K de 3 minutes?
Nous avons modifié la configuration du robot collecteur, le cycle de ligne K a été réglé à 3 minutes et la plate-forme de négociation quantifiée par l'inventeur a synthétisé automatiquement 3 minutes de ligne K au programme collecteur.
On utilise les paramètres.删除表的名称
Les paramètres suivants:["records"]
Supprimez les tableaux de données de ligne K de 1 minute collectés précédemment. Préparez-vous à collecter des données de ligne K de 3 minutes.
Le démarrage收集器程序
Je vous en prie, reprenez.使用数据的策略机器人
。
Vous pouvez voir le graphique de lignes K dessiné, où l'intervalle entre les BAR est de 3 minutes, et chaque BAR est une colonne de lignes K avec un cycle de 3 minutes.
Dans la prochaine étape, nous allons essayer de réaliser la demande de sources de données personnalisées. Merci de lire.
Je suis désolée.C' est merveilleux!
ZltimLe sommet
ZltimLe sommet
l' homélieJe vous en prie.
Je vous en prie.Le sommet
L'inventeur de la quantification - un petit rêveMerci pour votre soutien, je suis python blanc, je ne suis pas un joueur de base, j'ai des suggestions pour une meilleure mise en œuvre et j'attends de voir ce que vous pouvez faire.