avatar of 永赢量化-1 永赢量化-1
Suivre Messages privés
1
Suivre
6
Abonnés

Nous avons utilisé fmz pour réaliser une fonction de backtesting de trading en ligne sur grille

Créé le: 2020-10-18 23:56:01, Mis à jour le:
comments   2
hits   4457

Retour à la source

J’ai cherché des outils qui permettent de faire des retours en temps réel, et j’ai étudié pendant un certain temps le fait que vnpy ressemble à une interface, mais c’était trop compliqué. Pour terminer, je me suis tourné vers le document du guide pour débutants de fmz. J’ai trouvé des fonctionnalités qui nous permettraient de réaliser ce que nous voulions, et je les ai utilisées pendant six mois pour en discuter avec vous. Par ailleurs, c’est vrai que les articles de fmz sont très peu nombreux, mais c’est tellement utile d’être dans un guide pour débutants que je n’ai pas compris avant d’avoir posé la question.

La première est que l’utilisateur peut choisir son heure de début et de fin. Nous avons utilisé fmz pour réaliser une fonction de backtesting de trading en ligne sur grille

Il faut paramétrer cette chose:

Nous avons utilisé fmz pour réaliser une fonction de backtesting de trading en ligne sur grille C’est une méthode qui me paraît assez maladroite, je ne sais pas si je peux initialier une fonction.

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
      }

Paramètres de configuration de la grille: prix minimum, prix maximum, intervalle de distribution de la grille et intervalle de réaffichage.

Les paramètres ci-dessus ont été soumis par les utilisateurs.

La fonction bus principale est

    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
  • Obtenir la configuration de retour de fmz avec la fonction gen_params que nous venons de voir
  • Fonction d’entraînement en cours d’exécution
  • Structure de données basée sur les retours de fmz, calcul des taux de rendement et affichage des enregistrements de transactions

L’appel task.Join() terminera la tâche de retour et renverra les données de valeur nette. Le paramètre de jointure n’est pas transmis. True renvoie le résultat de retour initialement non analysé.

J’ai vu un article sur le site de l’agence de presse américaine The New York Times, et j’ai vu un article sur le site de l’agence de presse américaine The New York Times.

Le code de calcul de la donnée de rendement renvoyée par 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

C’est vrai. Je suis un peu confus, mais je vais d’abord vous parler de notre réseau:

Le système de vérification des listes de contrôle

  • Initializez la grille en fonction des paramètres de l’utilisateur
  • Première inscription
  • Vérifiez régulièrement la transaction sur la liste d’achat et de vente et ré-inscrivez la liste en fonction de celle-ci.
          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

C’est peut-être ça, mais à première vue, c’est un peu bizarre.

Cette fois, je voulais surtout partager le fait que la vitesse à laquelle fmz réalise ses analyses en 14 jours est essentiellement suffisante pour satisfaire le temps d’attente des utilisateurs sur le front-end, et qu’elle est un peu plus lente si elle est plus longue, c’est un bon outil de révision quantitative en tant qu’interface.

C’est vrai, cette fois-ci, nous sommes de retour pour promouvoir une vague de concours de trading, notre équipe de quantification de l’éternelle victoire a organisé un concours de trading, participation gratuite. Tant que vous fournissez une API de requête, vous pouvez vous inscrire avec succès, en tant que concours de deux semaines, notre bonus est également bon.