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.

Ia perlu diparameterkan:
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
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:
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.