Type/to search
1
Follow
6
Followers
Usamos o fmz para fazer uma função de backtesting de negociação de grade online
FAQ
Created 2020-10-18 23:56:01  
 2
 5117

De volta ao ponto de partida

Eu estava procurando uma ferramenta que pudesse fazer isso em tempo real, e por um tempo eu pensei que o vnpy era um problema demais para ser uma interface.
Finalmente, o documento do guia para iniciantes da FMZ.
A partir daí, descobrimos que era possível implementar o que queríamos, tiramos uma onda e discutimos com vocês durante seis meses.
Por falar nisso, o artigo do fmz é tão pouco, que é tão útil estar no guia para iniciantes, que foi só perguntando por meio de postagens que eu percebi.

A primeira é que o usuário pode escolher a hora de início e de término.
img

O que é necessário para fazer uma parametrização:

img
Eu acho que é um método muito estranho, não sei se há alguma função que possa ser inicializada.

python
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 reposição.

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

A função principal do bus é

python
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
  • Obtenção da configuração de retorno do fmz com a função gen_params
  • Função de treino de corrida
  • Computação de taxa de retorno e exibição de registros de transações com base na estrutura de dados retornada pelo fmz

A chamada task.Join() encerrará a tarefa de resposta e retornará os dados de valor líquido. O parâmetro Join não é transmitido. True indica o retorno do resultado de resposta original não analisado, e não pode ser chamado novamente após a conclusão da transação ou função relacionada à situação.

O que eu quero dizer é que, através do documento, eu estou adivinhando o que o resultado da estratégia retorna.

O fmz retorna os dados de receita do código de cálculo

python
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

A rede de televisão é uma rede de televisão de televisão, que é uma rede de televisão de televisão, que é uma rede de televisão de televisão, que é uma rede de televisão de televisão.

O que é que se passa?

  • Primeiro, inicializar a grade com base nos parâmetros do usuário.
  • Primeira inscrição
  • Verificar periodicamente a transação da lista de compra e venda e re-instalar a lista de compra e venda de acordo com a lista
python
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 o vejo, parece-me um pouco estranho.

A primeira coisa que quero compartilhar é que o fmz, com uma velocidade de retorno de 14 dias, basicamente atende o tempo de espera do usuário no front-end, mas é um pouco mais lento, é uma boa ferramenta para o retorno quantitativo como interface.

Sim, desta vez voltamos a promover uma onda de competição de negociação, nós, a equipe de quantificação da Everwin, fizemos uma competição de negociação, de participação gratuita. Você pode se inscrever com sucesso, desde que você forneça a API de pesquisa, como um torneio de duas semanas, o nosso prêmio também é bom. Deixe o contato fengye607.

Related Recommendations
Comment
All comments (1)

    你是需要获取实时行情,然后模拟回测的结果。这样会有一些麻烦,如果只是单交易对可以试试自己写个回测引擎,也不复杂

    6 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)