Type/to search
1
Follow
6
Followers
Usamos fmz para realizar una función de backtesting de comercio de cuadrícula en línea
FAQ
Created 2020-10-18 23:56:01  
 2
 5117

Regreso al punto de partida

Antes de buscar una herramienta que pudiera hacer un retroceso en tiempo real, había estudiado durante un tiempo si era demasiado difícil que vnpy se convirtiera en una interfaz.
Por último, busqué en el manual de novatos de FMZ.
En este post, el autor de este post, el blogger y bloguero de la web, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social, el blogger y bloguero de la red social.
Por cierto, los artículos de fmz son muy escasos, es tan útil que está en la guía para principiantes, que solo se entendió preguntando por el post.

La primera es que el usuario puede elegir la hora de inicio y la hora de finalización.
img

Esto necesita ser parametrizado:

img
Si no hay una función que se inicie, entonces no hay una función que se inicie, pero si hay una función que se inicie, entonces no hay una función que se inicie.

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 configuración de la cuadrícula: mínimo, máximo precio, intervalo de distribución de la cuadrícula y intervalo de reinstalación.

Estos son los parámetros que han sido enviados por los usuarios.

La función principal del bus es

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
  • Obtenga la configuración de retroceso de fmz con la función gen_params que hemos mencionado
  • Función de entrenamiento de ejecución
  • Basado en la estructura de los datos devueltos por fmz, calcula la rentabilidad y muestra el registro de transacciones

La invocación de task.Join() terminará la tarea de respuesta y devolverá datos de valor neto. El parámetro de unión no se transmite. True indica que se devuelve el resultado de la respuesta original sin analizar, y después de la finalización no se puede volver a llamar a la función relacionada con la transacción o la situación.

A través de la documentación, me refiero a lo que se devuelve como resultado de la estrategia de adivinar.

El código de cálculo de los datos de ganancias que se adjunta a la devolución de fmz

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

Sí. Me siento un poco desorientado, pero primero quiero hablar de lo que pensamos de nuestra red:

Se realizan mediante el método de la inspección de la ficha

  • Primero inicializa la grilla de acuerdo con los parámetros del usuario
  • Suscribirse por primera vez
  • Revisar periódicamente las transacciones de los listados de compra y venta y volver a colocarlos de acuerdo con los mismos.
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

En la actualidad, la mayoría de los bloggers de la red social de noticias de la India están interesados en el tema, y se han convertido en fanáticos de este tema.

La velocidad de respuesta de fmz en 14 días es básicamente suficiente para satisfacer el tiempo de espera de los usuarios en el front-end, y es un poco más lento, es una buena herramienta de respuesta cuantitativa como interfaz, ¡saludo!

Sí, esta vez volvemos a promocionar una ola de competición de comercio, nuestro equipo de Cantificación de Ganancias Infinitas organizó una competición de comercio, participación gratuita. Siempre que todos ofrezcan la API de consulta, pueden inscribirse y tener éxito, como un torneo de dos semanas, también es bueno para ganar nuestro premio.

Related Recommendations
Comment
All comments (1)

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

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