Administrator
2024-06-03 a445f9a2650b9826fa72a203f3144a3ac27509a0
代码结构修复
15个文件已修改
2个文件已添加
290 ■■■■■ 已修改文件
cancel_strategy/s_l_h_cancel_strategy.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_attribute/first_target_code_data_processor.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/cancel_buy_strategy.py 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager_new.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
output/code_info_output.py 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
settings/trade_setting.py 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/data_server.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/current_price_process_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_api_server.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_server.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/l2_trade_factor.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_constant.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_manager.py 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_queue_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/buy_condition_util.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cancel_strategy/s_l_h_cancel_strategy.py
@@ -11,7 +11,7 @@
from l2.l2_data_manager import OrderBeginPosInfo
from l2.l2_transaction_data_manager import HuaXinBuyOrderManager, HuaXinSellOrderStatisticManager, BigOrderDealManager
from log_module import async_log_util
from third_data.code_plate_key_manager import CodePlateKeyBuyManager
from third_data import code_plate_key_manager
from utils import tool
from l2.transaction_progress import TradeBuyQueue
@@ -35,7 +35,7 @@
        half_must_buy = False
        if not must_buy:
            try:
                can_buy_result = CodePlateKeyBuyManager.can_buy(code)
                can_buy_result =code_plate_key_manager.CodePlateKeyBuyManager.can_buy(code)
                if can_buy_result and can_buy_result[0]:
                    if can_buy_result[0][1] <= 1 and can_buy_result[0][2] >= 3:
                        # 炸板率>60%以上就不加半红
code_attribute/first_target_code_data_processor.py
@@ -15,7 +15,7 @@
from third_data.history_k_data_util import HistoryKDatasUtils
from ths import l2_code_operate
from trade import trade_data_manager, l2_trade_util
from trade.trade_manager import MarketSituationManager
from settings.trade_setting import MarketSituationManager
from utils import global_util, tool, init_data_util, buy_condition_util
__CodesPlateKeysManager = CodesHisReasonAndBlocksManager()
l2/cancel_buy_strategy.py
@@ -27,6 +27,7 @@
    local_today_canceled_buyno_map
from log_module.log import logger_buy_1_volumn, logger_l2_error
from utils.tool import CodeDataCacheUtil
from settings import trade_setting
def set_real_place_position(code, index, buy_single_index=None, is_default=True):
@@ -768,8 +769,8 @@
                    canceled_indexes.add(cancel_data["index"])
            cancel_rate = round(len(canceled_indexes) / len(watch_indexes), 2)
            threshhold_rate = constant.G_CANCEL_RATE
            situation = trade_manager.MarketSituationManager().get_situation_cache()
            if situation == trade_manager.MarketSituationManager.SITUATION_GOOD:
            situation = trade_setting.MarketSituationManager().get_situation_cache()
            if situation == trade_setting.MarketSituationManager.SITUATION_GOOD:
                threshhold_rate = constant.G_CANCEL_RATE_FOR_GOOD_MARKET
            if cancel_rate > threshhold_rate:
                canceled_indexes_list = list(canceled_indexes)
@@ -787,8 +788,8 @@
                    canceled_indexes.add(cancel_data["index"])
            cancel_rate = round(len(canceled_indexes) / len(watch_indexes_by), 2)
            threshhold_rate = constant.G_CANCEL_RATE
            situation = trade_manager.MarketSituationManager().get_situation_cache()
            if situation == trade_manager.MarketSituationManager.SITUATION_GOOD:
            situation = trade_setting.MarketSituationManager().get_situation_cache()
            if situation == trade_setting.MarketSituationManager.SITUATION_GOOD:
                threshhold_rate = constant.G_CANCEL_RATE_FOR_GOOD_MARKET
            if cancel_rate > threshhold_rate:
                canceled_indexes_list = list(canceled_indexes)
