avatar of 永赢量化-1 永赢量化-1
fokus pada Pesan pribadi
1
fokus pada
6
Pengikut

Kami menggunakan fmz untuk melakukan fungsi pengujian ulang perdagangan grid online

Dibuat di: 2020-10-18 23:56:01, diperbarui pada:
comments   2
hits   4457

Kembali ke titik awal

Sebelumnya, saya telah mencari alat yang dapat melakukan pengamatan secara real-time, dan selama beberapa waktu saya telah mempelajari apakah vnpy terasa terlalu rumit untuk diubah menjadi antarmuka. Akhirnya, saya membaca dokumen di buku panduan pemula FMZ. Kami menemukan sebuah aplikasi yang bisa melakukan apa yang kami inginkan, kami mengambilnya dan mengulasnya selama 6 bulan. Saya tidak tahu apa-apa tentang fmz, karena saya tidak tahu apa-apa tentang fmz, saya tidak tahu apa-apa tentang fmz, saya tidak tahu apa-apa tentang fmz, saya tidak tahu apa-apa tentang fmz, saya tidak tahu apa-apa tentang fmz, saya tidak tahu apa-apa tentang fmz.

Pertama, pengguna dapat memilih kapan waktu mulai dan kapan waktu berakhirnya, jadi Kami menggunakan fmz untuk melakukan fungsi pengujian ulang perdagangan grid online

Hal ini membutuhkan parameterisasi:

Kami menggunakan fmz untuk melakukan fungsi pengujian ulang perdagangan grid online Saya tidak tahu apakah ada fungsi yang dapat di-inisialisasi.

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, maksimum harga, interval distribusi grid dan interval re-listing.

Ini adalah parameter yang dikirimkan oleh pengguna.

Fungsi bus utama adalah

    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 pengembalian dari fmz dengan fungsi gen_params yang baru saja saya gunakan
  • Fungsi pelatihan berjalan
  • Struktur data yang dikembalikan oleh fmz, menghitung tingkat pengembalian dan menampilkan catatan transaksi

Panggilan task.Join() akan mengakhiri tugas pengembalian dan mengembalikan data nilai bersih.

Dengan menggunakan dokumen, saya menebak apa yang akan dikembalikan oleh strategi tersebut.

Kode yang terlampir dari 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

Ya, saya merasa sedikit bingung, tapi saya ingin menjelaskan apa yang saya pikirkan tentang jaringan kami:

Menggunakan metode pemeriksaan daftar isi

  • Pertama, menginisialisasi grid berdasarkan parameter pengguna.
  • Pertama kali mendaftar
  • Memeriksa transaksi yang tercantum secara berkala, dan kemudian menyalin kembali sesuai dengan 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 itu saja, mungkin tidak sepantasnya untuk pertama kalinya.

Kali ini saya ingin berbagi dengan Anda bahwa fmz dalam waktu 14 hari dapat melakukan pengembalian data dengan kecepatan yang cukup untuk memenuhi waktu tunggu pengguna di front-end, dan jika Anda menunggu lebih lama, pengembalian data akan menjadi lebih lambat, dan ini adalah pengembalian data kuantitatif yang bagus untuk digunakan sebagai antarmuka.

Ya, kali ini kami kembali untuk mengiklankan sebuah kompetisi perdagangan, kami tim kuantitatif yang menang selamanya mengadakan kompetisi perdagangan, gratis untuk berpartisipasi. Anda dapat mendaftar dengan sukses selama Anda memberikan API permintaan, sebagai kompetisi dua minggu, poin kami juga bagus.