admin
2025-01-16 9d2b0ab3967761b2d4b4e1c92034c3c0ea6705f5
middle_api_server.py
@@ -10,6 +10,7 @@
import constant
import socket_manager
import trade_manager
from code_attribute.code_price_manager import CodesLimitRateManager
from db import mysql_data, redis_manager
from db.redis_manager import RedisUtils
from log_module import log, request_log_util
@@ -83,19 +84,56 @@
                                raise Exception("签名错误")
                            codes_data = data_json["data"]
                            code = codes_data["code"]
                            volume = codes_data["volume"]
                            price = codes_data["price"]
                            money = codes_data.get("money")
                            volume = codes_data.get("volume")
                            price = codes_data.get("price")
                            price_type = codes_data.get("price_type")
                            try:
                                if not code:
                                    raise Exception("请上传code")
                                if not volume:
                                    raise Exception("请上传volume")
                                # if round(float(price), 2) <= 0:
                                #     prices = HistoryKDatasUtils.get_now_price([code])
                                #     if not prices:
                                #         raise Exception("现价获取失败")
                                #     price = prices[0][1]
                                if not price or round(float(price), 2) <= 0:
                                    if price_type is None:
                                        price_type = 0
                                        # 默认为笼子价
                                    pre_close = HistoryKDatasUtils.get_gp_latest_info([code], "sec_id,pre_close")[0][
                                        "pre_close"]
                                    if price_type == 0:  # 价格笼子
                                        # 获取现价
                                        prices = HistoryKDatasUtils.get_now_price([code])
                                        if not prices:
                                            raise Exception("现价获取失败")
                                        now_price = prices[0][1]
                                        limit_up_price = round(
                                            float(tool.get_limit_up_price_by_preprice(code, pre_close)),
                                            2)
                                        price = min(tool.get_buy_max_price(now_price), limit_up_price)
                                    elif price_type == 1:  # 跌停价
                                        limit_down_price = round(
                                            float(tool.get_limit_down_price_by_preprice(code, pre_close)),
                                            2)
                                        price = limit_down_price
                                    elif price_type == 2:  # 涨停价
                                        limit_up_price = round(
                                            float(tool.get_limit_up_price_by_preprice(code, pre_close)),
                                            2)
                                        price = limit_up_price
                                    elif price_type == 3:  # 现价
                                        prices = HistoryKDatasUtils.get_now_price([code])
                                        if not prices:
                                            raise Exception("现价获取失败")
                                        now_price = prices[0][1]
                                        price = now_price
                                    elif price_type == 4:  # 买5价
                                        prices = HistoryKDatasUtils.get_now_price([code])
                                        if not prices:
                                            raise Exception("现价获取失败")
                                        now_price = prices[0][1]
                                        price = now_price - 0.04
                                if not volume and money:
                                    volume = (money // int(round(float(price) * 100))) * 100
                                    if volume < 100:
                                        volume = 100
                                # 下单
                                result = hosting_api_util.trade_order(hosting_api_util.TRADE_DIRECTION_BUY, code,
                                                                      volume, price)
@@ -161,7 +199,8 @@
                        elif type_ == 'common':
                            params = data_json["data"]
                            ctype = params.get("ctype")
                            trade_sell_types = {"get_current_l1_codes", "get_positions", "get_l2_deal_price"}
                            trade_sell_types = {"get_current_l1_codes", "get_positions", "get_l2_deal_price",
                                                "buy_cb_for_commission", "sell_cb_for_commission", "get_deal_queue"}
                            if ctype in trade_sell_types:
                                result = hosting_api_util.common_request(params,
                                                                         client_type=socket_manager.ClientSocketManager.CLIENT_TYPE_TRADE_SELL)
@@ -224,12 +263,23 @@
                        elif type_ == "get_huaxin_subscript_codes":
                            # 获取华鑫订阅的代码
                            fresults = global_data_cache_util.huaxin_subscript_codes
                            fdata = []
                            try:
                                # 获取当前涨停比例
                                rate_results_dict = CodesLimitRateManager.get_price_rates(set([r[0] for r in fresults]))
                                for r in fresults:
                                    fdata.append(
                                        (r[0], r[1], rate_results_dict.get(r[0]) if r[0] in rate_results_dict else 0,
                                         r[2]))
                                fdata.sort(key=lambda r: r[2], reverse=True)
                            except:
                                fdata = fresults
                            update_time = global_data_cache_util.huaxin_subscript_codes_update_time
                            if update_time is None:
                                update_time = ''
                            return_str = json.dumps(
                                {"code": 0,
                                 "data": {"count": len(fresults), "list": fresults, "update_time": update_time},
                                 "data": {"count": len(fresults), "list": fdata, "update_time": update_time},
                                 "msg": ""})
                            pass
                        elif type_ == "get_huaxin_position_subscript_codes":
@@ -516,7 +566,7 @@
                    return_str = json.dumps({"code": 1, "msg": "不可以取消"})
            elif type == 421:
                # 加入暂不买
                # 加红
                data = json.loads(_str)
                codes = data["data"]["codes"]
                for code in codes:
@@ -524,7 +574,7 @@
                return_str = json.dumps({"code": 0})
            elif type == 422:
                # 移除暂不买
                # 移红
                data = json.loads(_str)
                codes = data["data"]["codes"]
                for code in codes:
@@ -532,10 +582,31 @@
                return_str = json.dumps({"code": 0})
            elif type == 423:
                # 暂不买列表
                # 红单列表
                result = hosting_api_util.get_code_list(hosting_api_util.CODE_LIST_MUST_BUY)
                return_str = json.dumps(result)
            elif type == 441:
                # 加绿
                data = json.loads(_str)
                codes = data["data"]["codes"]
                for code in codes:
                    hosting_api_util.add_code_list(code, hosting_api_util.CODE_LIST_GREEN)
                return_str = json.dumps({"code": 0})
            elif type == 442:
                # 移绿
                data = json.loads(_str)
                codes = data["data"]["codes"]
                for code in codes:
                    hosting_api_util.remove_code_list(code, hosting_api_util.CODE_LIST_GREEN)
                return_str = json.dumps({"code": 0})
            elif type == 443:
                # 绿单列表
                result = hosting_api_util.get_code_list(hosting_api_util.CODE_LIST_GREEN)
                return_str = json.dumps(result)
            elif type == 430:
                # 查询代码属性