Các tham số | Có cần thiết không | Mô tả |
---|---|---|
upper_price | Không | Giá trên biên giới mạng |
giá thấp hơn | Không | Giá bên dưới đường lưới |
grid_num | Không | Số lưới (độ khác nhau) |
khoảng thời gian | Không | Khoảng cách lưới (tương đương) |
mặt | Không | Hỗ trợ truyền tảilong ,short Không điền là mặc địnhlong |
Dữ liệu | Không | Có thông tin lưới, kiểu là từ điển |
# 创建了一个价格1000-800,数量为10的等差网格
GridPriceManager(upper_price=1000, lower_price=800, grid_num=10)
# 创建了一个价格1000-800,间隔为1%的等比网格
GridPriceManager(upper_price=1000, lower_price=800, interval=1)
# 传入已有网格信息
data = {
"grid_list": {99:None,100:None,101:None,102:None,103:None,104:None},
"interval": None,
"upper_price": 104,
"lower_price": 99,
"grid_num": 6,
"side": "long",
"grid_diff": 1,
"type": "等差",
}
GridPriceManager(Data=data)
Các tham số | Có cần thiết không | Mô tả |
---|---|---|
grid_list | Vâng | Giá lưới và thông tin đặt hàng được lưu trữ với giá trị khóa, key là giá, value là id đặt hàng |
khoảng thời gian | Vâng | |
upper_price | Vâng | |
giá thấp hơn | Vâng | |
grid_num | Vâng | |
mặt | Vâng | |
grid_diff | Vâng | |
loại | Vâng | Tỷ lệ tương đương |
get_nearest_buy_price (giá hiện tại)
Nhận giá mua gần đây
Các tham số | Có cần thiết không | Mô tả |
---|---|---|
giá hiện tại | Vâng | Nhập giá để tìm giá mua gần đây nhất |
get_nearest_sell_price (giá hiện tại)
Nhận giá bán gần đây
Các tham số | Có cần thiết không | Mô tả |
---|---|---|
giá hiện tại | Vâng | Nhập giá để tìm giá bán gần đây nhất |
base_position ((ticker))
Lỗ dưới
Các tham số | Có cần thiết không | Mô tả |
---|---|---|
ticker | Vâng | Mở khoang cuối để mở lưới, chức năng này sẽ thực hiện chức năng gọi lạievent Sự kiệnbase_position |
add_order ((order_id)
Thêm các danh sách trên và dưới lưới
Các tham số | Có cần thiết không | Mô tả |
---|---|---|
order_id | Vâng | Chức năng id của việc thêm hàng đính kèm lên và xuống lưới, chuyển vào kho lưu trữ hoặc giao dịch sẽ tìm kiếm lưới lên và xuống của id này, và chức năng này sẽ thực hiện hàm gọi lạievent Sự kiệnadd_order |
hủy_định lệnh (định lệnh)
Lệnh bị hủy
Các tham số | Có cần thiết không | Mô tả |
---|---|---|
order_id | Vâng | Quay lại lệnh được chỉ định, chức năng này thực hiện chức năng gọi lạievent Sự kiệncancel_order |
Sự kiện là một hàm gọi lại được chỉ định được gọi trong quá trình thực hiện hàm, ở đây liên tục sử dụng hàm event để truyền các sự kiện được chỉ định, chế độ trang trí
gm = GridPriceManager(1000, 800, 10)
# 底仓事件,在调用base_position方法时会触发此事件
@gm.event('base_position')
def base_position(price):
# 传入最近的网格价格,以此价格作为买入价格参考
print(price)
return 123456 # 返回底仓订单,manger将订单记录
Sự kiện | Có cần thiết không | Bị lây lan | Trở lại |
---|---|---|---|
base_position | Vâng | giá, giá mua, loại float | Đơn đặt hàng |
add_order | Không | price, buy into grid price, dict type, { |
Với dict nhập cùng định dạng, tương ứng với id giao dịch lưới trên, id giao dịch lưới dưới |
cancel_order | Không | order_id, chỉ định loại lệnh id, int hoặc str để hủy | bool, có hủy thành công không |
thay đổi | Không | grid_list | Một sự thay đổi thông tin mạng đã gây ra sự cố này. |
class GridPriceManager: def __init__(self, Data=None, upper_price=None, lower_price=None, interval=None, grid_num=None, side: Literal['long','short']='long') -> dict: self.interval = interval self.upper_price = upper_price self.lower_price = lower_price self.grid_num = grid_num self.side = side self.grid_diff = None self.type = None # 网格类型 if self.grid_num is not None: self.grid_diff = (self.upper_price - self.lower_price) / (self.grid_num - 1) if Data is None: if self.interval is None: self.grid_list = self._generate_grid_list_difference() self.type = "等差" else: self.grid_list = self._generate_grids_list_ratio() self.type = "等比" else: self.grid_list = Data["grid_list"] self.interval = Data["interval"] self.upper_price = Data["upper_price"] self.lower_price = Data["lower_price"] self.grid_num = Data["grid_num"] self.side = Data["side"] self.grid_diff = Data["grid_diff"] self.type = Data["type"] self.data = f"网格类型: {self.type}, 网格数量: {len(self.grid_list)}, 上下区间: [{self.upper_price}-{self.lower_price}, 方向: {self.side}]" self.callback = {} def event(self, event_name): """事件""" def decorator(func): self.callback[event_name] = func return func return decorator def _generate_grid_list_difference(self) -> dict: """等差网格生成""" grid_list = {} price = self.lower_price for _ in range(self.grid_num): grid_list[price] = None price += self.grid_diff grid_list[self.upper_price] = None return grid_list def _generate_grids_list_ratio(self) -> dict: """等比网格生成""" ratio = 1 + self.interval / 100 grid = [self.lower_price * (ratio ** i) for i in range(-100, 101)] return {round(g, 8): None for g in grid if self.lower_price <= g <= self.upper_price} def get_nearest_buy_price(self, current_price) -> float: """获取最近网格买入价格""" nearest_price = None for price in sorted(self.grid_list.keys()): if price > current_price: break nearest_price = price return nearest_price def get_nearest_sell_price(self, current_price) -> float: """获取最近网格卖出价格""" nearest_price = None for price in sorted(self.grid_list.keys(), reverse=True): if price < current_price: break nearest_price = price return nearest_price def base_position(self, ticker) -> Union[str, int]: """底仓""" if self.side == "short": t = self.get_nearest_sell_price(ticker) else: t = self.get_nearest_buy_price(ticker) order_id = self.callback["base_position"](t) self.grid_list[t] = order_id self.callback["change"](self.grid_list) return order_id def add_order(self, order_id) -> Union[Dict, bool]: """增加网格上下挂单""" up_price = None down_price = None ticker = None keys = list(self.grid_list.keys()) for i in range(len(keys)-1): if self.grid_list[keys[i]] == order_id: ticker = keys[i] try: if self.side is None or self.side == "long": up_price = keys[i+1] down_price = keys[i-1] else: up_price = keys[i-1] down_price = keys[i+1] except IndexError: return False break PriceDict = {"up": up_price, "down": down_price} d = self.callback["add_order"](PriceDict) d = {"up": d["up"], "down": d["down"]} self.grid_list[up_price] = d["up"] self.grid_list[down_price] = d["down"] self.grid_list[ticker] = None self.callback["change"](self.grid_list) return d def cancel_order(self, order_id): """撤销订单""" result = self.callback["cancel_order"](order_id) if result == True: for items in self.grid_list.items(): if items[1] == order_id: self.grid_list[items[0]] = None self.callback["change"](self.grid_list) break def main(): gm = GridPriceManager(1000, 500, 10) @gm.event('add_order') def add_order(price): print(price) return { 'up': 36543, 'down': 87957, } @gm.event('cancel_order') def cancel_order(order_id): return True @gm.event('base_position') def base_position(price): print(price) return 123456 a = gm.base_position(600) print(a) a = gm.add_order(123456) print(gm.grid_list) gm.cancel_order(87957) print(gm.grid_list)