| | |
| | | |
| | | # 获取撤单比例,返回(撤单比例,是否必买) |
| | | @classmethod |
| | | def get_cancel_rate(cls, code, buy_exec_time, is_up=False, is_l_down_recomputed=False): |
| | | def get_cancel_rate(cls, code, buy_exec_time, is_up=False, is_l_down_recomputed=False, buy_mode = None): |
| | | try: |
| | | must_buy = cls.__MustBuyCodesManager.is_in_cache(code) |
| | | if must_buy: |
| | | if buy_mode == OrderBeginPosInfo.MODE_RADICAL: |
| | | # 扫入的化撤单比例调整为80% |
| | | return constant.L_CANCEL_RATE_WITH_MUST_BUY_FOR_REDICAL_BUY, True |
| | | else: |
| | | if is_up: |
| | | return constant.L_CANCEL_RATE_UP_WITH_MUST_BUY, True |
| | | else: |
| | |
| | | continue |
| | | pass |
| | | |
| | | if len(k_format) > 14 and k_format[14]: |
| | | l2_trade_util.forbidden_trade(code, "昨日炸板") |
| | | continue |
| | | |
| | | if code_nature_analyse.is_continue_limit_up_not_enough_fall_dwon(code, volumes_data): |
| | | # 判断是否太高 |
| | | l2_trade_util.forbidden_trade(code, "回踩不够") |
| | |
| | | |
| | | L_CANCEL_RATE_WITH_MUST_BUY = 0.9 # 加红L后 |
| | | |
| | | L_CANCEL_RATE_WITH_MUST_BUY_FOR_REDICAL_BUY = 0.8 # 扫入加红 |
| | | |
| | | # L上撤单比例 |
| | | L_CANCEL_RATE_UP = 0.79 # L前 |
| | | |
| | |
| | | from trade import current_price_process_manager, trade_constant |
| | | import concurrent.futures |
| | | |
| | | from trade.radical_buy_data_manager import RedicalBuyDataManager |
| | | from utils import tool |
| | | |
| | | |
| | |
| | | buy_datas, bigger_buy_datas = HuaXinBuyOrderManager.statistic_big_buy_data(code, datas, limit_up_price) |
| | | if buy_datas: |
| | | BigOrderDealManager().add_buy_datas(code, buy_datas) |
| | | RedicalBuyDataManager.big_order_deal(code) |
| | | try: |
| | | is_placed_order = l2_data_manager.TradePointManager.is_placed_order(order_begin_pos) |
| | | if is_placed_order and bigger_buy_datas: |
| | |
| | | # target=huaxin_client.l2_client.run, |
| | | # args=(queue_other_w_l2_r, order_queues, transaction_queues, market_queue, order_ipc_hosts,huaxin_trade_server.my_l2_data_callback)) |
| | | # l2Process.start() |
| | | # 将L2的进程改为进程执行 |
| | | # 将L2的进程改为线程执行 |
| | | threading.Thread(target=huaxin_client.l2_client.run, args=( |
| | | queue_other_w_l2_r, huaxin_trade_server.my_l2_data_callbacks), daemon=True).start() |
| | | |
| | |
| | | current_limit_up_datas = [] |
| | | |
| | | # 获取目标代码板块 |
| | | keys, k1, k11, k2, k3, k4 = cls.__TargetCodePlateKeyManager.get_plate_keys(code) |
| | | # keys, k1, k11, k2, k3, k4 = cls.__TargetCodePlateKeyManager.get_plate_keys(code) |
| | | keys, k1 = RadicalBuyBlockManager.get_code_blocks(code) |
| | | |
| | | # log.logger_kpl_debug.info("{}最终关键词:{}", code, keys) |
| | | |
| | |
| | | fresults = [] |
| | | if not keys: |
| | | return fresults, set() |
| | | # 获取精选流出板块 |
| | | jx_out_blocks = RealTimeKplMarketData.get_top_market_jingxuan_out_blocks() |
| | | if jx_out_blocks: |
| | | keys -= jx_out_blocks |
| | | |
| | | code_limit_up_reasons_dict = {} |
| | | load_code_block() |
| | |
| | | limit_up_time = time.time() |
| | | for k in LimitUpDataConstant.current_limit_up_datas: |
| | | _code = k[0] |
| | | # 剔除4板以上的板 |
| | | if kpl_util.get_high_level_count(k[4]) >= 4: |
| | | continue |
| | | |
| | | if _code in exclude_codes: |
| | | continue |
| | | blocks = LimitUpDataConstant.get_blocks_with_history(_code) |
| | |
| | | limit_up_space_ge_60s_codes = set() |
| | | for k in LimitUpDataConstant.history_limit_up_datas: |
| | | _code = k[3] |
| | | |
| | | # 剔除4板以上的板 |
| | | if kpl_util.get_high_level_count(k[12]) >= 4: |
| | | continue |
| | | |
| | | if _code in exclude_codes: |
| | | continue |
| | | blocks = LimitUpDataConstant.get_blocks_with_history(_code) |
| | |
| | | from code_attribute import code_nature_analyse, code_volumn_manager, gpcode_manager |
| | | from code_attribute.code_l1_data_manager import L1DataManager |
| | | from l2.l2_sell_manager import L2MarketSellManager |
| | | from l2.l2_transaction_data_manager import BigOrderDealManager |
| | | from log_module import async_log_util |
| | | from log_module.log import logger_l2_radical_buy |
| | | from third_data import kpl_data_manager |
| | |
| | | if not k_format[13]: |
| | | return False, "近60个交易日无涨停" |
| | | if k_format[14]: |
| | | # 昨天炸板,且当前的量比小于33% |
| | | # 昨天炸板,且当前的量比小于60% |
| | | current_total_sell_data = L2MarketSellManager().get_current_total_sell_data(code) |
| | | total_sell_volume = 0 |
| | | if current_total_sell_data: |
| | | total_sell_volume = current_total_sell_data[2] |
| | | volume_rate = code_volumn_manager.get_volume_rate(code, total_sell_volume=total_sell_volume) |
| | | if volume_rate < 0.33: |
| | | return False, f"昨日炸板,量比({volume_rate})<0.33" |
| | | if volume_rate < 0.6: |
| | | return False, f"昨日炸板,量比({volume_rate})<0.6" |
| | | |
| | | # MAX_CODE_PRICE = 50 |
| | | # MIN_CODE_PRICE = 2 |
| | |
| | | return False, "已拉黑" |
| | | return True, "" |
| | | |
| | | @classmethod |
| | | def big_order_deal(cls, code): |
| | | """ |
| | | 有大单成交 |
| | | @param code: |
| | | @param count: |
| | | @return: |
| | | """ |
| | | if gpcode_manager.MustBuyCodesManager().is_in_cache(code): |
| | | return |
| | | cls.place_order_success(code) |
| | | |
| | | @classmethod |
| | | def place_order_success(cls, code): |
| | | # 如果有大单成交就加红 |
| | | deal_big_order_count = BigOrderDealManager().get_total_buy_count(code) |
| | | if deal_big_order_count > 0: |
| | | gpcode_manager.MustBuyCodesManager().add_code(code) |
| | | |
| | | |
| | | def is_block_can_radical_buy(code, radical_buy_blocks, deal_codes): |
| | | # 原因下面的代码个数 |
| | |
| | | THRESHOLD_RATE = radical_buy_data_manager.get_volume_rate_threshold(code, volume_rate) |
| | | if rate >= THRESHOLD_RATE: |
| | | # 成交的比例 |
| | | if total_sell > 500 * 1e4: |
| | | if total_sell > 1000 * 1e4: |
| | | return BUY_MODE_DIRECT, f"剩余涨停总卖额-{selling_num * price},原涨停总卖-{total_sell},已成交额-{__deal_active_buy_total_money[code]},成交比例-{rate}/{THRESHOLD_RATE}" |
| | | else: |
| | | return BUY_MODE_BY_L2, f"剩余涨停总卖额小于500w-{selling_num * price},原涨停总卖-{total_sell},已成交额-{__deal_active_buy_total_money[code]},成交比例-{rate}/{THRESHOLD_RATE} " |
| | |
| | | from l2.l2_data_util import local_today_datas, L2DataUtil |
| | | from l2.l2_sell_manager import L2MarketSellManager |
| | | from log_module.log import logger_l2_error |
| | | from trade.radical_buy_data_manager import RedicalBuyDataManager |
| | | from trade.trade_data_manager import PlaceOrderCountManager |
| | | from trade.trade_queue_manager import THSBuy1VolumnManager |
| | | from utils import tool, buy_condition_util |
| | |
| | | |
| | | # 如果是扫入下单,下单之后就加红 |
| | | if order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL: |
| | | MustBuyCodesManager().add_code(code) |
| | | RedicalBuyDataManager.place_order_success(code) |
| | | |
| | | # 清除下单信号 |
| | | place_order_single_data_manager.L2TradeSingleDataManager.clear_data(code) |