哈喽,大家好,我是木头左!
多因子选股策略是一种基于多个财务指标来筛选股票的方法。这种策略认为,通过综合考虑多个因素,可以更全面地评估一家公司的价值和盈利潜力。 感兴趣的朋友,可以在下方公号内回复:001,即可获取源码,共同交流!
策略的基本原理
在本策略中,我们选择了市值、利润、现金流和负债四个指标来计算股票的排名。市值反映了公司的规模,利润代表了公司的盈利能力,现金流显示了公司的流动性,而负债则揭示了公司的财务风险。
股票池的构建
我们的目标是选出排名靠前的二十只股票,构建我们的股票池。具体步骤如下:
- 数据获取:收集所有股票的市值、利润、现金流和负债数据。
- 指标标准化:对每个指标进行标准化处理,消除不同量纲的影响。
- 权重分配:为每个指标分配权重,市值40%,利润30%,现金流20%,负债10%。
- 综合评分:根据权重计算每只股票的综合得分。
- 排名筛选:选择得分最高的前二十只股票。
布林带择时:把握买卖的最佳时机
布林带是一种基于价格波动性来构建交易区间的技术分析工具。它可以帮助我们识别市场的过度买入或卖出状态,从而找到买卖的时机。
策略的基本原理
布林带由中轨(MB)、上轨(UB)和下轨(LB)组成,其中:
- 中轨(MB):通常是20日的移动平均线。
- 上轨(UB):中轨加上两倍的标准差。
- 下轨(LB):中轨减去两倍的标准差。
买卖时机的判断
在本策略中,我们制定了以下规则:
- 卖出规则:当持有股票,且股价穿过布林带中轨时,卖出股票。
- 买入规则:当不持有股票,且股价穿过布林带上界时,买入股票。
聚宽平台上的Python实现
market_open(context) 函数被设计为每月开盘时运行一次,根据上一交易日的因子值进行调仓。
def market_open(context):
# 卖出当前持有的所有股票,进行资金的重新分配
bulk_sell(context)
# 清空当前的持仓列表,准备重新选股
context.own_list = []
# 获取沪深300指数成分股作为潜在的股票池
universe = get_index_stocks('000300.XSHG')
多因子数据获取与处理
- 使用 get_fundamentals 函数获取股票池中股票的市值、市盈率(PE)、净利润同比增长率和净资产收益率(ROE)等财务指标。
- 选择沪深300指数(‘000300.XSHG’)作为股票池,即 universe = get_index_stocks(‘000300.XSHG’)。
df = get_fundamentals(query(
valuation.code, valuation.market_cap, valuation.pe_ratio,
indicator.inc_net_profit_year_on_year, indicator.roe
).filter(
valuation.code.in_(universe), valuation.pe_ratio > 0,
indicator.inc_net_profit_year_on_year > 0
))
# 设置股票代码为索引,以便于后续处理
df.set_index(['code'], inplace=True)
因子加权与排名
- 对市盈率进行升序排名,对净利润同比增长率和净资产收益率进行降序排名,然后将这些排名相加得到最终的因子值。
- 排名(rank)是一种去量纲的方法,使得不同单位的因子可以相加。
# 对市盈率进行升序排名,对净利润同比增长率和净资产收益率进行降序排名
final_factor = df['pe_ratio'].rank(ascending=True) + \
df['inc_net_profit_year_on_year'].rank(ascending=False) + \
df['roe'].rank(ascending=False)
持仓股票列表的确定
根据最终的因子值,选取排名前20的股票作为目标持仓。
# 选取排名前20的股票作为目标持仓
stock_list = final_factor.sort_values(ascending=True)[:20].index.tolist()
# 更新上下文的持仓列表
context.list = stock_list
布林带择时策略
开盘时运行布林带择时策略,boll(context) 布林带的实现参考量化交易:布林带突破策略的python实现
def market_open_bolling(context):
# 计算每只股票平均可使用的资金
context.cash = context.portfolio.cash / len(context.list)
for symbol in context.list: # 遍历股票池
context.symbol = symbol # 设置当前股票
# 调用布林带择时函数(未提供实现)
boll(context)
这段代码首先构建了一个包含前二十只高盈利潜力股票的股票池,然后使用布林带择时来决定买卖时机。在每个交易日开始前,它会根据最新的财务数据更新股票池,并调整仓位。在交易时段内,它会实时监控股票价格,根据布林带的变化来执行买卖操作。回测结果如下:
结语
多因子选股结合布林带择时的量化交易策略,是一种综合了基本面分析和技术分析的方法,所有的选股和择时都可以结合起来,用效果更佳。 市场有风险,交易需谨慎。 感兴趣的朋友,可以在下方公号内回复:001,即可获取源码,共同交流!
标签:林带,股票,list,择时,context,排名,选股,多因子 From: https://www.cnblogs.com/bigleft/p/18202647我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!