| | |
| | | datas = data["data"] |
| | | hx_logger_l2_transaction.info(f"{code}#{datas}") |
| | | sk.sendall(json.dumps({"code": 0}).encode(encoding='utf-8')) |
| | | # ------客户端请求接口------- |
| | | elif data_json["type"] == 'buy': |
| | | # 验证签名 |
| | | if not socket_util.is_client_params_sign_right(data_json): |
| | | sk.sendall( |
| | | socket_util.load_header( |
| | | json.dumps({"code": constant.RESPONSE_CODE_SIGIN_ERROR, "msg": "签名错误"}).encode( |
| | | "utf-8"))) |
| | | continue |
| | | codes_data = data_json["data"] |
| | | code = codes_data["code"] |
| | | volume = codes_data["volume"] |
| | | price = codes_data["price"] |
| | | try: |
| | | # 验证签名是否正确 |
| | | result = trade_api.order(trade_api.TRADE_DIRECTION_BUY, code, volume, |
| | | round(float(price), 2)) |
| | | if result: |
| | | resultJSON = json.loads(result) |
| | | if resultJSON['code'] == 0: |
| | | # TODO 下单成功保存下单结果数据 |
| | | pass |
| | | else: |
| | | # 返回下单失败 |
| | | raise Exception("下单失败") |
| | | except Exception as e: |
| | | pass |
| | | print("---下单结果----") |
| | | sk.sendall(result.encode("utf-8")) |
| | | |
| | | elif data_json["type"] == 'cancel_order': |
| | | # 验证签名 |
| | | if not socket_util.is_client_params_sign_right(data_json): |
| | | sk.sendall( |
| | | socket_util.load_header( |
| | | json.dumps({"code": constant.RESPONSE_CODE_SIGIN_ERROR, "msg": "签名错误"}).encode( |
| | | "utf-8"))) |
| | | continue |
| | | |
| | | codes_data = data_json["data"] |
| | | code = codes_data["code"] |
| | | orderSysID = codes_data["orderSysID"] |
| | | try: |
| | | result = trade_api.cancel_order(trade_api.TRADE_DIRECTION_BUY, code, orderSysID, True) |
| | | print("---撤单结果----") |
| | | print(result) |
| | | sk.sendall(result.encode("utf-8")) |
| | | except Exception as e: |
| | | sk.sendall( |
| | | socket_util.load_header( |
| | | json.dumps({"code": 1, "msg": str(e)}).encode( |
| | | "utf-8"))) |
| | | |
| | | elif data_json["type"] == 'sell': |
| | | # 验证签名 |
| | | if not socket_util.is_client_params_sign_right(data_json): |
| | | sk.sendall( |
| | | socket_util.load_header( |
| | | json.dumps({"code": constant.RESPONSE_CODE_SIGIN_ERROR, "msg": "签名错误"}).encode( |
| | | "utf-8"))) |
| | | continue |
| | | codes_data = data_json["data"] |
| | | code = codes_data["code"] |
| | | volume = codes_data["volume"] |
| | | price = codes_data["price"] |
| | | price_type = codes_data["price_type"] |
| | | result = trade_api.order(trade_api.TRADE_DIRECTION_SELL, code, volume, price, |
| | | price_type=price_type) |
| | | print("---卖出结果----") |
| | | print(result) |
| | | # 查询委托列表 |
| | | elif data_json["type"] == 'test': |
| | | # 卖出 |
| | | # trade_api.order(trade_api.TRADE_DIRECTION_SELL, "600854", 100, 5.45) |
| | | result = trade_api.get_deal_list() |
| | | print("\n\n---成交列表----") |
| | | for d in result["data"]: |
| | | print(d) |
| | | |
| | | result = trade_api.get_delegate_list(True) |
| | | print("\n\n---可撤委托----") |
| | | for d in result["data"]: |
| | | print(d) |
| | | result = trade_api.get_delegate_list(False) |
| | | print("\n\n---全部委托----") |
| | | for d in result["data"]: |
| | | print(d) |
| | | |
| | | result = trade_api.get_position_list() |
| | | print("\n\n---持仓列表----") |
| | | for d in result["data"]: |
| | | print(d) |
| | | |
| | | result = trade_api.get_money() |
| | | print("\n\n---账户列表----") |
| | | for d in result["data"]: |
| | | print(d) |
| | | elif data_json["type"] == 'test_l2': |
| | | codes_data = data_json["data"] |
| | | result = trade_api.set_l2_codes_data(codes_data) |
| | | print("\n\n---L2设置结果----") |
| | | print(result) |
| | | else: |
| | | while True: |
| | | r = sk.recv(1024 * 100) |
| | | if r: |
| | | print(r.decode('utf-8')) |
| | | sk.sendall("123".encode('utf-8')) |
| | | |
| | | # result = trade_server_processor.process(data_json["data"]) |
| | | # sk.sendall(json.dumps({"code": 0}).encode(encoding='utf-8')) |
| | | else: |
| | | # 断开连接 |
| | | break |
| | |
| | | super().finish() |
| | | |
| | | |
| | | def read_trade_data_queue(): |
| | | while True: |
| | | try: |
| | | data = trade_data_request_queue.get() |
| | | if data: |
| | | type_ = data["type"] |
| | | hx_logger_trade_debug.info(f"获取交易数据开始:{type_}") |
| | | |
| | | if type_ == "delegate_list": |
| | | data = huaxin_trade_api.get_delegate_list(False) |
| | | dataJSON = json.loads(data) |
| | | if dataJSON["data"]["code"] == 0: |
| | | data = dataJSON["data"]["data"] |
| | | huaxin_trade_record_manager.DelegateRecordManager.add(data) |
| | | elif type_ == "money": |
| | | data = huaxin_trade_api.get_money() |
| | | dataJSON = json.loads(data) |
| | | if dataJSON["data"]["code"] == 0: |
| | | data = dataJSON["data"]["data"] |
| | | huaxin_trade_record_manager.MoneyManager.save_data(data) |
| | | elif type_ == "deal_list": |
| | | data = huaxin_trade_api.get_deal_list() |
| | | dataJSON = json.loads(data) |
| | | if dataJSON["data"]["code"] == 0: |
| | | data = dataJSON["data"]["data"] |
| | | huaxin_trade_record_manager.DealRecordManager.add(data) |
| | | |
| | | hx_logger_trade_debug.info(f"获取交易数据成功:{type_}") |
| | | except Exception as e: |
| | | hx_logger_trade_debug.exception(e) |
| | | finally: |
| | | # 有1s的间隔 |
| | | time.sleep(1) |
| | | |
| | | |
| | | def __set_target_codes(): |
| | | while True: |
| | | try: |
| | | datas = huaxin_target_codes_manager.pop() |
| | | if datas: |
| | | result = huaxin_trade_api.set_l2_codes_data(datas) |
| | | print("设置L2代码结果:", result) |
| | | except Exception as e: |
| | | logging.exception(e) |
| | | finally: |
| | | time.sleep(1) |
| | | |
| | | |
| | | def run(): |
| | | # 拉取交易信息 |
| | | t1 = threading.Thread(target=lambda: read_trade_data_queue(), daemon=True) |
| | | t1.start() |
| | | |
| | | t1 = threading.Thread(target=lambda: __set_target_codes(), daemon=True) |
| | | t1.start() |
| | | |
| | | print("create TradeServer") |
| | | laddr = "0.0.0.0", 10008 |
| | | tcpserver = MyThreadingTCPServer(laddr, MyBaseRequestHandle) # 注意:参数是MyBaseRequestHandle |
| | | # tcpserver.handle_request() # 只接受一个客户端连接 |
| | | tcpserver.serve_forever() |
| | | |
| | | |
| | | def test1(): |
| | | r = (trade_api.ClientSocketManager.acquire_client(trade_api.ClientSocketManager.CLIENT_TYPE_TRADE)) |
| | | print("test1", r) |
| | | time.sleep(random.randint(0, 3)) |
| | | if r: |
| | | trade_api.ClientSocketManager.release_client(r[0]) |
| | | |
| | | |
| | | def test2(): |
| | | time.sleep(random.randint(0, 3)) |
| | | print("test2", trade_api.ClientSocketManager.acquire_client(trade_api.ClientSocketManager.CLIENT_TYPE_TRADE)) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | |
| | | # l2.l2_data_util.save_l2_data(code, None, datas) |
| | | # l2.l2_data_util.save_l2_data(code, None, datas) |
| | | |
| | | # ClientSocketManager.add_client(ClientSocketManager.CLIENT_TYPE_TRADE, "1", None) |
| | | # ClientSocketManager.add_client(ClientSocketManager.CLIENT_TYPE_TRADE, "2", None) |