La mano a la mano te enseña a hacer un recolector de transacciones

El autor:Un sueño pequeño., Creado: 2020-04-16 12:44:03, Actualizado: 2023-10-11 19:57:00

img

En el comercio programático, la estrategia de investigación, la estrategia de diseño y el análisis de retrospectiva en el comercio cuantificado no pueden prescindir del apoyo de los datos de mercado. Todos los datos en el mercado no se recopilan y no son reales, después de todo, el volumen de datos es demasiado grande. Para el mercado de monedas digitales, los inventores admiten un número limitado de intercambios en la plataforma de comercio cuantificado.

Esto puede resolver varias necesidades, por ejemplo:

  • Se pueden proporcionar fuentes de datos a varios robots, lo que puede aliviar la frecuencia con la que cada robot accede a la interfaz de intercambio.
  • Se puede hacer que el robot se inicie y obtener una cantidad suficiente de datos de K-line BAR cuando se inicie, ya no hay que preocuparse por la cantidad insuficiente de K-line BAR cuando se inicie el robot.
  • Se pueden recopilar datos del mercado de monedas pequeñas para proporcionar una fuente de datos personalizada a los inventores de sistemas de retrospección de plataformas de negociación cuantificadas, lo que permite utilizar estrategias de retrospección de sistemas de retrospección.
  • Espere un segundo.

¿Por qué? ¿Porque es muy fácil? ¡Si hay necesidad, actúen!

Estoy listo.

  • La librería de python de Pymongo

    Para usar la base de datos, hacer el almacenamiento permanente.MongoDB, que utiliza el lenguaje Python para escribir programas de recopilación, por lo que se requiere un controlador para esta base de datos. Se puede instalar en Pythonpymongo¿Qué es lo que está pasando?

  • Instalar MongoDB en el equipo del administrador

    Por ejemplo: instalar MongoDB en MAC, por supuesto, el sistema WIN también instala MongoDB, hay muchos tutoriales en línea para instalar en el sistema MAC de Apple:

  • Descargar Enlace para descargar:https://www.mongodb.com/download-center?jmp=nav#community

  • Descompresión Después de descargarlo, descomprima en el directorio:/usr/local

  • Configuración de las variables de entorno La entrada final:open -e .bash_profileEn la página de Facebook, el usuario puede leer el siguiente mensaje:export PATH=${PATH}:/usr/local/MongoDB/binDespués de ser guardado, terminal de usosource .bash_profileLa modificación tiene que entrar en vigor.

  • Configurar manualmente los directorios de archivos y diarios de la base de datos Crear un directorio/usr/local/data/dbEn el caso de las carpetas correspondientes. Crear un directorio/usr/local/data/logsEn el caso de las carpetas correspondientes.

  • Editar el perfilmongo.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                               # 开启校验用户
    
  • Cómo ejecutar el servicio MongoDB

    Las órdenes:

    ./mongod -f mongo.conf
    
  • El servicio ha sido suspendido.

    use admin;
    db.shutdownServer();
    

Implementación de los procedimientos de los colectores

El recolector funciona como una estrategia de un robot Python en una plataforma de negociación cuantificada por el inventor. Debido a los niveles limitados de Python, solo se implementó un ejemplo simple para mostrar la idea de este artículo.

El código de la política del colector:

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)
        

La dirección de la política completa:Enlaces

Uso de datos

Crear robots estratégicos que utilicen los datos. Nota: Requiere un selector."La biblioteca de líneas de dibujo".Si no, puedes copiar uno en tu propia librería de políticas.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)

Se puede ver que la estrategia que utiliza los datos no tiene acceso a ninguna interfaz de intercambio en el código del robot, que obtiene los datos accediendo a la base de datos, que el programa de recolección de mercado no registra los datos del BAR actual, que se recopila en la línea K del estado ya completado, que puede modificarse ligeramente si se necesitan datos en tiempo real del BAR actual. El código del ejemplo actual, sólo para demostrar que cuando se accede a una tabla en una base de datos, se obtienen todos los registros de datos, por lo que, a medida que aumenta el tiempo de recopilación de datos y se recopilan más y más datos, todas las consultas que se realizan afectan al rendimiento en cierta medida.

En funcionamiento

Ejecutar el programa de administradoresimg

En el equipo donde está el administrador, se ejecutaMongoDBServicios de base de datos./mongod -f mongo.conf img

Recolector en funcionamiento, simulador de plataformas de intercambio cuantitativo de inventoreswexApp¿Qué es esto?BTC_USDTLas transacciones: La dirección es:WexApp img

El robot que utiliza los datos de la base de datos A:img

El robot B, que usa los datos de la base de datos:img

wexAppPágina:img

Como se puede ver en el gráfico, los robots con diferentes IDs comparten datos de K-line que utilizan una fuente de datos.

Recolecta datos de línea K de cualquier ciclo

Confiando en las potentes capacidades de la plataforma de intercambio cuantificada por los inventores, podemos realizar fácilmente la recopilación de datos de línea K de cualquier ciclo. Por ejemplo, si quiero recopilar una línea K de 3 minutos, ¿qué pasa si la bolsa no tiene una línea K de 3 minutos?

Modificamos la configuración del robot de recolección, el ciclo de K line se establece en 3 minutos, y el inventor de la plataforma de intercambio cuantitativo automáticamente sintetiza 3 minutos de K line para el programa de recolección.img

Usamos los parámetros.删除表的名称En el caso de las personas que no son musulmanas.["records"]Elimina la tabla de datos de línea K de 1 minuto recogida anteriormente.

Inicio del proyecto收集器程序¿Qué es esto?使用数据的策略机器人

img

img

Como se puede ver en el gráfico de líneas K dibujado, el intervalo entre las BAR es de 3 minutos, y cada BAR es un pilar de líneas K con un ciclo de 3 minutos.

En la próxima fase, intentaremos hacer realidad la necesidad de una fuente de datos personalizada. Gracias por leer.


Relacionados

Más.

¿Qué quieres decir?Es maravilloso.

ZltimLa cima

ZltimLa cima

La homilíaY ahora.

¿Qué quieres decir?La cima

Un sueño pequeño.Gracias por el apoyo, soy un pitón pequeño y blanco, pero si hay una mejor implementación o sugerencia, espero que se perfeccione.