返回列表 发布新帖

尾盘拉升的隔日胜率简单分析

1564 0
发表于 2024-2-22 16:00:26 | 显示全部楼层 阅读模式

1 策略思路

尾盘选股时,经常会碰到在尾盘最后几分钟特别是接近15点前,有些个股会突然拉升,从而形成收盘价是全天最高价的情况,比如昨天(2024/02/21)的 科德教育 ( 300192 )、今天(2024/02/22)的硕贝德(300322)。从直觉来看,这种个股下一个交易日很可能会有溢价。实际情况是否真是如此呢?让我们用数据来给出答案。

2 投研验证

在投研阶段,为了简化问题,我们直接使用日线数据,并用日线数据的收盘价等于最高价来代表这种情况(实际上是有一定出入的,后面回详细讲解)。并且,为了计算隔日(下一个交易日)的胜率,我们取下一个交易日的最高涨幅来判断:当下一个交易日的最高涨幅超过1.2%则判定为胜,否则为败。选取1.2%这个涨幅是因为这种尾盘选股做超短,一般是尾盘买入隔日卖出,追求的是每天有正收益,而不是追求大收益。尾盘策略扣除掉交易费用、买入时的资金未足量使用(100手的整数倍的限制),每天能有1%以上的收益就可以做到全年很好的年化收益了(1.01^240=10.89,每天1%的盈利可以做到1年10倍收益)。

因为我通常主要做创业板的个股,因此这里选取创业板的1300+股票作为分析对象。使用QMT精简版(miniQMT)或 迅投的投研尊享版 来获取2020/01/01至今(2024/02/22)的数据进行验证,具体实现代码如下:

# coding:utf-8
'''
验证一个简单的选股策略的胜率:尾盘最高价策略,即尾盘的收盘价是全天的最高价
欢迎关注今日头条的“金陵量化”,感谢浏览/评论/转发。
@author: 金陵量化<[email]jlquant@qq.com[/email]>
@date: 2024/02/21
'''

import pandas as pd
import numpy as np
import os
from tqdm import tqdm
from xtquant import xtdata

pd.set_option('display.max_columns', 100)
pd.set_option('display.max_rows', 100)


# 利用QMT精简版(miniQMT/xtquant)/迅投投研尊享版 来获取历史数据以便进行统计分析
def get_stock_his_data(stock_list, str_start_date, str_end_date):
    file_his_data = './data/stock_his_data.pkl'
    if not os.path.exists('./data'):
        os.mkdir('./data')
    if os.path.exists(file_his_data):
        df = pd.read_pickle(file_his_data)
        return df

    print('通过QMT精简版(miniQMT/xtquant)或 迅投投研尊享版 来获取历史数据...')
    for stock in tqdm(stock_list):
        # 要先下载历史数据才能获取到正确的数据
        xtdata.download_history_data(stock, '1d', str_start_date, str_end_date)

    # 读取历史数据
    list_df = []
    filed_list = ['stime','open','high','low','close','volume', 'amount', 'preClose']
    data = xtdata.get_market_data_ex(filed_list, stock_list, period='1d', start_time=str_start_date, end_time=str_end_date)
    for stock in tqdm(stock_list):
        df_stock = data[stock]

        # 添加字段计算下一个交易日的最大涨幅
        df_stock['nextHigh'] = df_stock['high'].shift(-1)  # 后1天的最高价
        df_stock['next_high_inc'] = np.round((df_stock['nextHigh'] - df_stock['close']) * 100 / df_stock['close'], 2)
        df_stock['stock_code'] = stock
        df_stock['stime'] = df_stock.index

        # 添加股票名称
        df_stock['stock_name'] = xtdata.get_instrument_detail(stock)['InstrumentName']

        list_df.append(df_stock)

    # 合并成pandas的dataframe方便处理
    df_1d = pd.concat(list_df, ignore_index=True)
    df_1d.to_pickle(file_his_data)
    return df_1d

if __name__ == '__main__':
    print('验证尾盘最高价买入策略的胜率')

    stock_list = xtdata.get_stock_list_in_sector('创业板')
    str_start_date = '20200101'
    str_end_date = '20240222'
    df_1d = get_stock_his_data(stock_list, str_start_date, str_end_date)

    df_sel = df_1d[df_1d['close'] == df_1d['high']].copy()

    df_sel['is_win'] = 0
    df_sel.loc[df_sel.next_high_inc >= 1.2, 'is_win'] = 1
    print('隔日最高超过1.2%的数量:\n',df_sel.groupby('is_win').size())
    print('隔日最高超过1.2%的胜率(%):', np.round(df_sel.is_win.mean()*100,2))

    # 显示今天满足条件的个股
    df_today = df_sel[df_sel.stime == '20240222']
    print('今天(20240222)满足策略的个股:')
    print(df_today[['stock_name','stock_code', 'open', 'high', 'low', 'close']])

