Administrator
2022-11-03 f03eb72394a3fac097bb3ab1f956a83f99f7bd0e
trade_queue_manager.py
@@ -5,6 +5,7 @@
import gpcode_manager
import redis_manager
import tool
import trade_manager
class THSBuy1VolumnManager:
@@ -57,14 +58,14 @@
        key = "buy1_volumn_codes"
        return self.__get_redis().smembers(key)
    # 返回是否需要更新数据
    # 返回是否需要更新数据,是否需要撤单,撤单原因
    def save(self, code, time_str, volumn, price):
        # 客户端数据未加载出来过滤
        if volumn < 1:
            return False
            return False, False, None
        # 14:55:00之后不在处理
        if int(time_str.replace(':', '')) >= int("145500"):
            return False
            return False, False, None
        self.__add_recod(code)
        # 判断是否为涨停价
@@ -72,10 +73,10 @@
        if limit_up_price != tool.to_price(decimal.Decimal(price)):
            # 非涨停价
            volumn = 0
        last_volumn = self.__last_data[code]
        # 不保存和上一次相同的数据
        if code in self.__last_data and self.__last_data[code] == volumn:
            return False
        if code in self.__last_data and last_volumn == volumn:
            return False, False, None
        self.__last_data[code] = volumn
        if code not in self.__code_time_volumn_dict:
@@ -94,7 +95,25 @@
            self.__save_last_recod(code, keys[0], self.__code_time_volumn_dict[code][keys[0]])
        self.__save_recod(code, time_str, volumn)
        return True
        # 如果当前已挂单
        state = trade_manager.get_trade_state(code)
        if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER:
            # 判断本次与上一次的封单额是否小于5000w
            limit_up_price = gpcode_manager.get_limit_up_price(code)
            threshold_num = 50000000 // (limit_up_price * 100)
            if volumn < threshold_num and last_volumn < threshold_num:
                # 下降趋势
                if volumn < last_volumn:
                    if (last_volumn - volumn) / last_volumn > 0.5:
                        return True, True, "连续两次封单量降幅达50%以上,时间:{} 封单量:{}-{}".format(time_str, last_volumn, volumn)
                    # 当封单额小于1000万需要撤单
                    min_num = 10000000 // (limit_up_price * 100)
                    if volumn < min_num:
                        return True, True, "最新封单额小于1000万,时间:{} 封单量:{}".format(time_str, volumn)
        return True, False, None
    # 获取校验数据
    # 返回上一次的数据,如果没有上一次的就返回本次的