@@ -1018,8 +1019,8 @@
                    canceled_indexes.add(cancel_data["index"])
            cancel_rate = round(len(canceled_indexes) / len(watch_indexes), 2)
            threshhold_rate = constant.G_CANCEL_RATE
            situation = trade_manager.MarketSituationManager().get_situation_cache()
            if situation == trade_manager.MarketSituationManager.SITUATION_GOOD:
            situation = trade_setting.MarketSituationManager().get_situation_cache()
            if situation == trade_setting.MarketSituationManager.SITUATION_GOOD:
                threshhold_rate = constant.G_CANCEL_RATE_FOR_GOOD_MARKET
            if gpcode_manager.MustBuyCodesManager().is_in_cache(code):
                threshhold_rate = constant.G_CANCEL_RATE_WITH_MUST_BUY
l2/l2_data_manager_new.py
@@ -20,7 +20,8 @@
from db import redis_manager_delegate as redis_manager
from third_data.code_plate_key_manager import CodePlateKeyBuyManager, KPLCodeJXBlockManager
from trade import trade_manager, trade_queue_manager, l2_trade_factor, l2_trade_util, \
    trade_result_manager, current_price_process_manager, trade_data_manager, trade_huaxin, trade_record_log_util
    trade_result_manager, current_price_process_manager, trade_data_manager, trade_huaxin, trade_record_log_util, \
    trade_constant
from l2 import l2_data_manager, l2_log, l2_data_source_util, code_price_manager, \
    transaction_progress, cancel_buy_strategy, place_order_single_data_manager
from l2.cancel_buy_strategy import DCancelBigNumComputer, \
@@ -35,7 +36,9 @@
from trade.trade_data_manager import CodeActualPriceProcessor, PlaceOrderCountManager
from trade.trade_manager import TradeTargetCodeModeManager, AccountAvailableMoneyManager, MarketSituationManager
from trade.trade_manager import TradeTargetCodeModeManager, AccountAvailableMoneyManager
from settings.trade_setting import MarketSituationManager
import concurrent.futures
@@ -489,7 +492,7 @@
                state = cls.__CodesTradeStateManager.get_trade_state_cache(code)
                start_index = len(total_datas) - len(add_datas)
                end_index = len(total_datas) - 1
                if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_SUCCESS:
                if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_SUCCESS:
                    # 已挂单
                    cls.__process_order(code, start_index, end_index, capture_timestamp, is_first_code)
                else:
@@ -697,7 +700,7 @@
        with cls.__buy_lock_dict[code]:
            # 判断是否可以下单,不处于可下单状态需要返回
            state = cls.__CodesTradeStateManager.get_trade_state_cache(code)
            if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_SUCCESS:
            if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_SUCCESS:
                # 不处于可下单状态
                return False
            __start_time = tool.get_now_timestamp()
@@ -1847,7 +1850,7 @@
    @classmethod
    def __get_threshmoney(cls, code):
        m, msg = cls.__l2PlaceOrderParamsManagerDict[code].get_m_val()
        if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_manager.TRADE_STATE_NOT_TRADE:
        if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_constant.TRADE_STATE_NOT_TRADE:
            # 首次下单m值扩大1.5倍
            m = int(m * 1.5)
        return m, msg
output/code_info_output.py
@@ -22,7 +22,7 @@
import l2.l2_data_manager_new
from third_data import kpl_data_manager, kpl_api
from third_data.kpl_data_manager import KPLLimitUpDataRecordManager
from trade import l2_trade_factor, trade_manager, l2_trade_util, trade_record_log_util
from trade import l2_trade_factor, trade_manager, l2_trade_util, trade_record_log_util, trade_constant
from trade.l2_trade_factor import L2TradeFactorUtil
base_output_content = {}
@@ -207,25 +207,25 @@
                                                    data['val']['price']) * 100 / 10000, 1)}
        params["trade_data"]["trade_state"] = {}
        trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
        if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED:
        if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED:
            params["trade_data"]["trade_state"]["order"] = True
            params["trade_data"]["trade_state"]["desc"] = "已下单"
        else:
            params["trade_data"]["trade_state"]["order"] = False
            if trade_state == trade_manager.TRADE_STATE_NOT_TRADE:
            if trade_state == trade_constant.TRADE_STATE_NOT_TRADE:
                params["trade_data"]["trade_state"]["desc"] = "未交易"
            elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_ING:
            elif trade_state == trade_constant.TRADE_STATE_BUY_CANCEL_ING:
                params["trade_data"]["trade_state"]["desc"] = "撤单中"
            elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS:
            elif trade_state == trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS:
                params["trade_data"]["trade_state"]["desc"] = "撤单成功"
            elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS:
            elif trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS:
                params["trade_data"]["trade_state"]["desc"] = "已成交"
        # log.logger_debug.info(f"下单信息耗时:{time.time() - __start_time}")
        __start_time = time.time()
        # H撤监听范围
        if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS:
        if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED or trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS:
            hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer().get_watch_index_dict(code)
            # 根据日志读取实时的计算数据
            h_cancel_latest_compute_info = log_export.get_h_cancel_compute_info(code)
