avatar of 永赢量化-1 永赢量化-1
fokus pada mesej peribadi
1
fokus pada
6
Pengikut

Kami menggunakan fmz untuk melakukan fungsi ujian belakang perdagangan grid dalam talian

Dicipta dalam: 2020-10-18 23:56:01, dikemas kini pada:
comments   2
hits   4457

Kembali ke asal

Sebelum ini, saya telah mencari alat yang boleh mengesan semula dalam masa nyata, dan telah lama mengkaji apakah vnpy terasa terlalu rumit untuk diubah menjadi antara muka. Akhirnya, saya terjumpa dokumentasi dalam panduan pemula FMZ. Kami mendapati ia mempunyai fungsi yang kami mahukan, kami mengambilnya dan membincangkannya selama 6 bulan. Saya tidak tahu apa-apa tentang blog ini, tetapi saya tidak tahu apa-apa tentang blog ini, kerana saya tidak tahu apa-apa tentang blog ini, dan saya tidak tahu apa-apa tentang blog ini.

Pertama, pengguna boleh memilih masa mula dan masa berakhir, jadi ia adalah satu perkara yang penting. Kami menggunakan fmz untuk melakukan fungsi ujian belakang perdagangan grid dalam talian

Ia perlu diparameterkan:

Kami menggunakan fmz untuk melakukan fungsi ujian belakang perdagangan grid dalam talian Saya tidak tahu apakah ada fungsi yang boleh di-initialize.

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
      }

Parameter konfigurasi grid: minimum, harga maksimum, selang pengedaran grid dan selang penempatan semula.

Ini adalah parameter yang dihantar oleh pengguna.

Fungsi bus utama ialah

    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
  • Dapatkan konfigurasi pengemasan balik fmz dengan fungsi gen_params
  • Fungsi latihan berjalan
  • Struktur data yang dikembalikan oleh fmz, mengira kadar pulangan dan memaparkan rekod dagangan

Panggilan task.Join() akan menamatkan tugas pengukuran semula dan mengembalikan data nilai bersih. Parameter Join tidak diteruskan. True menunjukkan hasil pengukuran semula yang tidak dianalisis, dan tidak dapat memanggil fungsi yang berkaitan dengan transaksi atau keadaan selepas selesai.

Dari segi dokumen, saya cuba meneka apa yang akan dikembalikan oleh hasil strategi tersebut.

Kode yang dikira dengan data pendapatan yang dikembalikan oleh 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

Saya rasa ia agak mengelirukan, tetapi saya ingin berkongsi dengan anda apa yang kami fikirkan mengenai rangkaian kami:

Menggunakan kaedah pemeriksaan berlambatan

  • Mulakan grid berdasarkan parameter pengguna
  • Permohonan pertama
  • Pemeriksaan berkala mengenai transaksi yang telah dilampirkan, dan kemudian dilampirkan semula mengikut pesanan
          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

Mungkin ini yang anda fikirkan, mungkin ia agak pelik pada pandangan pertama.

Saya ingin berkongsi dengan anda bahawa FMZ dalam tempoh 14 hari telah mencapai kelajuan yang cukup untuk memenuhi masa menunggu pengguna di front-end, dan jika ia lebih lama, ia akan menjadi lebih lambat, dan ini adalah alat yang baik untuk mengukur semula sebagai antara muka, terima kasih!

Ya, kali ini kami kembali untuk mengiklankan pertandingan perdagangan, pasukan kuantitatif yang tidak pernah menang mengadakan pertandingan perdagangan, penyertaan percuma. Anda boleh mendaftar dengan berjaya dengan hanya memberikan API pertanyaan, dan sebagai pertandingan dua minggu, mata wang kami juga bagus.