| | |
| | | import inited_data |
| | | from l2 import l2_data_manager_new, l2_data_manager, l2_data_log, l2_log, code_price_manager |
| | | import l2_data_util |
| | | from l2.cancel_buy_strategy import HourCancelBigNumComputer, L2LimitUpMoneyStatisticUtil, LCancelBigNumComputer |
| | | from l2.cancel_buy_strategy import HourCancelBigNumComputer, LCancelBigNumComputer |
| | | import l2.l2_data_util |
| | | |
| | | from output import code_info_output |
| | |
| | | |
| | | |
| | | class MyTCPServer(socketserver.TCPServer): |
| | | def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, pipe_juejin=None, pipe_ui=None): |
| | | self.pipe_juejin = pipe_juejin # 增加的参数 |
| | | def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, pipe_trade=None, pipe_ui=None): |
| | | self.pipe_trade = pipe_trade # 增加的参数 |
| | | self.pipe_ui = pipe_ui |
| | | # 初始化数据 |
| | | block_info.init() |
| | |
| | | def setup(self): |
| | | super().setup() # 可以不调用父类的setup()方法,父类的setup方法什么都没做 |
| | | # print("----setup方法被执行-----") |
| | | # print("打印传入的参数:", self.server.pipe) |
| | | # print("打印传入的参数:", self.server.pipe_trade) |
| | | self.l2CodeOperate = l2_code_operate.L2CodeOperate.get_instance() |
| | | |
| | | def __notify_trade(self, type_): |
| | | if self.server.pipe_trade: |
| | | self.server.pipe_trade.send(json.dumps({"type": type_})) |
| | | |
| | | def handle(self): |
| | | host = self.client_address[0] |
| | |
| | | raise Exception('未到接受时间') |
| | | # 首板代码 |
| | | dataList, is_add = data_process.parseGPCode(_str) |
| | | tick_datas = first_target_code_data_processor.process_first_codes_datas(dataList) |
| | | tick_datas = first_target_code_data_processor.process_first_codes_datas(dataList) |
| | | # 保存现价 |
| | | self.first_tick_datas.clear() |
| | | self.first_tick_datas.extend(tick_datas) |
| | |
| | | apply_time = item["apply_time"] |
| | | if apply_time and len(apply_time) >= 8: |
| | | code = item["code"] |
| | | trade_state = trade_manager.get_trade_state(code) |
| | | trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | # 设置下单状态的代码为已委托 |
| | | if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER: |
| | | origin_apply_time = apply_time |
| | |
| | | client = datas["client"] |
| | | money = datas["money"] |
| | | # TODO存入缓存文件 |
| | | trade_manager.set_available_money(client, money) |
| | | trade_manager.AccountAvailableMoneyManager().set_available_money(client, money) |
| | | # l2交易队列 |
| | | elif type == 10: |
| | | # 可用金额 |
| | |
| | | limit_up_price = gpcode_manager.get_limit_up_price(code) |
| | | |
| | | if limit_up_price is not None: |
| | | code_price_manager.Buy1PriceManager.process(code, buy_one_price, buy_time, limit_up_price, |
| | | sell_one_price, sell_one_volumn) |
| | | code_price_manager.Buy1PriceManager().process(code, buy_one_price, buy_time, limit_up_price, |
| | | sell_one_price, sell_one_volumn) |
| | | _start_time = time.time() |
| | | msg += "买1价格处理:" + f"{_start_time - __start_time} " |
| | | |
| | |
| | | decimal.Decimal("0.00")) |
| | | # 获取执行位时间 |
| | | |
| | | buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate = l2_data_manager.TradePointManager.get_buy_compute_start_data( |
| | | buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate = l2_data_manager.TradePointManager().get_buy_compute_start_data( |
| | | code) |
| | | if True: |
| | | # 只有下单过后才获取交易进度 |
| | |
| | | buy_queue_result_list, |
| | | exec_time) |
| | | if buy_progress_index is not None: |
| | | HourCancelBigNumComputer.set_trade_progress(code, buy_time, buy_exec_index, |
| | | buy_progress_index, |
| | | l2.l2_data_util.local_today_datas.get( |
| | | code), |
| | | l2.l2_data_util.local_today_num_operate_map.get( |
| | | code)) |
| | | LCancelBigNumComputer.set_trade_progress(code, buy_progress_index, |
| | | l2.l2_data_util.local_today_datas.get( |
| | | code)) |
| | | HourCancelBigNumComputer().set_trade_progress(code, buy_time, |
| | | buy_exec_index, |
| | | buy_progress_index, |
| | | l2.l2_data_util.local_today_datas.get( |
| | | code), |
| | | l2.l2_data_util.local_today_num_operate_map.get( |
| | | code)) |
| | | LCancelBigNumComputer().set_trade_progress(code, buy_progress_index, |
| | | l2.l2_data_util.local_today_datas.get( |
| | | code)) |
| | | |
| | | logger_l2_trade_buy_queue.info("获取成交位置成功: code-{} index-{} 数据-{}", code, |
| | | buy_progress_index, |
| | |
| | | price) |
| | | # if need_cancel: |
| | | # l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, cancel_msg, "trade_queue") |
| | | if need_sync: |
| | | # 同步数据 |
| | | L2LimitUpMoneyStatisticUtil.verify_num(code, volumn, time_) |
| | | # if need_sync: |
| | | # # 同步数据 |
| | | # L2LimitUpMoneyStatisticUtil.verify_num(code, volumn, time_) |
| | | elif type == 30: |
| | | # 心跳信息 |
| | | data = data_process.parse(_str)["data"] |
| | |
| | | data = json.loads(_str) |
| | | code = data["data"]["code"] |
| | | if code: |
| | | state = trade_manager.get_trade_state(code) |
| | | state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_CANCEL_ING: |
| | | try: |
| | | l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, "手动撤销") |
| | |
| | | gpcode_manager.CodesNameManager.add_first_code_name(code, results[code]) |
| | | |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("black_list") |
| | | elif type == 202: |
| | | # 加入白名单 |
| | | data = json.loads(_str) |
| | |
| | | # if zyltgb > 50 * 100000000: |
| | | # raise Exception("自由流通股本大于50亿") |
| | | |
| | | l2_trade_util.WhiteListCodeManager.add_code(code) |
| | | l2_trade_util.WhiteListCodeManager().add_code(code) |
| | | name = gpcode_manager.get_code_name(code) |
| | | if not name: |
| | | results = HistoryKDatasUtils.get_gp_codes_names([code]) |
| | |
| | | return_str = json.dumps({"code": 0}) |
| | | except Exception as e: |
| | | return_str = json.dumps({"code": 1, "msg": str(e)}) |
| | | self.__notify_trade("white_list") |
| | | |
| | | elif type == 203: |
| | | # 移除黑名单 |
| | |
| | | for code in codes: |
| | | l2_trade_util.remove_from_forbidden_trade_codes(code) |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("black_list") |
| | | elif type == 204: |
| | | # 移除白名单 |
| | | data = json.loads(_str) |
| | | codes = data["data"]["codes"] |
| | | for code in codes: |
| | | l2_trade_util.WhiteListCodeManager.remove_code(code) |
| | | l2_trade_util.WhiteListCodeManager().remove_code(code) |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("white_list") |
| | | elif type == 301: |
| | | # 黑名单列表 |
| | | codes = l2_trade_util.BlackListCodeManager().list_codes() |
| | |
| | | return_str = json.dumps({"code": 0, "data": datas}) |
| | | elif type == 302: |
| | | # 黑名单列表 |
| | | codes = l2_trade_util.WhiteListCodeManager.list_codes() |
| | | codes = l2_trade_util.WhiteListCodeManager().list_codes() |
| | | datas = [] |
| | | for code in codes: |
| | | name = gpcode_manager.get_code_name(code) |
| | | datas.append(f"{name}:{code}") |
| | | return_str = json.dumps({"code": 0, "data": datas}) |
| | | |
| | | elif type == 401: |
| | | # 加入想要买 |
| | | data = json.loads(_str) |
| | |
| | | self.__KPLCodeLimitUpReasonManager.save_reason(codes[i], data["data"]["plates"][i]) |
| | | |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("want_list") |
| | | elif type == 402: |
| | | data = json.loads(_str) |
| | | codes = data["data"]["codes"] |
| | | for code in codes: |
| | | gpcode_manager.WantBuyCodesManager().remove_code(code) |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("want_list") |
| | | elif type == 403: |
| | | plate = None |
| | | include_codes = set() |
| | |
| | | data = json.loads(_str) |
| | | codes = data["data"]["codes"] |
| | | for code in codes: |
| | | gpcode_manager.PauseBuyCodesManager.add_code(code) |
| | | gpcode_manager.PauseBuyCodesManager().add_code(code) |
| | | name = gpcode_manager.get_code_name(code) |
| | | if not name: |
| | | results = HistoryKDatasUtils.get_gp_codes_names([code]) |
| | | if results: |
| | | gpcode_manager.CodesNameManager.add_first_code_name(code, results[code]) |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("pause_buy_list") |
| | | # 加入暂停买入列表 |
| | | elif type == 412: |
| | | # 移除暂停买入列表 |
| | | data = json.loads(_str) |
| | | codes = data["data"]["codes"] |
| | | for code in codes: |
| | | gpcode_manager.PauseBuyCodesManager.remove_code(code) |
| | | gpcode_manager.PauseBuyCodesManager().remove_code(code) |
| | | return_str = json.dumps({"code": 0}) |
| | | self.__notify_trade("pause_buy_list") |
| | | |
| | | elif type == 413: |
| | | # 暂停买入列表 |
| | | codes = gpcode_manager.PauseBuyCodesManager.list_code() |
| | | codes = gpcode_manager.PauseBuyCodesManager().list_code() |
| | | datas = [] |
| | | for code in codes: |
| | | name = gpcode_manager.get_code_name(code) |
| | |
| | | data = json.loads(_str) |
| | | codes = data["data"]["codes"] |
| | | code = codes[0] |
| | | state = trade_manager.get_trade_state(code) |
| | | state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | if state != trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS and state != trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | return_str = json.dumps({"code": 0, "msg": "可以取消"}) |
| | | else: |
| | |
| | | # 查询是否想买单/白名单/黑名单/暂不买 |
| | | code_name = gpcode_manager.get_code_name(code) |
| | | want = gpcode_manager.WantBuyCodesManager().is_in_cache(code) |
| | | white = l2_trade_util.WhiteListCodeManager.is_in(code) |
| | | white = l2_trade_util.WhiteListCodeManager().is_in_cache(code) |
| | | black = l2_trade_util.is_in_forbidden_trade_codes(code) |
| | | pause_buy = gpcode_manager.PauseBuyCodesManager.is_in(code) |
| | | pause_buy = gpcode_manager.PauseBuyCodesManager().is_in_cache(code) |
| | | |
| | | desc_list = [] |
| | | if want: |
| | |
| | | data = json.loads(_str) |
| | | is_open = data["data"]["open"] |
| | | if is_open: |
| | | trade_manager.TradeStateManager.open_buy() |
| | | trade_manager.TradeStateManager().open_buy() |
| | | else: |
| | | trade_manager.TradeStateManager.close_buy() |
| | | trade_manager.TradeStateManager().close_buy() |
| | | return_str = json.dumps({"code": 0, "msg": ("开启成功" if is_open else "关闭成功")}) |
| | | self.__notify_trade("trade_state") |
| | | elif type == 502: |
| | | can_buy = trade_manager.TradeStateManager.is_can_buy() |
| | | can_buy = trade_manager.TradeStateManager().is_can_buy_cache() |
| | | return_str = json.dumps({"code": 0, "data": {"can_buy": can_buy}}) |
| | | elif type == 503: |
| | | # 设置交易目标代码的模式 |
| | | data = json.loads(_str) |
| | | mode = data["data"]["mode"] |
| | | try: |
| | | TradeTargetCodeModeManager.set_mode(mode) |
| | | TradeTargetCodeModeManager().set_mode(mode) |
| | | return_str = json.dumps({"code": 0, "data": {"mode": mode}}) |
| | | except Exception as e: |
| | | return_str = json.dumps({"code": 1, "msg": str(e)}) |
| | | self.__notify_trade("trade_mode") |
| | | elif type == 504: |
| | | # 获取交易目标代码模式 |
| | | mode = TradeTargetCodeModeManager.get_mode() |
| | | mode = TradeTargetCodeModeManager().get_mode_cache() |
| | | return_str = json.dumps({"code": 0, "data": {"mode": mode}}) |
| | | elif type == 601: |
| | | pass |