server.py
@@ -25,7 +25,7 @@
from third_data.kpl_data_manager import KPLCodeLimitUpReasonManager
from ths import l2_listen_pos_health_manager, l2_code_operate, client_manager
from trade import trade_data_manager, trade_manager, l2_trade_util, \
    current_price_process_manager, trade_juejin
    current_price_process_manager, trade_juejin, trade_constant
from code_attribute.code_data_util import ZYLTGBUtil
import l2.transaction_progress
@@ -312,7 +312,7 @@
                                    code = item["code"]
                                    trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code)
                                    # 设置下单状态的代码为已委托
                                    if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER:
                                    if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER:
                                        origin_apply_time = apply_time
                                        apply_time = apply_time[0:6]
                                        apply_time = "{}:{}:{}".format(apply_time[0:2], apply_time[2:4],
@@ -607,7 +607,7 @@
                    code = data["data"]["code"]
                    if 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:
                        if state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_CANCEL_ING:
                            try:
                                l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, "手动撤销")
                                return_str = json.dumps({"code": 0})
@@ -784,7 +784,7 @@
                    codes = data["data"]["codes"]
                    code = codes[0]
                    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:
                    if state != trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS and state != trade_constant.TRADE_STATE_BUY_SUCCESS:
                        return_str = json.dumps({"code": 0, "msg": "可以取消"})
                    else:
                        return_str = json.dumps({"code": 1, "msg": "不可以取消"})
settings/trade_setting.py
New file
@@ -0,0 +1,50 @@
# 市场行情等级管理
from db import redis_manager_delegate as redis_manager
from db.redis_manager_delegate import RedisUtils
from utils import tool
class MarketSituationManager:
    # 差
    SITUATION_BAD = 0
    # 一般
    SITUATION_COMMON = 1
    # 好
    SITUATION_GOOD = 2
    __db = 2
    redisManager = redis_manager.RedisManager(2)
    __situation_cache = SITUATION_BAD
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(MarketSituationManager, cls).__new__(cls, *args, **kwargs)
            # 初始化设置
            # 获取交易窗口的锁
            cls.__instance.__situation_cache = cls.get_situation()
        return cls.__instance
    @classmethod
    def __get_redis(cls):
        return cls.redisManager.getRedis()
    def set_situation(self, situation):
        if situation not in [self.SITUATION_BAD, self.SITUATION_COMMON, self.SITUATION_GOOD]:
            raise Exception("situation参数值错误")
        self.__situation_cache = situation
        RedisUtils.setex_async(self.__db, "market_situation", tool.get_expire(), situation)
    # 是否可以下单
    @classmethod
    def get_situation(cls):
        # 默认设置为可交易
        val = RedisUtils.get(cls.__get_redis(), "market_situation")
        if val is None:
            return cls.SITUATION_BAD
        return int(val)
    def get_situation_cache(self):
        return self.__situation_cache
third_data/code_plate_key_manager.py
@@ -11,14 +11,14 @@
from code_attribute import code_nature_analyse
from db.redis_manager_delegate import RedisUtils
from third_data import kpl_block_util, kpl_api, kpl_util
from trade.trade_manager import MarketSituationManager
from settings.trade_setting import MarketSituationManager
from utils import global_util, tool, buy_condition_util
from log_module import log, async_log_util
from db import redis_manager_delegate as redis_manager
from log_module.log import logger_kpl_block_can_buy
from third_data.kpl_util import KPLPlatManager
from trade import trade_manager, l2_trade_util
from trade import trade_manager, l2_trade_util, trade_constant
# 代码精选板块管理
@@ -137,6 +137,48 @@
        except Exception as e:
            logger_kpl_block_can_buy.error(f"{code} 获取板块出错")
            logger_kpl_block_can_buy.exception(e)