运行结果如下:

隔日最高超过1.2%的数量: is_win 0 12051 1 15501 dtype: int64 隔日最高超过1.2%的胜率(%): 56.26 今天(20240222)满足策略的个股: stock_name stock_code open high low close 4007 南风股份 300004.SZ 4.27 4.40 4.26 4.40 37073 九洲集团 300040.SZ 4.00 4.13 4.00 4.13 43085 台基股份 300046.SZ 11.10 11.53 11.10 11.53 44087 天源迪科 300047.SZ 6.73 6.96 6.67 6.96 47093 世纪鼎利 300050.SZ 2.95 3.14 2.95 3.14 ... ... ... ... ... ... ... 1270535 通达海 301378.SZ 29.97 35.34 29.50 35.34 1279553 隆扬电子 301389.SZ 11.88 12.18 11.83 12.18 1297589 开创电气 301448.SZ 23.00 24.63 22.93 24.63 1300595 博盈特焊 301468.SZ 22.60 22.99 22.50 22.99 1331657 惠柏新材 301555.SZ 26.50 27.31 26.28 27.31

[164 rows x 6 columns]

看起来胜率是挺高的,然而,这里面包含了很多涨停的个股,而尾盘处于涨停的个股自然隔日有溢价的可能性比较高。因此需要过滤掉尾盘涨停的个股。非常感谢 大漠孤烟 的提醒!

要过滤涨停的个股,只需要在第66行之后增加一句代码:

df_sel = df_sel[df_sel.close < np.round(df_sel.preClose * 1.2, 2)]

过滤掉涨停的个股之后,运行结果:

隔日最高超过1.2%的数量: is_win 0 11485 1 12495 dtype: int64 隔日最高超过1.2%的胜率(%): 52.11 今天(20240222)满足策略的个股: stock_name stock_code open high low close 4007 南风股份 300004.SZ 4.27 4.40 4.26 4.40 37073 九洲集团 300040.SZ 4.00 4.13 4.00 4.13 43085 台基股份 300046.SZ 11.10 11.53 11.10 11.53 44087 天源迪科 300047.SZ 6.73 6.96 6.67 6.96 47093 世纪鼎利 300050.SZ 2.95 3.14 2.95 3.14 ... ... ... ... ... ... ... 1252499 北方长龙 301357.SZ 32.29 33.58 32.03 33.58 1279553 隆扬电子 301389.SZ 11.88 12.18 11.83 12.18 1297589 开创电气 301448.SZ 23.00 24.63 22.93 24.63 1300595 博盈特焊 301468.SZ 22.60 22.99 22.50 22.99 1331657 惠柏新材 301555.SZ 26.50 27.31 26.28 27.31

[153 rows x 6 columns]

可以看到过滤涨停票之后,胜率立马降低到了52.11%,这个胜率买入的话,跟赌博也差不多了。

3 投研结论

尾盘急拉的个股,还是一定程度上符合人的直觉的,隔日能盈利1%以上的胜率可以到56.26%。但是,如果去掉涨停的票,胜率就只剩下52.11%了,因此只用这一个条件来选股明显不靠谱。

同时,一定要明确的认识到,股票市场是一个人与人博弈的市场,任何动作都有可能是假动作,即庄家让你看到的数据很有可能只是他想让你看到的。而且,这里只做了简单的分析,而要想真正利用这个策略来实盘,还得进一步的分析其在不同的大盘走势、个股走势等的情况下的表现,并做一段时间的回测和小资金视频测试才能使用。

如果想要改成实盘可用,因为收盘价是一个未来信息,可以考虑把日线数据改成分钟线的数据,然后取14:55或者14:57的价格来作为收盘价进行判定,这样就可以预留一部分时间来买入。另外,可以看出今天满足条件的个股就有多达上百个,因此完全可以考虑跟版块、概念、换手率、流通市值等结合起来做进一步的筛选,胜率应该还会有所提升。作为简单的对比,我目前自用的基于机器学习算法的尾盘选股策略隔日1.2%以上涨幅的胜率差不多80%左右,3%以上的胜率70+%。接下来我还会考虑向不超过10个人有偿分享一个胜率80%的高频(使用tick数据)的尾盘选股策略。

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表