| | |
| | | TargetCodePlateKeyManager |
| | | from third_data.history_k_data_util import JueJinApi |
| | | from trade import trade_manager, l2_trade_util, \ |
| | | trade_data_manager, trade_constant |
| | | trade_data_manager, trade_constant, radical_buy_strategy |
| | | |
| | | from trade.huaxin import huaxin_trade_api as trade_api, huaxin_trade_api, huaxin_trade_data_update, \ |
| | | huaxin_trade_record_manager, huaxin_sell_util |
| | |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | |
| | | def OnLimitUpActiveBuy(self, code, huaxin_timestamp, buy_no): |
| | | def OnLimitUpActiveBuy(self, code, transaction_datas): |
| | | try: |
| | | # 判断最近60个交易日有无涨停 |
| | | # 判断昨日是否涨停过 |
| | | async_log_util.info(logger_l2_radical_buy, f"涨停主动买:{code}-{huaxin_timestamp}") |
| | | async_log_util.info(logger_l2_radical_buy, f"涨停主动买:{code}-{transaction_datas[-1]}") |
| | | deal_codes = RadicalBuyDealCodesManager().get_deal_codes() |
| | | if len(deal_codes) >= 2: |
| | | async_log_util.info(logger_l2_radical_buy, f"成交代码个数大于2个:{code}-{deal_codes}") |
| | |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | |
| | | # 有可以扫的板块 |
| | | # 判断最近的主动买占了总买额的多少 |
| | | refer_sell_data = L2MarketSellManager().get_refer_sell_data(code, l2_huaxin_util.convert_time( |
| | | huaxin_timestamp)) |
| | | async_log_util.info(logger_l2_radical_buy, f"参考总卖额:{code}-{refer_sell_data}") |
| | | if refer_sell_data: |
| | | # 如果总卖额大于500w,成交到一半就直接扫 |
| | | if refer_sell_data[1] >= 500 * 1e4: |
| | | THRESH_HOLD_VOLUME = refer_sell_data[2] |
| | | if refer_sell_data[4] and len(refer_sell_data[4]) < 10: |
| | | # 小于10挡,最后一档才是涨停价 |
| | | if refer_sell_data[4][-1][1] > 0: |
| | | THRESH_HOLD_VOLUME = refer_sell_data[4][-1][1] |
| | | |
| | | refer_sell_time = refer_sell_data[0] |
| | | # 获取最近的主动买成交量 |
| | | limit_up_deal_infos = HuaXinSellOrderStatisticManager.get_latest_6s_active_buy_deal_volumes( |
| | | code) |
| | | async_log_util.info(logger_l2_radical_buy, f"最近涨停主动买成交:{code}-{limit_up_deal_infos}") |
| | | # 总卖额要大于100w |
| | | deal_volume = 0 |
| | | for i in range(0, len(limit_up_deal_infos)): |
| | | # >=统计到的总卖 |
| | | if int(refer_sell_time.replace(":", "")) > int( |
| | | limit_up_deal_infos[i][0].replace(":", "")): |
| | | break |
| | | deal_volume += limit_up_deal_infos[i][1] |
| | | async_log_util.info(logger_l2_radical_buy, f"成交量:{deal_volume}/{THRESH_HOLD_VOLUME}") |
| | | deal_rate = round(deal_volume / THRESH_HOLD_VOLUME, 2) |
| | | if deal_rate > 0.5: |
| | | # 判断参考时间之后是否有大单成交 |
| | | # big_deal_money_list = BigOrderDealManager().get_total_buy_money_list(code) |
| | | # 成交比例大于50% |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | buy_single_index, buy_exec_index = total_datas[-1]["index"], total_datas[-1]["index"] |
| | | buy_volume_rate = L2TradeDataProcessor.volume_rate_info[code][0] |
| | | sell_info = (refer_sell_data[0], refer_sell_data[0]) |
| | | threshold_money = 0 |
| | | order_begin_pos_info = OrderBeginPosInfo(buy_single_index=buy_single_index, |
| | | buy_exec_index=buy_exec_index, |
| | | buy_compute_index=buy_exec_index, |
| | | num=deal_volume // 100, count=1, |
| | | max_num_set=set(), |
| | | buy_volume_rate=buy_volume_rate, |
| | | mode=OrderBeginPosInfo.MODE_RADICAL, |
| | | mode_desc="激进买入", |
| | | sell_info=sell_info, |
| | | threshold_money=threshold_money) |
| | | L2TradeDataProcessor.save_order_begin_data(code, order_begin_pos_info) |
| | | L2TradeDataProcessor.start_buy(code, total_datas[-1], total_datas[-1]["index"], True) |
| | | # -----根据成交比例判断是否可买------ |
| | | result_by_volume = radical_buy_strategy.limit_up_active_buy_deal(code, transaction_datas) |
| | | if result_by_volume[0] != radical_buy_strategy.BUY_MODE_NONE: |
| | | if result_by_volume[0] == radical_buy_strategy.BUY_MODE_DIRECT: |
| | | refer_sell_data = L2MarketSellManager().get_refer_sell_data(code, |
| | | l2_huaxin_util.convert_time( |
| | | transaction_datas[-1][3])) |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | buy_single_index, buy_exec_index = total_datas[-1]["index"], total_datas[-1]["index"] |
| | | buy_volume_rate = L2TradeDataProcessor.volume_rate_info[code][0] |
| | | sell_info = (0, 0) |
| | | if refer_sell_data: |
| | | sell_info = (refer_sell_data[0],refer_sell_data[1]) |
| | | threshold_money = 0 |
| | | order_begin_pos_info = OrderBeginPosInfo(buy_single_index=buy_single_index, |
| | | buy_exec_index=buy_exec_index, |
| | | buy_compute_index=buy_exec_index, |
| | | num=1, count=1, |
| | | max_num_set=set(), |
| | | buy_volume_rate=buy_volume_rate, |
| | | mode=OrderBeginPosInfo.MODE_RADICAL, |
| | | mode_desc="激进买入", |
| | | sell_info=sell_info, |
| | | threshold_money=threshold_money) |
| | | L2TradeDataProcessor.save_order_begin_data(code, order_begin_pos_info) |
| | | L2TradeDataProcessor.start_buy(code, total_datas[-1], total_datas[-1]["index"], True) |
| | | else: |
| | | # L2委托有大单就扫 |
| | | # 记录买入信号, 3s内有效 |
| | | RadicalBuyDealCodesManager.buy_by_l2_delegate_expire_time_dict[code] = ( |
| | | time.time() + 3, buy_no) |
| | | time.time() + 3, transaction_datas[-1][6]) |
| | | else: |
| | | async_log_util.info(logger_l2_radical_buy, f"不能下单:{code}-{result_by_volume}") |
| | | else: |
| | | volume_rate = code_volumn_manager.get_volume_rate(code) |
| | | async_log_util.info(logger_l2_radical_buy, f"没有可扫入的板块:{code},量比:{volume_rate}") |