Ich habe schon lange nach Tools gesucht, die in Echtzeit nachvollziehen können, und ich habe eine Zeit lang geforscht, ob es zu mühsam ist, von vnpy zu einer Schnittstelle zu werden. Schließlich wurde die Dokumentation in FMZs Anfängerhandbuch aufgerufen. Wir haben herausgefunden, dass es die Funktionen, die wir wollten, umsetzen kann, und wir haben es für ein halbes Jahr ausprobiert. Ich habe es in der Anleitung für Anfänger gelesen, aber ich habe es erst nach dem Posten erfahren.
Das erste ist, dass der Benutzer die Start- und Endzeit selbst wählen kann.

Das muss parametriert werden:
Es ist eine sehr schwierige Methode, nicht zu wissen, ob irgendwelche Funktionen initialiert werden können.
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
}
Grid-Konfigurationsparameter: Minimum, Maximum, Distributionsintervalle des Grids und Intervalle für die erneute Auflistung.
Die oben genannten Parameter wurden von Nutzern eingereicht.
Die primäre Busfunktion ist
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
Ein Aufruf von task.Join() beendet die Rückmessung und gibt die Nettowertdaten zurück. Die Join-Parameter werden nicht übertragen. True gibt die ursprüngliche, nicht analysierte Rückmessung zurück, und nach Beendigung können keine Transaktions- oder Sachbezogenen mehr aufgerufen werden.
Ich meine, durch die Dokumentation, was ich meine, was die Strategie zurückgibt.
Der Code für die fmz-Rendite ist mit den folgenden Daten berechnet:
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
Ich habe mich etwas verwirrt gefühlt, aber ich möchte zuerst über unser Netz sprechen:
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
Das ist wahrscheinlich so, vielleicht ist es zum ersten Mal ein wenig verrückt.
Diesmal möchte ich vor allem sagen, dass die Geschwindigkeit, mit der fmz die Rückmeldung innerhalb von 14 Tagen erstellt hat, im Wesentlichen die Wartezeit der Benutzer am Frontend befriedigt, und wenn sie länger ist, ist sie etwas langsamer, und es ist ein gutes Werkzeug für quantitative Rückmeldungen als Schnittstelle, danke!
Ja, diesmal sind wir wieder zurück, um eine Welle von Handelswettkämpfen zu promoten, und unser Everwin Quantitative Team hat eine Handelswettkämpfe organisiert, an denen wir kostenlos teilnehmen können. Solange Sie die Anfrage-API bereitstellen, können Sie sich erfolgreich anmelden.