La main à la main vous apprend à réaliser un collecteur de transactions

Auteur:Le petit rêve, Créé: 2020-04-16 12:44:03, Mis à jour: 2023-10-11 19:57:00

img

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:

  • Une source de données peut être fournie à plusieurs robots, ce qui atténue la fréquence à laquelle chaque robot accède à l'interface de l'échange.
  • Il est possible d'obtenir une quantité suffisante de données de ligne K lorsque le robot démarre, et de ne plus avoir à craindre qu'il n'y ait pas assez de ligne K lorsque le robot démarre.
  • Les données de marché des petites devises peuvent être collectées et utilisées pour fournir des sources de données personnalisées aux inventeurs pour quantifier le système de retouche de plateforme de négociation, utilisant ainsi la stratégie de retouche du système de retouche.
  • Attends un peu.

Pourquoi? Parce que c'est très pratique:) Si vous en avez besoin, dépêchez-vous!

Prêt

  • 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.MongoDBLe programme de collecte est écrit en Python et nécessite un pilote pour cette base de données. Installez le logiciel sur PythonpymongoJe 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_profileIl y a aussi un site internet qui propose des conseils sur la façon d'utiliser les fichiers.export PATH=${PATH}:/usr/local/MongoDB/binUne fois sauvegardé, utilisez le terminalsource .bash_profileLes 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/dbLe site Web de l'entreprise est également disponible en ligne. Créer un répertoire/usr/local/data/logsLe 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();
    

Mise en œuvre du programme de collecteur

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

Utilisation des données

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

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.

fonctionne

Exécuter le programme de l'administrateurimg

Le système est installé sur l'appareil de l'hôte.MongoDBServices de base de données./mongod -f mongo.conf img

Le collecteur fonctionne, le disque de simulation de la plate-forme de négociation quantitative des inventeurswexAppJe ne sais pasBTC_USDTLes paires de transactions: L'adresse:lexApp img

Le robot qui utilise les données de la base de données A:img

Le robot B utilise les données de base de données:img

wexAppLe blogueur a écrit:img

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.

Collectez des données de ligne K de périodes aléatoires

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

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

img

img

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.


Relationnée

Plus de

Je suis désolée.C' est merveilleux!

ZltimLe sommet

ZltimLe sommet

l' homélieJe vous en prie.

Je vous en prie.Le sommet

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