# 禁止下单的板块
class ForbiddenBlockManager:
    __db = 3
    __redisManager = redis_manager.RedisManager(3)
    __instance = None
    __forbidden_blocks = set()
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(ForbiddenBlockManager, cls).__new__(cls, *args, **kwargs)
            cls.__load_data()
        return cls.__instance
    @classmethod
    def __get_redis(cls):
        return cls.__redisManager.getRedis()
    # 加载数据
    @classmethod
    def __load_data(cls):
        blocks = cls.__get_redis().smembers("forbidden_blocks")
        if blocks:
            for b in blocks:
                cls.__forbidden_blocks.add(b)
    def add(self, block):
        self.__forbidden_blocks.add(block)
        RedisUtils.sadd_async(self.__db, "forbidden_blocks", block)
        RedisUtils.expire_async(self.__db, "forbidden_blocks", tool.get_expire())
    def remove(self, block):
        if block in self.__forbidden_blocks:
            self.__forbidden_blocks.remove(block)
        RedisUtils.srem_async(self.__db, "forbidden_blocks", block)
    def get_blocks(self):
        return copy.deepcopy(self.__forbidden_blocks)
    def is_in(self, block):
        return block in self.__forbidden_blocks
# 开盘啦禁止交易板块管理
@@ -505,7 +547,7 @@
        # 根据身位移除代码
        # return
        # 下过单的代码不移除
        if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) != trade_manager.TRADE_STATE_NOT_TRADE:
        if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) != trade_constant.TRADE_STATE_NOT_TRADE:
            # 只要下过单的就不移除
            return
        l2_trade_util.forbidden_trade(code, msg=msg)
@@ -851,9 +893,9 @@
        if not blocks_compute_results:
            return False, True, f"没有找到板块", [], keys, []
        codes_delegate = set(cls.__CodesTradeStateManager.get_codes_by_trade_states_cache(
            {trade_manager.TRADE_STATE_BUY_DELEGATED, trade_manager.TRADE_STATE_BUY_PLACE_ORDER}))
            {trade_constant.TRADE_STATE_BUY_DELEGATED, trade_constant.TRADE_STATE_BUY_PLACE_ORDER}))
        codes_success = set(cls.__CodesTradeStateManager.get_codes_by_trade_states_cache(
            {trade_manager.TRADE_STATE_BUY_SUCCESS}))
            {trade_constant.TRADE_STATE_BUY_SUCCESS}))
        codes = codes_delegate | codes_success
        # 统计成交代码的板块
        trade_codes_blocks_dict = {}
third_data/data_server.py
@@ -26,7 +26,7 @@
from urllib.parse import parse_qs
from output import code_info_output, limit_up_data_filter, output_util, kp_client_msg_manager
from trade import bidding_money_manager, trade_manager, l2_trade_util, trade_record_log_util
from trade import bidding_money_manager, trade_manager, l2_trade_util, trade_record_log_util, trade_constant
import concurrent.futures
# 禁用http.server的日志输出
@@ -522,7 +522,7 @@
                code_info[4] = 1 if code_info[0] in want_codes else 0
                # 获取代码状态
                if trade_manager.CodesTradeStateManager().get_trade_state_cache(
                        code_info[0]) != trade_manager.TRADE_STATE_NOT_TRADE:
                        code_info[0]) != trade_constant.TRADE_STATE_NOT_TRADE:
                    code_info[5] = 1
            response_data = json.dumps({"code": 0, "data": codes_info})
@@ -566,7 +566,7 @@
                    total_datas = l2_data_util.local_today_datas.get(code)
                trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
                if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS:
                if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED or trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS:
                    hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer().get_watch_index_dict(code)
                    # 根据日志读取实时的计算数据
                    h_cancel_latest_compute_info = log_export.get_h_cancel_compute_info(code)
@@ -740,7 +740,7 @@
                                try:
                                    # 判断是否下单
                                    trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code)
                                    if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED:
                                    if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED:
                                        # 委托中的订单,判断是否需要撤单
                                        if not gpcode_manager.WantBuyCodesManager().is_in_cache(code):
                                            yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes()
