Kami menggunakan FMZ untuk membuat retargeting perdagangan dalam talian.

Penulis:Mengurangkan kuantiti -1., Dicipta: 2020-10-18 23:56:01, Dikemas kini:

Kembali ke tempat asal

Sebelum ini, saya telah mencari alat yang dapat mengulangi masa nyata, dan untuk beberapa waktu, vnpy berasa terlalu rumit untuk mengubahnya menjadi antara muka. Akhirnya, saya kembali ke dokumen dalam panduan baru FMZ. Kami telah melihat bahawa ia dapat mencapai fungsi yang kami mahukan, dan kami telah mengeluarkan satu gelombang, dan kami telah membincangkannya dengan anda selama enam bulan. Fmz mempunyai sedikit artikel yang sangat berguna untuk panduan pemula, tetapi ketika itu saya hanya bertanya melalui posting dan saya faham.

Pertama, pengguna boleh memilih masa permulaan dan akhir.img

Ini adalah satu perkara yang perlu diparameterkan:

imgSaya rasa ia adalah satu cara yang tidak masuk akal, saya tidak tahu sama ada terdapat fungsi yang boleh dimulakan.

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: harga minimum, maksimum, selang pembahagian grid dan selang penyambungan semula.

Ini adalah parameter yang dikemukakan 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 ulangan fmz dengan fungsi gen_params yang baru sahaja dibuat
  • Fungsi Latihan Berlari
  • Mengikut struktur data yang dikembalikan oleh fmz, mengira pulangan dan memaparkan rekod urus niaga

Panggilan task.Join ((() akan menamatkan tugas penjumlahan dan mengembalikan data bersih. Parameter Join tidak menyampaikan True yang mengembalikan hasil penjumlahan semula yang tidak dianalisis semula, dan tidak boleh memanggil lagi fungsi berkaitan dagangan atau pasaran selepas selesai.

Dengan dokumen, saya meneka apa yang akan dikembalikan oleh hasil strategi.

Kod yang digabungkan dengan fmz kembali data keuntungan dikira

  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 rasa agak keliru, tetapi saya akan memberitahu anda tentang idea grid kami:

Mengambil idea untuk menyemak senarai gantung

  • Pertama, initialize grid berdasarkan parameter pengguna.
  • Penyenaraian pertama
  • Memeriksa keadaan urus niaga dalam order yang telah dipaparkan pada masa yang sesuai, dan memaparkan semula order mengikut order yang telah dipaparkan
          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 begitu, mungkin kelihatan agak pelik pada mulanya.

Fmz dalam 14 hari pada dasarnya dapat memenuhi masa tunggu pengguna di bahagian depan, semakin lama, sedikit lebih lambat, adalah alat yang baik untuk mengutip fmz sebagai antara muka, selamat satu!

Ya, kali ini kami kembali untuk mengiklankan perlumbaan perdagangan, pasukan kuantiti kekal kami mengadakan perlumbaan dagangan, bebas untuk mengambil bahagian. Jika anda memberikan API pertanyaan, anda boleh mendaftar untuk berjaya, sebagai perlumbaan dua minggu, hadiah kami juga bagus. Tinggalkan alamat hubungan fengye607.


Lebih lanjut

RumputAnda perlu mendapatkan transaksi secara langsung, dan kemudian meniru hasil penyesuaian. Ini akan menjadi sedikit masalah, jika hanya satu pasangan transaksi, anda boleh cuba menulis enjin penyesuaian sendiri, tidak rumit.