龙头板块精选策略:如何抓住连板股票,实现超额收益?

科技   2024-09-10 18:50   广东  
大家好,我是橙哥!今天介绍龙头板块精选策略,这个策略通过挑选市场上表现最强的龙头股票来实现高收益。该策略从连续涨停的股票中筛选出龙头股,利用换手率等因子进一步筛选最具潜力的股票,并结合市场情绪建立优质股票池。在交易中,通过分批买入和及时卖出,策略旨在捕捉市场热点,实现超额回报,同时规避潜在风险。

1. 策略概述

这个策略的目标是选出市场上表现最强的龙头股票,并利用一些分析方法进一步挑选出潜力股,从而构建一个高收益的股票组合。我们关注短期内表现强劲的股票,结合因子分析,帮助投资者抓住市场热点,争取获得额外收益。

2. 策略逻辑

首先,我们从那些连续涨停的股票中挑选出龙头股。然后,通过分析这些股票的换手率等因子,进一步筛选出最具投资价值的龙头股。最后,我们结合市场情绪和热门概念,形成一个优质的股票池。

在交易方面,我们每天会检查股票池,按条件分批买入符合要求的股票。如果发现某些股票不再符合条件或者已经持有一段时间,我们会及时卖出这些股票,以锁定收益或减少亏损。

为了降低风险,我们避免频繁交易,排除停牌、新股、ST股等不符合条件的股票,并在市场出现较大波动时,根据市场情绪调整持仓。

3. 策略代码核心功能

初始化设置

def initialize(context):    set_option('use_real_price', True)  # 使用真实价格    set_option('avoid_future_data', True)  # 避免未来数据    g.ps = 10  # 最大持仓数量    g.jqfactor = 'VOL5'  # 5日平均换手率    g.sort = True  # 按因子排序    run_daily(get_stock_list, '9:01')  # 每天更新股票池    run_daily(buy, '09:30')  # 每天买入股票    run_daily(sell, '14:50')  # 每天卖出股票    run_daily(print_position_info, '15:02')  # 打印持仓信息

选股功能

def get_stock_list(context):    date = transform_date(context.previous_date, 'str')    initial_list = prepare_stock_list(date)    hl_list = get_hl_stock(initial_list, date)    ccd = get_continue_count_df(hl_list, date, 20)    M = ccd['count'].max()    CCD = ccd[ccd['count'] == M]    lt = list(CCD.index)    df = get_factor_filter_df(context, lt, g.jqfactor, g.sort)    stock_list = list(df.index)    g.target_list = stock_list[:(g.ps - len(context.portfolio.positions))]

买入功能

def buy(context):    current_data = get_current_data()    value = context.portfolio.total_value / g.ps    for s in g.target_list:        if context.portfolio.available_cash / current_data[s].last_price > 100:            if current_data[s].last_price == current_data[s].high_limit:                order_value(s, value, LimitOrderStyle(current_data[s].day_open))            else:                order_value(s, value, MarketOrderStyle(current_data[s].day_open))

卖出功能

def sell(context):    hold_list = list(context.portfolio.positions)    current_data = get_current_data()    for s in hold_list:        if not current_data[s].last_price == current_data[s].high_limit:            if context.portfolio.positions[s].closeable_amount != 0:                start_date = transform_date(context.portfolio.positions[s].init_time, 'str')                target_date = get_shifted_date(start_date, 2, 'T')                current_date = transform_date(context.current_dt, 'str')                cost = context.portfolio.positions[s].avg_cost                price = context.portfolio.positions[s].price                ret = 100 * (price / cost - 1)                if current_date >= target_date or ret > 0:                    if current_data[s].last_price > current_data[s].low_limit:                        order_target_value(s, 0)

日期处理

def transform_date(date, date_type):    if type(date) == str:        dt_date = dt.datetime.strptime(date, '%Y-%m-%d')    elif type(date) == dt.datetime:        dt_date = date    elif type(date) == dt.date:        dt_date = dt.datetime(date.year, date.month, date.day)    return {'str': dt_date.strftime('%Y-%m-%d'), 'dt': dt_date, 'd': dt_date.date()}[date_type]
def get_shifted_date(date, days, days_type='T'): d_date = transform_date(date, 'd') yesterday = d_date - dt.timedelta(days=1) if days_type == 'T': trade_days = [i.strftime('%Y-%m-%d') for i in list(get_all_trade_days())] last_trade_date = next(d for d in trade_days if d < str(yesterday)) shifted_date = trade_days[trade_days.index(last_trade_date) + days] return shifted_date

4. 策略总结

“龙头板块精选策略”通过挑选市场中的龙头股票并结合因子分析,帮助投资者抓住最有潜力的股票。这个策略既关注市场情绪的变化,又通过因子分析提高选股精准度,非常适合在市场热点轮动中争取获得超额收益。



宽客邦量化俱乐部即将面向会员推出Python金融分析与量化交易陪伴课程
大纲如下所示,学习时间:6个月,每周通过线上腾讯会议的方式进行一个小节的课程视频直播讲解,每次讲解内容都会提供完整源码、课件和回放视频。课程内容会覆盖国内外股票、期货、加密货币等各品种,讲解内容包括但不限于下面的大纲内容。

你将学会使用Freqtrade加密货币量化机器人设计和优化交易策略,实现高效自动化交易;掌握QMT股票量化交易的实盘策略构建和回测技巧;精通CCXT量化框架Alpaca量化交易API,连接多个交易所,自动化执行交易与数据处理。此外,每周还将讲解金融数据分析与处理、量化选股的策略与应用、量化策略的开发与回测、技术指标实现和机器学习预测模型。长按扫码加入宽客邦量化俱乐部后即可参与全部课程

点击阅读原文,加入「宽客邦量化俱乐部

开发者阿橙
宽客邦量化创始人。专注AI技术应用、机器学习与量化投资。
 最新文章