trade/current_price_process_manager.py
@@ -13,7 +13,7 @@
from code_attribute import gpcode_manager
from utils import tool, import_util
from ths.l2_code_operate import L2CodeOperate
from trade import trade_manager, l2_trade_util
from trade import trade_manager, l2_trade_util, trade_constant
from trade.trade_data_manager import CodeActualPriceProcessor
trade_gui = import_util.import_lib("trade.trade_gui")
@@ -106,7 +106,7 @@
                    item[1]) or item[0] < 0:
                # 在(黑名单)/(涨幅小于)的数据
                if trade_manager.CodesTradeStateManager().get_trade_state_cache(
                        item[1]) != trade_manager.TRADE_STATE_BUY_SUCCESS:
                        item[1]) != trade_constant.TRADE_STATE_BUY_SUCCESS:
                    # 没成交才会加入删除
                    _delete_list.append(item)
trade/huaxin/huaxin_trade_api_server.py
@@ -21,7 +21,7 @@
from third_data.history_k_data_util import HistoryKDatasUtils, JueJinApi
from third_data.kpl_data_manager import KPLDataManager, KPLLimitUpDataRecordManager
from third_data.kpl_util import KPLDataType
from trade import trade_manager, trade_huaxin, l2_trade_util
from trade import trade_manager, trade_huaxin, l2_trade_util, trade_constant
from trade.huaxin import huaxin_trade_api, huaxin_trade_record_manager, \
    huaxin_trade_data_update
@@ -163,7 +163,7 @@
                        elif code:
                            state = trade_manager.CodesTradeStateManager().get_trade_state_cache(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:
                            if state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_CANCEL_ING:
                                try:
                                    l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, "手动撤销")
                                    return_str = json.dumps({"code": 0})
trade/huaxin/huaxin_trade_server.py
@@ -53,7 +53,7 @@
from third_data.kpl_data_manager import KPLDataManager
from third_data.kpl_util import KPLDataType
from trade import trade_manager, l2_trade_util, \
    trade_data_manager
    trade_data_manager, trade_constant
import l2_data_util as l2_data_util_old
from trade.huaxin import huaxin_trade_api as trade_api, huaxin_trade_api, huaxin_trade_data_update, \
@@ -61,8 +61,9 @@
from trade.huaxin.huaxin_trade_record_manager import PositionManager, DealRecordManager, DelegateRecordManager
from trade.sell import sell_manager
from trade.sell.sell_rule_manager import TradeRuleManager, SellRule
from trade.trade_manager import TradeTargetCodeModeManager, MarketSituationManager, AutoCancelSellModeManager, \
from trade.trade_manager import TradeTargetCodeModeManager, AutoCancelSellModeManager, \
    CodesTradeStateManager
from settings.trade_setting import MarketSituationManager
from utils import socket_util, data_export_util, middle_api_protocol, tool, huaxin_util, output_util, global_util
trade_data_request_queue = queue.Queue()
@@ -1766,7 +1767,7 @@
        try:
            # 判断是否下单
            state = CodesTradeStateManager().get_trade_state_cache(code)
            if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_SUCCESS:
            if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_SUCCESS:
                # 已经下单了
                return
trade/l2_trade_factor.py
@@ -6,7 +6,7 @@
from code_attribute import big_money_num_manager, limit_up_time_manager, global_data_loader, gpcode_manager
import constant
from trade import trade_manager, deal_big_money_manager
from trade import trade_manager, deal_big_money_manager, trade_constant
from utils import global_util, tool
@@ -118,7 +118,7 @@
    # 是否是初次下单
    @classmethod
    def is_first_place_order(cls, code):
        return trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_manager.TRADE_STATE_NOT_TRADE
        return trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_constant.TRADE_STATE_NOT_TRADE
    # 设置分数
    def set_score(self, score):
