Enseñarle a implementar un coleccionista de cotizaciones de mercado

El autor:La bondad, Creado: 2020-05-30 10:03:39, Actualizado: 2023-11-02 19:52:02

img

El soporte de datos de cotizaciones de mercado es indispensable al investigar, diseñar y backtestar estrategias comerciales. No es realista recopilar todos los datos de cada mercado, después de todo, la cantidad de datos es demasiado grande. Para el mercado de divisas digitales, la plataforma FMZ admite datos de backtest limitados para intercambios y pares comerciales. Si desea backtestar algunos intercambios y pares comerciales que temporalmente no estaban soportados por la plataforma FMZ, puede usar una fuente de datos personalizada para backtest, pero esta premisa requiere que tenga datos. Por lo tanto, existe una necesidad urgente de un programa de recopilación de cotizaciones de mercado, que puede persistir y obtenerse mejor en tiempo real.

De esta manera, podemos resolver varias necesidades, tales como:

  • Se pueden proporcionar múltiples robots con fuentes de datos, lo que puede facilitar la frecuencia de acceso de cada robot a la interfaz de intercambio.
  • Se pueden obtener datos de la línea K con un número suficiente de K-line BARs cuando el robot se inicia, y ya no tiene que preocuparse por el número insuficiente de K-line BARs cuando el robot se inicia.
  • Puede recopilar datos de mercado de monedas raras y proporcionar una fuente de datos personalizada para el sistema de prueba posterior de la plataforma FMZ.

y muchos más...

Tenemos la intención de usar Python para lograr esto, ¿por qué?

Estoy listo.

  • La biblioteca de Python de Python Debido a que usted necesita utilizar la base de datos para el almacenamiento persistente.MongoDBy el lenguaje Python se utiliza para escribir el programa de colección, por lo que la biblioteca de controladores de esta base de datos es necesaria. Sólo instalepymongoen Python.

  • Instale MongoDB en el dispositivo de alojamiento Por ejemplo: MacOS instala MongoDB, también lo mismo que el sistema Windows instala MongoDB. Hay muchos tutoriales en línea. Tome la instalación del sistema MacOS como ejemplo:

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

  • Descifrado Después de descargar, descifrar al directorio:/usr/local

  • Configuración de las variables de entorno Entrada del terminal:open -e .bash_profile, después de abrir el expediente, escribir:exportPATH=${PATH}:/usr/local/MongoDB/binDespués de guardar, en el terminal, utilizasource .bash_profilepara que los cambios entren en vigor.

  • Configurar manualmente el directorio de archivos de la base de datos y el directorio de registro Crear la carpeta correspondiente en el directorio/usr/local/data/db¿ Qué pasa? Crear la carpeta correspondiente en el directorio/usr/local/data/logs.

Editar el archivo de configuraciónmongo.conf:

#bind_ip_all = true # Any computer can connect
bind_ip = 127.0.0.1 # Local computer can access
port = 27017 # The instance runs on port 27017 (default)
dbpath = /usr/local/data/db # data folder storage address (db need to be created in advance)
logpath = /usr/local/data/logs/mongodb.log # log file address
logappend = false # whether to add or rewrite the log file at startup
fork = false # Whether to run in the background
auth = false # Enable user verification
  • Ejecutar el servicio MongoDB

el comando:

./mongod -f mongo.conf
  • Detener el servicio de MongoDB
use admin;
db.shutdownServer();

Implementar el programa de los colectores

El recolector opera como una estrategia de robot Python en la plataforma FMZ. Acabo de implementar un ejemplo simple para mostrar las ideas de este artículo.

Código del programa del colector:

import pymongo
import json

def main():
    Log("Test data collection")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Check if the table is deleted
    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, "delete:", dropName)
                ret = tab.drop()
                collist = huobi_DB.list_collection_names()
                if dropName in collist:
                    Log(dropName, "failed to delete")
                else :
                    Log(dropName, "successfully deleted")
    
    # Create the records table
    huobi_DB_Records = huobi_DB["records"]
    
    # Request data
    preBarTime = 0
    index = 1
    while True:
        r = _C(exchange.GetRecords)
        if len(r) < 2:
            Sleep(1000)
            continue
        if preBarTime == 0:
            # Write all BAR data for the first time
            for i in range(len(r) - 1):
                # Write one by one
                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)

Dirección completa de la estrategia:https://www.fmz.com/strategy/199120

Datos de uso

Crear un robot estratégico que use los datos. Nota: Usted necesita comprobar el python PlotLine Template, si usted no lo tiene, puede copiar uno de la estrategia cuadrado a su biblioteca de estrategias.

img

Aquí está la dirección:https://www.fmz.com/strategy/39066

import pymongo
import json

def main():
    Log("Test using database data")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Query data printing
    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)
        
        # Use the line drawing library to draw the obtained K-line data
        ext.PlotRecords(arrRecords, "K")
        LogStatus(_D(), "records length:", len(arrRecords))
        Sleep(10000)

Se puede ver que el código del robot de estrategia que utiliza los datos no accede a ninguna interfaz de intercambio. Los datos se obtienen accediendo a la base de datos. El programa de recolección de mercado no registra los datos actuales de BAR. Recoge el BAR de la línea K en el estado completado. Si se necesitan los datos actuales de BAR en tiempo real, se puede modificar ligeramente.

El código de ejemplo actual es solo para demostración. Al acceder a los registros de datos en la tabla en la base de datos, todos se obtienen. De esta manera, a medida que aumenta el tiempo para recopilar datos, se recopilan más y más datos. Todas las consultas afectarán el rendimiento hasta cierto punto y se pueden diseñar. Solo se consultan y se agregan a los datos actuales datos más recientes que los actuales.

¡Corre!

ejecutando el programa docker

img

En el dispositivo donde se encuentra el docker, ejecute el servicio de base de datos MongoDB

img

El coleccionista corre para recoger los pares comerciales BTC_USDT de la plataforma FMZ WexApp simulación de intercambio de cotizaciones marekt: Dirección de WexApp: https://wex.app/trade?currency=BTC_USDT

img

Robot A utilizando datos de la base de datos:

img

El robot B utiliza datos de la base de datos:

img

Página de WexApp:

img

Como pueden ver en la figura, los robots con diferentes ID comparten datos de línea K usando una fuente de datos.

Recopilar datos de línea K de cualquier período

Confiando en las potentes funciones de la plataforma FMZ, podemos recopilar fácilmente datos de la línea K en cualquier ciclo. Por ejemplo, quiero recoger una línea K de 3 minutos, ¿y si el intercambio no tiene una línea K de 3 minutos?

Modificamos la configuración del robot colector, el período de línea K se establece en 3 minutos, y la plataforma FMZ sintetizará automáticamente una línea K de 3 minutos al programa colector.

img

Usamos el parámetro para borrarthe name of the table, configuración: [records] borrar la tabla de datos de línea K de 1 minuto recogida anteriormente. Prepárate para recopilar datos de línea K de 3 minutos.

Empieza elcollector program, y luego reinicie elstrategy robot using the data.

img

img

Se puede ver el gráfico de la línea K dibujado, el intervalo entre las BAR es de 3 minutos, y cada BAR es una barra de la línea K con un período de 3 minutos.

En el próximo número, trataremos de implementar los requisitos de las fuentes de datos personalizadas.

¡Gracias por leer!


Relacionados

Más.