Trước đây, tôi đã tìm kiếm một công cụ có thể kiểm tra lại trong thời gian thực, nghiên cứu một thời gian và cảm thấy rằng thay đổi giao diện là quá khó khăn. Cuối cùng, tôi đã quay lại tài liệu trong hướng dẫn mới của FMZ. Trong khi đó, một số nhà nghiên cứu đã phát hiện ra rằng nó có thể thực hiện các chức năng mà chúng tôi muốn, đưa ra một làn sóng và nghiên cứu với mọi người trong sáu tháng. Tuy nhiên, các bài viết trên fmz là rất ít, và nó rất hữu ích trong hướng dẫn người mới bắt đầu, nhưng tôi chỉ cần hỏi qua bài đăng để hiểu.
Điều đầu tiên là người dùng có thể tự chọn thời gian bắt đầu và thời gian kết thúc.
Điều này cần được điều chỉnh:
Tôi cảm thấy một cách rất khó khăn, không biết liệu có bất kỳ hàm nào có thể được khởi tạo.
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
}
Các tham số cấu hình lưới: giá tối thiểu, giá tối đa, khoảng cách phân bố lưới và khoảng cách đăng lại.
Các tham số trên đều được người dùng cung cấp.
Chức năng bus chính là
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
Gọi task.Join () sẽ kết thúc nhiệm vụ kiểm tra lại và trả về dữ liệu giá trị ròng. Các tham số Join không truyền True trả về kết quả kiểm tra lại không phân tích ban đầu, và không thể gọi các hàm liên quan đến giao dịch hoặc thị trường sau khi kết thúc.
Thông qua tài liệu, tôi đang đoán những gì kết quả chiến lược sẽ trở lại.
Các mã tính toán với các dữ liệu thu nhập trả về 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
Đúng rồi. Có vẻ hơi lộn xộn, nhưng trước tiên tôi sẽ nói về ý tưởng của mạng lưới của chúng tôi:
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
Có lẽ đó là điều mà bạn có thể thấy hơi khó hiểu lúc đầu.
Điều tôi muốn chia sẻ lần này chính là muốn thể hiện tốc độ lặp lại của FMZ trong 14 ngày về cơ bản có thể đáp ứng thời gian chờ đợi của người dùng ở phía trước, lâu hơn thì chậm hơn một chút, là một công cụ tốt để định lượng lặp lại như một giao diện, cảm ơn một!
Đúng vậy, lần này chúng tôi đã trở lại quảng cáo một đợt thi đấu giao dịch, nhóm định lượng vĩnh cửu của chúng tôi đã tổ chức một cuộc thi giao dịch, tham gia miễn phí. Nếu bạn cung cấp API truy vấn, bạn có thể đăng ký thành công, và là một cuộc thi hai tuần, bạn cũng có thể thưởng cho chúng tôi.
Cỏ nhỏBạn cần phải có được các giao dịch trong thời gian thực và sau đó mô phỏng kết quả kiểm tra. Điều này có thể gây ra một số rắc rối, nếu chỉ là một cặp giao dịch, bạn có thể thử viết một công cụ kiểm tra của riêng bạn, cũng không phức tạp.