Nós fizemos uma rede de transações online com o FMZ.

Autora:Ewing quantificação-1, Criado: 2020-10-18 23:56:01, Atualizado:

De volta ao início

A partir de então, o Vnpy começou a ser usado como uma ferramenta de pesquisa em tempo real, mas depois de um tempo de pesquisa, o Vnpy se tornou um problema. E, finalmente, a documentação do novo manual da FMZ. A partir daí, a empresa começou a trabalhar com o projeto, e depois descobriu que poderia realizar as funções que nós queríamos, tirou uma onda e discutiu isso com todos durante seis meses. A propósito, o artigo do fmz é muito pequeno, o que é útil para quem é novato, e eu só perguntei por meio de um post e percebi.

A primeira é que o usuário pode escolher o horário de início e o horário de término.我们用fmz做了在线的一个网格交易回测功能

A partir de agora, o que é necessário é uma parâmetrosidade:

我们用fmz做了在线的一个网格交易回测功能A função é uma função que parece ser uma maneira muito estranha de saber se existe alguma função que possa ser inicializada.

  self.grid_setting = {
            "min_price": min_price,
            "max_price": max_price,
            "grid_diff": grid_diff,
            "re_diff": grid_diff,
            "total_amount_B": total_amount_B
        }

Parâmetros de configuração da grade: preço mínimo, preço máximo, intervalo de distribuição da grade e intervalo de reencadeamento.

Todos os parâmetros acima são submetidos pelos usuários.

A função principal do bus é

      def bus(self):
        params = gen_params(self.begin, self.end, self.currency, self.balance, self.stocks)
        task = VCtx(params)
        done = self.train()
        ret = task.Join(True)
        benefit_cal = self.cal_benefit(ret,done)
        result = {}
        result['done'] = done
        result['ret'] = benefit_cal
        return result
  • Configuração de retorno do fmz com a função gen_params
  • Função de treinamento de execução
  • Computação de retornos e exibição de registros de transações com base na estrutura de dados devolvida pela fmz

A chamada da tarefa.Join () encerra a tarefa de retrospecção e retorna dados de valor líquido. O parâmetro Join não transmite o resultado original da retrospecção não analisada.

Por meio da documentação, eu estou tentando adivinhar o que os resultados da estratégia retornam.

Acompanhando o código com os dados de ganhos devolvidos pela fmz

    def cal_benefit(self,ret,done):
        #计算相隔多少天
        day_begin =  datetime.datetime.strptime(self.begin, '%Y-%m-%d %H:%M:%S')
        day_end =  datetime.datetime.strptime(self.end, '%Y-%m-%d %H:%M:%S')
        days = (day_end - day_begin).days
        begin = ret.iloc[0].net
        end = ret.iloc[-1].net
        fee = ret.iloc[-1].fee
        #计算一共多少次套利
        df = pd.DataFrame(done)
        #如果没有成交记录
        if len(done) == 0:
            benefit_cal = {}
            benefit_cal['benefit'] = 0
            benefit_cal['count'] = 0
            benefit_cal['fee'] = 0
            benefit_cal['benefit_p'] = 0
            return benefit_cal

        buy_count = len(df[df['type'] == 'buy'])
        sell_count = len(df[df['type'] == 'sell'])
        count = min(buy_count , sell_count)
        benefit = count * self.grid_diff * float(done[0]['amount'])
        benefit_cal = {}
        benefit_cal['benefit']= benefit
        benefit_cal['count']= count
        benefit_cal['fee']= fee
        print(benefit_cal)
        per = benefit / self.total_amount_B * 360 / days
        print(per)
        benefit_cal['benefit_p']= round( per , 4)
        return benefit_cal

Sim. Sinto-me um pouco confuso, mas primeiro vou falar sobre a ideia da nossa rede:

### Usando a ideia de um checklist pendurado * Iniciar a grade com base nos parâmetros do usuário * Listagem inicial * Verificar a transação de uma encomenda de compra e venda de acordo com o tempo

            while True:
                Sleep(1000 * 60 * 5)
                if 'refreash_data_finish!' != mid.refreash_data():
                    continue
                # 初始化网格
                if not init_flag:
                    cur_price = mid.ticker['Last']
                    grid_list = grid.cal_grid_list(cur_price)
                    init_flag = True

                # 开始挂单
                if not place_flag:
                    grid.place_orders()
                    place_flag = True

                # 开始检查订单状态及时挂单
                grid.check_order_update()
                done = grid.done

A primeira vez que vi o vídeo, eu vi o que ele estava fazendo, e eu vi o que ele fez.

O que eu quero compartilhar desta vez é expressar que a velocidade de retorno da FMZ em 14 dias basicamente atende ao tempo de espera do usuário no front-end, o mais longo é um pouco mais lento, é uma boa ferramenta de retorno quantitativo como interface, parabéns!

Sim, desta vez, voltamos a divulgar uma onda de competição de negociação, nossa equipe de quantificação da eternidade ganha organizou uma competição de negociação, livre de participação. Basta que todos forneçam a API de consulta para se inscreverem para ser bem sucedido, como uma competição de duas semanas, o nosso prêmio também é bom. Deixe um endereço de contato fengye607.


Mais informações

Ervas daninhasVocê precisa obter transações em tempo real e simular os resultados de retrospecção. Isso pode ser um pouco complicado, se apenas um par de transações pode tentar escrever seu próprio motor de retrospecção.