A mão a mão ensina-te a implementar um coletor de transações

Autora:Sonhos pequenos, Criado: 2020-04-16 12:44:03, Atualizado: 2023-10-11 19:57:00

img

O suporte de dados de mercado é indispensável para a negociação programada, estratégias de pesquisa, estratégias de design e análise de retrospectiva em negociações quantitativas. Todos os dados no mercado são coletados e não são reais, afinal, o volume de dados é muito grande. Para o mercado de moeda digital, os inventores suportam uma plataforma de negociação quantitativa com um número limitado de exchanges, dados de retrospectiva de pares de transações.

A partir daí, o projeto foi lançado no Brasil, onde foi lançado o primeiro projeto do projeto.

  • A fonte de dados pode ser fornecida a vários robôs, o que diminui a frequência com que cada robô acessa a interface da bolsa.
  • Pode-se fazer o bot começar, obter um número suficiente de K-bars de dados de K-bars, e não ter que se preocupar com o número de K-bars insuficiente quando o robô começar.
  • Os dados do mercado de pequenas moedas podem ser coletados e usados para fornecer fontes de dados personalizadas para os inventores de sistemas de retrospecção de plataformas de negociação quantitativas, que usam estratégias de retrospecção de sistemas de retrospecção.
  • Espera um pouco.

O que você está fazendo aqui é simples, porque é muito fácil. Se houver necessidade, ação!

Preparação

  • Python em Python

    O uso de um banco de dados para fazer a conservação permanente.MongoDBO código-fonte do banco de dados é um código de código de código de código de código de código de código. Instalando no PythonpymongoNão, não.

  • Instalar o MongoDB no dispositivo onde o administrador está

    Por exemplo: instalar o MongoDB no MAC, claro que o sistema WIN também instala o MongoDB, há muitos tutoriais online para instalar no sistema MAC da Apple:

  • Descarregar O link para baixar:https://www.mongodb.com/download-center?jmp=nav#community

  • Descompressão Depois de baixado, descompacte para o diretório:/usr/local

  • Configuração de variáveis de ambiente Input do terminal:open -e .bash_profileO Facebook, por sua vez, não é o único site a fazer isso.export PATH=${PATH}:/usr/local/MongoDB/binDepois de armazenado, uso finalsource .bash_profileA mudança foi efetuada para que a alteração entrasse em vigor.

  • Configure manualmente os diretórios de arquivos e diários do banco de dados Criar um catálogo/usr/local/data/dbO que é o que você está fazendo? Criar um catálogo/usr/local/data/logsO que é o que você está fazendo?

  • Edição de 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                               # 开启校验用户
    
  • Executar o serviço MongoDB

    Ordem:

    ./mongod -f mongo.conf
    
  • Parar o serviço

    use admin;
    db.shutdownServer();
    

Implementação de procedimentos de coleção

O coletor funciona como uma estratégia de robô Python em uma plataforma de negociação quantitativa do inventor. Como o próprio nível de Python é limitado, apenas um exemplo simples foi implementado para demonstrar a idéia deste artigo.

Código de política do 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)
        

O endereço da política completa:Links

Utilização de dados

Criar robôs estratégicos que usem dados. Atenção: É necessário selecionar"A biblioteca de linhas gráficas".Se você não tem, pode copiar um para o seu próprio arquivo 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)

Pode-se ver que a estratégia de uso dos dados no código do robô não acede a nenhuma interface de troca, obtém dados acessando o banco de dados, o coletor de mercado não registra os dados do BAR atual, mas coleta o BAR da linha K do estado já concluído, que pode ser modificado um pouco se precisar de dados reais do BAR atual. O código do exemplo atual, apenas para demonstrar que todos os registros de dados dentro de uma tabela no banco de dados são obtidos ao acessar, de modo que, à medida que o tempo de coleta de dados aumenta e mais dados são coletados, todas as consultas que são feitas afetam o desempenho em certa medida. Pode ser projetado para apenas consultar dados novos do que os dados atuais e adicionar aos dados atuais.

Funcionamento

Executar o processo de administradorimg

A partir de agora, o servidor pode ser instalado em qualquer dispositivo do servidor.MongoDBServiços de banco de dados./mongod -f mongo.conf img

Recolhido, simulação de plataforma de negociação quantitativa de inventoreswexAppNão.BTC_USDTOs pares de negócios: Endereço:wexApp img

O robô que usa os dados do banco de dados A:img

Robô que usa dados do banco de dados B:img

wexAppPágina:img

No gráfico, você pode ver que os robôs com diferentes IDs compartilham dados da linha K usando uma fonte de dados.

Coleta de dados de linha K de qualquer ciclo

Com base nos recursos poderosos da plataforma de negociação de quantificação dos inventores, podemos facilmente obter dados da linha K de coleta de ciclos arbitrários. Por exemplo, se eu quiser coletar uma linha K de 3 minutos, e a bolsa não tem uma linha K de 3 minutos, o que acontece?

Modificamos a configuração do robô coletor, o ciclo de K-line é de 3 minutos, e o inventor quantifica a plataforma de negociação para sintetizar automaticamente 3 minutos de K-line para o programa coletor.img

Usamos os parâmetros.删除表的名称, configuração:["records"]Elimine a tabela de dados da linha K de 1 minuto que foi coletada anteriormente.

Iniciação收集器程序Reinicie.使用数据的策略机器人

img

img

Como pode ver no gráfico de linhas K desenhado, o intervalo entre os BAR é de 3 minutos, e cada BAR é um pilar de linhas K com um ciclo de 3 minutos.

No próximo passo, tentaremos realizar a necessidade de fontes de dados personalizadas. Obrigado por ler.


Relacionados

Mais.

XukittyMaravilhoso.

ZltimO topo

ZltimO topo

homilhaAbençoado

DsaidasiO topo

Sonhos pequenosEu sou um Python pequeno, lançando o pênis, se você tem uma melhor implementação ou sugestão, espero que seja perfeita.