Wir haben mit FMZ eine Netzwerk-Transaktions-Rückruffunktion online gemacht.

Schriftsteller:Einmal gewinnen, Erstellt: 2020-10-18 23:56:01, aktualisiert:

Zurück zum Anfang

Ich war schon lange auf der Suche nach einem Werkzeug, das in Echtzeit zurückspielt, und ich habe vnpy für eine Weile untersucht, aber es war zu schwierig, die Schnittstelle zu ändern. Und dann schauen wir uns endlich die Dokumente in FMZs neuen Handbuch an. Ich habe die Funktionen gefunden, die wir wollten, und ich habe eine Welle herausgebracht, die wir sechs Monate lang mit euch besprochen haben. Ich habe die Frage, ob ich in der Zeit, in der ich auf FMZ arbeitete, die Art und Weise, in der ich mich in der Vergangenheit verhalten habe, nicht erfahren habe.

Die erste ist, dass der Benutzer die Start- und Endzeit frei wählen kann.img

Das Ding muss parametriert werden:

imgEs fühlt sich ziemlich schwierig an, zu wissen, ob irgendwelche Funktionen initialiert werden können.

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
      }

Gridkonfigurationsparameter: Mindest- und Maximalpreis, Verteilungsspanne für die Gitter und Wiederverlinkungsspanne.

Das sind die von den Benutzern eingegebenen Parameter.

Die Hauptbusfunktion ist:

    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
  • Erhalten Sie die Wiederholungskonfiguration von fmz mit der eben gen_params Funktion
  • Lauf-Training-Funktionen
  • Berechnung der Rendite und Anzeige der Transaktionsprotokolle basierend auf der Datenstruktur, die fmz zurückgibt

Ein Aufruf von task.Join (() beendet die Rückmeldung und gibt die Netto-Daten zurück. Der Join-Parameter gibt keine True-Ergebnisse zurück, die nicht analysiert wurden.

Ich habe mich mit der Dokumentation beschäftigt, um zu erraten, was die Ergebnisse der Strategie bedeuten.

Das ist der Code, der die Ertragsdaten von fmz zurückgibt.

  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

Das ist ein bisschen verwirrend, aber ich möchte erst mal über unsere Netzwerk-Idee sprechen:

Das Projekt wurde mit der Idee eines Aufhängungs-Checks durchgeführt.

  • Zuerst initialieren Sie die Gitter nach den Parametern des Benutzers.
  • Erste Auflistung
  • Überprüfen Sie die Transaktionen der Aufschriften rechtzeitig, und Sie können die Aufschriften entsprechend neu anmelden
          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

Ich glaube, das ist es, vielleicht sieht es anfangs komisch aus.

Ich möchte Ihnen vor allem sagen, dass FMZ die Geschwindigkeit der Wiederholung in 14 Tagen grundsätzlich für die Wartezeit der Benutzer im Frontend erfüllen kann, länger ist es ein wenig langsamer.

Ja, wir sind wieder zurück, um eine Welle von Transaktionen zu verbreiten. Unser Team von EverWin Quantity hat ein Transaktionswettbewerb organisiert, an dem Sie kostenlos teilnehmen können.


Mehr

Das GrasSie müssen die Ergebnisse der Echtzeitverhandlungen abrufen und dann simulieren. Das kann ein wenig schwierig sein, wenn es nur ein einziges Transaktionspaar ist. Es ist nicht kompliziert, selbst eine Echtzeit-Engine zu schreiben.