trade/trade_constant.py
New file
@@ -0,0 +1,12 @@
# 未交易
TRADE_STATE_NOT_TRADE = 0
# 下单
TRADE_STATE_BUY_PLACE_ORDER = 10
# 已委托买
TRADE_STATE_BUY_DELEGATED = 11
# 委托取消进行中
TRADE_STATE_BUY_CANCEL_ING = 13
# 撤销成功
TRADE_STATE_BUY_CANCEL_SUCCESS = 14
# 买成功
TRADE_STATE_BUY_SUCCESS = 12
trade/trade_manager.py
@@ -16,7 +16,7 @@
from db.redis_manager_delegate import RedisUtils
from log_module import async_log_util
from output import kp_client_msg_manager
from trade import trade_data_manager, l2_trade_util, trade_juejin, trade_huaxin
from trade import trade_data_manager, l2_trade_util, trade_juejin, trade_huaxin, trade_constant
import time as t
from l2 import l2_data_manager, l2_data_log
@@ -30,23 +30,9 @@
__db = 2
__redis_manager = redis_manager.RedisManager(2)
# 未交易
TRADE_STATE_NOT_TRADE = 0
# 下单
TRADE_STATE_BUY_PLACE_ORDER = 10
# 已委托买
TRADE_STATE_BUY_DELEGATED = 11
# 委托取消进行中
TRADE_STATE_BUY_CANCEL_ING = 13
# 撤销成功
TRADE_STATE_BUY_CANCEL_SUCCESS = 14
# 买成功
TRADE_STATE_BUY_SUCCESS = 12
guiTrade = None  # trade_gui.THSGuiTrade() if trade_gui is not None else None
latest_trade_delegate_data = []
# 关闭购买入口
# 开启购买入口
@@ -186,51 +172,6 @@
        return self.__auto_cancel_sell_mode
# 市场行情等级管理
class MarketSituationManager:
    # 差
    SITUATION_BAD = 0
    # 一般
    SITUATION_COMMON = 1
    # 好
    SITUATION_GOOD = 2
    __db = 2
    redisManager = redis_manager.RedisManager(2)
    __situation_cache = SITUATION_BAD
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(MarketSituationManager, cls).__new__(cls, *args, **kwargs)
            # 初始化设置
            # 获取交易窗口的锁
            cls.__instance.__situation_cache = cls.get_situation()
        return cls.__instance
    @classmethod
    def __get_redis(cls):
        return cls.redisManager.getRedis()
    def set_situation(self, situation):
        if situation not in [self.SITUATION_BAD, self.SITUATION_COMMON, self.SITUATION_GOOD]:
            raise Exception("situation参数值错误")
        self.__situation_cache = situation
        RedisUtils.setex_async(self.__db, "market_situation", tool.get_expire(), situation)
    # 是否可以下单
    @classmethod
    def get_situation(cls):
        # 默认设置为可交易
        val = RedisUtils.get(cls.__get_redis(), "market_situation")
        if val is None:
            return cls.SITUATION_BAD
        return int(val)
    def get_situation_cache(self):
        return self.__situation_cache
# 根据分数禁止买的票管理
class ForbiddenBuyCodeByScoreManager:
    __instance = None
@@ -301,14 +242,14 @@
    def get_trade_state(self, code):
        state = RedisUtils.get(self.__get_redis(), "trade-state-{}".format(code))
        if state is None:
            return TRADE_STATE_NOT_TRADE
            return trade_constant.TRADE_STATE_NOT_TRADE
        return int(state)
    def get_trade_state_cache(self, code):
        cache_result = tool.CodeDataCacheUtil.get_cache(self.__trade_state_cache, code)
        if cache_result[0]:
            return cache_result[1]
        return TRADE_STATE_NOT_TRADE
        return trade_constant.TRADE_STATE_NOT_TRADE
    def get_trade_state_dict(self):
        return copy.deepcopy(self.__trade_state_cache)
@@ -492,7 +433,7 @@
    def is_state_right(code):
        trade_state = __CodesTradeStateManager.get_trade_state_cache(code)
        if trade_state != TRADE_STATE_NOT_TRADE and trade_state != TRADE_STATE_BUY_CANCEL_SUCCESS and trade_state != TRADE_STATE_BUY_CANCEL_ING:
        if trade_state != trade_constant.TRADE_STATE_NOT_TRADE and trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS and trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_ING:
            return Exception("代码处于不可交易状态"), trade_state
        return None, trade_state
@@ -522,7 +463,7 @@
                raise ex
        finally:
            async_log_util.info(logger_trade, "{} trade.manager.start_buy 判断是否可买".format(code))
        __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_PLACE_ORDER)
        __CodesTradeStateManager.set_trade_state(code, trade_constant.TRADE_STATE_BUY_PLACE_ORDER)
        # 状态改变过后必须要有本地下单编号
        __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index, mode, exec_index=exec_index)
    finally:
