首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何实现尾盘选股进行量化交易

如何实现尾盘选股进行量化交易

作者头像
子晓聊技术
发布2026-04-23 16:33:19
发布2026-04-23 16:33:19
1710
举报
文章被收录于专栏:子晓AI量化子晓AI量化

最近受圈内同学启发, 实现下尾盘选股量化交易。 之前个人竞价选股、盘中选股比较多, 临近国庆,最近的行情高开低走的个股较多。 在思考要不用量化尾盘选股, 次日拉高卖出套利。

先写下大体的思路。

  • 时间窗口: 通常指 14:30 - 15:00,尤其是最后 30分钟
  • 核心优点:
    1. 规避日内波动风险: 接近收盘,当日主要走势已基本定型,买入后只需承受隔夜风险,避免了盘中大幅波动的困扰。适合风险厌恶型或无法盯盘的投资者。
    2. 确认当日强弱,提高胜率: 尾盘走势往往能更真实地反映个股当日的最终强弱。强势股尾盘通常能维持强势甚至拉升,弱势股则可能加速下跌。此时选股,对当日走势的判断更准确。
    3. 捕捉主力“做图”意图: 主力资金有时会利用尾盘进行收盘价操纵(如拉高收盘价以维持技术形态、吸引跟风;或打压收盘价以便次日低位吸筹)。识别这些意图可能带来交易机会。
    4. 为次日操作布局: 尾盘选股买入,目标往往是次日的行情(如高开、冲高)。可以根据当日收盘情况,结合消息面和技术面,提前布局次日可能的机会。
    5. 利用“T+1”规则优势(A股): 当日买入,次日才能卖出。尾盘买入,持股时间最短,资金效率相对较高(如果次日开盘或冲高即卖出)。
    6. 观察资金动向: 尾盘是部分资金(尤其是机构、游资)调仓、建仓、洗盘的关键时段,大单动向值得重点关注。

这里说下大概思路。 下午2点55分,借助同花顺问财的一些条件, 获取后再判断下个股的技术指标是否满足我的审美, 生成筛选后的结果保存到csv文件中。

代码语言:javascript
复制
def job():
    """定时任务主逻辑"""
    logger.info("开始执行定时数据保存任务")
    # 获取数据
    data = get_pywencai_data()
    if data is not None:
        # 保存数据
        filename = save_to_csv_with_date(data)
        if filename:
            logger.info("数据保存任务完成")
        else:
            logger.error("数据保存失败")
    else:
        logger.error("未获取到数据,跳过保存")

然后写miniqmt自动交易。写一个定时任务,14:57分 读取csv文件并解析, 判断资金持仓, 进行下单操作。

这里提供代码片段思路

代码语言:javascript
复制
def execute_trading_strategy(self, data):
        """
        执行交易策略
        根据数据生成交易信号并下单
        """
        if data is None or len(data) == 0:
            logger.warning("无有效数据,跳过交易")
            return False
        # 检查交易连接
        if not self.connected:
            logger.error("交易连接不可用,无法执行策略")
            return False
        try:
            # 查询账户资金
            balance = self.check_account_balance()
            if not balance:
                logger.error("无法获取账户资金信息,停止执行策略")
                return False
            # 确定CSV中股票代码的列名
            # 可能的列名: 'code', 'symbol', '股票代码', 'stock_code' 等
            code_columns = ['code', 'symbol', '股票代码', 'stock_code']
            code_column = None
            for col in code_columns:
                if col in data.columns:
                    code_column = col
                    break
            if code_column is None:
                logger.error("CSV文件中未找到股票代码列")
                return False
            logger.info(f"使用列 '{code_column}' 作为股票代码源")
            # 执行下单
            success_count = 0
            processed_count = 0
            for i, row in data.iterrows():
                # 从CSV行中获取股票代码
                stock_code = row[code_column]
                # 确保股票代码是字符串类型
                stock_code = str(stock_code).strip()
                # 跳过空值或无效代码
                if not stock_code or stock_code == 'nan' or stock_code == 'None':
                    continue
                logger.info(f"处理股票代码: {stock_code}")
                # 获取实时最优价格
                optimal_price = self.get_optimal_price(stock_code)
                if optimal_price <= 0:
                    logger.warning(f"无法获取 {stock_code} 的有效价格,跳过")
                    continue
                # 根据资金情况决定下单数量
                available_cash = balance['cash'] - balance['frozen_cash']
                quantity = int((available_cash * 0.05) / optimal_price / 100) * 100  # 取整百股
                if quantity < 100:  # 最少100股
                    quantity = 100
                logger.info(f"计划下单: 代码={stock_code}, 价格≈{optimal_price:.2f}, 数量={quantity}")
                # 执行买入下单(使用自动计算的最优价格)
                if self.place_order(stock_code, quantity, xtconstant.STOCK_BUY, "opponent", optimal_price):
                    success_count += 1
                processed_count += 1
                # 可选: 限制处理股票数量,避免过多交易
                if processed_count >= 5:  # 最多处理5只股票
                    logger.info("已达到最大处理股票数量限制(5)")
                    break
            logger.info(f"交易策略执行完成: 共处理 {processed_count} 只股票, 成功 {success_count} 笔")
            return success_count > 0
        except Exception as e:
            logger.error(f"执行交易策略时发生异常: {str(e)}")
            return False
    def job(self):
        """定时任务主逻辑"""
        logger.info("开始执行定时下单任务")
        # 获取最新的CSV文件
        csv_file = self.get_latest_csv_file()
        if csv_file:
            # 读取数据
            data = self.read_csv_data(csv_file)
            # 执行交易策略
            self.execute_trading_strategy(data)
        else:
            logger.error("未找到CSV文件,跳过下单")

其实和竞价选股下单思路一样,就是得出选股结果保存csv文件中。 其它代码复用。 我只需要把时间聚焦在 选股策略上, 至于到底用同花顺、还是通达信、 还是东方财富数据都无所谓。

前提说明, 最好是低频策略,对分时要求没那么高。 如果分时高频策略, 就不要这样中转了

如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档