Type/to search
1
Follow
6
Followers
Kami menggunakan fmz untuk melakukan fungsi ujian belakang perdagangan grid dalam talian
FAQ
Created 2020-10-18 23:56:01  
 2
 5117

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.
img

Ia perlu diparameterkan:

img
Saya tidak tahu apakah ada fungsi yang boleh di-initialize.

python
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

python
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

python
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
python
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.

Related Recommendations
Comment
All comments (1)

    你是需要获取实时行情,然后模拟回测的结果。这样会有一些麻烦,如果只是单交易对可以试试自己写个回测引擎,也不复杂

    6 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)