@@ -591,12 +532,12 @@
    async_log_util.info(logger_trade, "{} trade_manager.start_cancel_buy 开始".format(code))
    trade_state = __CodesTradeStateManager.get_trade_state_cache(code)
    try:
        if trade_state == TRADE_STATE_BUY_SUCCESS:
        if trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS:
            return None
        if not force:
            if trade_state != TRADE_STATE_BUY_PLACE_ORDER and trade_state != TRADE_STATE_BUY_DELEGATED:
            if trade_state != trade_constant.TRADE_STATE_BUY_PLACE_ORDER and trade_state != trade_constant.TRADE_STATE_BUY_DELEGATED:
                return None
        __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_CANCEL_ING)
        __CodesTradeStateManager.set_trade_state(code, trade_constant.TRADE_STATE_BUY_CANCEL_ING)
        if constant.API_TRADE_ENABLE:
            if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN:
                trade_juejin.cancel_order(code)
@@ -631,7 +572,7 @@
    for i in range(0, 5):
        # 如果时
        trade_state = CodesTradeStateManager().get_trade_state_cache(code)
        if trade_state != TRADE_STATE_BUY_CANCEL_ING and trade_state != TRADE_STATE_BUY_CANCEL_SUCCESS:
        if trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_ING and trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS:
            return
        try:
            logger_trade.info("{}:开始再次撤单", code)
@@ -668,8 +609,8 @@
        if code is not None and int(data["type"]) == 0:
            l2_trade_util.forbidden_trade(code, msg="交易成功", force=True)
            state = CodesTradeStateManager().get_trade_state_cache(code)
            if state != TRADE_STATE_BUY_SUCCESS:
                CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_SUCCESS)
            if state != trade_constant.TRADE_STATE_BUY_SUCCESS:
                CodesTradeStateManager().set_trade_state(code, trade_constant.TRADE_STATE_BUY_SUCCESS)
                # 删除买撤记录的临时信息
                kp_client_msg_manager.add_msg(code, "买入成交")
                l2_data_manager.TradePointManager().delete_buy_point(code)
@@ -699,17 +640,17 @@
            codes.append(code)
            trade_state = CodesTradeStateManager().get_trade_state_cache(code)
            # 设置下单状态的代码为已委托
            if trade_state == TRADE_STATE_BUY_PLACE_ORDER:
                CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_DELEGATED)
            if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER:
                CodesTradeStateManager().set_trade_state(code, trade_constant.TRADE_STATE_BUY_DELEGATED)
    if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN:
        ing_codes = CodesTradeStateManager().get_codes_by_trade_state(TRADE_STATE_BUY_CANCEL_ING)
        ing_codes = CodesTradeStateManager().get_codes_by_trade_state(trade_constant.TRADE_STATE_BUY_CANCEL_ING)
        if ing_codes is not None:
            for code in ing_codes:
                if code in codes:
                    # 强制重新取消
                    start_cancel_buy(code, True)
                else:
                    CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_CANCEL_SUCCESS)
                    CodesTradeStateManager().set_trade_state(code, trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS)
                    l2_data_manager.remove_from_l2_fixed_codes(code)
trade/trade_queue_manager.py
@@ -6,7 +6,7 @@
from db import redis_manager_delegate as redis_manager
from db.redis_manager_delegate import RedisUtils
from utils import tool
from trade import trade_manager
from trade import trade_manager, trade_constant
class THSBuy1VolumnManager:
@@ -151,7 +151,7 @@
        # 如果当前已挂单
        state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
        if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER:
        if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER:
            # 判断本次与上一次的封单额是否小于5000w
            limit_up_price = gpcode_manager.get_limit_up_price(code)
            threshold_num = 50000000 // (limit_up_price * 100)
utils/buy_condition_util.py
@@ -3,7 +3,7 @@
"""
# 获取自由流通市值限制
# 返回:(最大买入,最优自由流通最小,最优自由流通最大)
from trade.trade_manager import MarketSituationManager
from settings.trade_setting import MarketSituationManager
# 获取自由流通市值的阈值范围