Administrator
2024-05-13 9e2b977ab4460114fc9cc6db690342e78dfbc794
大市值无大单撤
3个文件已修改
72 ■■■■■ 已修改文件
l2/cancel_buy_strategy.py 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_transaction_data_processor.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_result_manager.py 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/cancel_buy_strategy.py
@@ -40,6 +40,7 @@
    NewGCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index, is_default)
    FCancelBigNumComputer().set_real_order_index(code, index, is_default)
    JCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index, is_default)
    NBCancelBigNumComputer().set_real_place_order_index(code, index, buy_single_index, is_default)
class BaseCancel:
@@ -3282,5 +3283,60 @@
        self.__clear_data(code)
class NBCancelBigNumComputer(BaseCancel):
    """
    NB撤:
    大市值5分钟内前面没有大单撤
    """
    __real_place_order_index_info_dict = {}
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(NBCancelBigNumComputer, cls).__new__(cls, *args, **kwargs)
        return cls.__instance
    def set_real_place_order_index(self, code, index, buy_single_index, is_default):
        self.__real_place_order_index_info_dict[code] = (index, is_default)
    def need_cancel(self, code, trade_index):
        # [时间, 真实下单位置, 信号总手数, 目前手数, 最新计算的索引]
        real_place_order_index_info = self.__real_place_order_index_info_dict.get(code)
        if not real_place_order_index_info or real_place_order_index_info[1]:
            return False, "没有找到真实下单位"
        real_place_order_index = real_place_order_index_info[0]
        limit_up_price = round(float(gpcode_manager.get_limit_up_price(code)),2)
        if limit_up_price < 3:
            return False, "股价小于3块"
        zyltgb = l2_trade_factor.L2TradeFactorUtil.get_zyltgb(code)
        zyltgb_unit_y = round(zyltgb / 100000000, 1)
        if zyltgb_unit_y < 50:
            return False, '自由流通股本小于50亿'
        # 计算剩余数量
        total_datas = local_today_datas.get(code)
        if tool.trade_time_sub(tool.get_now_time_str(), total_datas[real_place_order_index]['val']['time']) > 300:
            return False, "超过生效时间"
        total_left_count, total_left_num = L2DataComputeUtil.compute_left_buy_order(code, trade_index, real_place_order_index,limit_up_price, 299*10000)
        if total_left_count > 0:
            return False, '有大单'
        return True, f'无大单:{trade_index}-{real_place_order_index}'
    def __clear_data(self, code):
        if code in self.__real_place_order_index_info_dict:
            self.__real_place_order_index_info_dict.pop(code)
    def cancel_success(self, code):
        self.__clear_data(code)
    def place_order_success(self, code):
        self.__clear_data(code)
if __name__ == "__main__":
    pass
l2/l2_transaction_data_processor.py
@@ -5,7 +5,8 @@
from code_attribute import gpcode_manager
from l2 import l2_data_util, l2_data_manager, transaction_progress
from l2.cancel_buy_strategy import FCancelBigNumComputer, LCancelBigNumComputer, LCancelRateManager, \
    GCancelBigNumComputer, SCancelBigNumComputer, HourCancelBigNumComputer, NewGCancelBigNumComputer
    GCancelBigNumComputer, SCancelBigNumComputer, HourCancelBigNumComputer, NewGCancelBigNumComputer, \
    NBCancelBigNumComputer
from l2.huaxin import l2_huaxin_util
from l2.l2_data_manager import OrderBeginPosInfo
from l2.l2_data_manager_new import L2TradeDataProcessor
@@ -144,6 +145,14 @@
                    cancel_result = FCancelBigNumComputer().need_cancel_for_deal_fast(code, buy_progress_index)
                    if cancel_result[0]:
                        L2TradeDataProcessor.cancel_buy(code, f"F撤:{cancel_result[1]}")
                    else:
                        try:
                            cancel_result = NBCancelBigNumComputer().need_cancel(code, buy_progress_index)
                            if cancel_result[0]:
                                L2TradeDataProcessor.cancel_buy(code, f"大市值无大单撤:{cancel_result[1]}")
                        except:
                            pass
                    SCancelBigNumComputer().set_transaction_index(code, order_begin_pos.buy_single_index,
                                                                  buy_progress_index)
trade/trade_result_manager.py
@@ -5,7 +5,7 @@
from l2 import l2_data_manager, place_order_single_data_manager
from l2.cancel_buy_strategy import HourCancelBigNumComputer, SCancelBigNumComputer, \
    LCancelBigNumComputer, DCancelBigNumComputer, GCancelBigNumComputer, FCancelBigNumComputer, \
    NewGCancelBigNumComputer, JCancelBigNumComputer
    NewGCancelBigNumComputer, JCancelBigNumComputer, NBCancelBigNumComputer
from l2.l2_data_manager import OrderBeginPosInfo
from l2.l2_data_util import local_today_datas, local_today_num_operate_map, L2DataUtil
from l2.l2_sell_manager import L2MarketSellManager
@@ -33,6 +33,7 @@
    LCancelBigNumComputer().cancel_success(code)
    NewGCancelBigNumComputer().cancel_success(code)
    JCancelBigNumComputer().cancel_success(code)
    NBCancelBigNumComputer().cancel_success(code)
    # dask.compute(f1, f2, f5, f6, f7, f8)
@@ -88,6 +89,7 @@
    l_cancel(code)
    g_cancel(code)
    JCancelBigNumComputer().place_order_success(code)
    NBCancelBigNumComputer().place_order_success(code)
    if order_begin_pos.mode == OrderBeginPosInfo.MODE_FAST:
        f_cancel(code)
        # 记录卖盘统计时间被用
@@ -121,6 +123,7 @@
    FCancelBigNumComputer().cancel_success(code)
    NewGCancelBigNumComputer().cancel_success(code)
    JCancelBigNumComputer().cancel_success(code)
    NBCancelBigNumComputer().cancel_success(code)
    # 记录最近的撤单时间
    if from_real_cancel:
        __latest_cancel_l2_data_dict[code] = total_datas[-1]