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. 策略总结
“龙头板块精选策略”通过挑选市场中的龙头股票并结合因子分析,帮助投资者抓住最有潜力的股票。这个策略既关注市场情绪的变化,又通过因子分析提高选股精准度,非常适合在市场热点轮动中争取获得超额收益。
点击阅读原文,加入「宽客邦量化俱乐部」