问财量化选股策略逻辑
选股逻辑:rsi小于65,上市时间大于1年,市值介于1亿至100亿之间且为无亏损企业。
选股逻辑分析
该选股逻辑同样采用技术面和基本面指标相结合的方式,使用RSI指标来判断股票处于超卖状态。要求股票上市时间大于1年,以筛选出相对成熟的企业。同时,要求股票市值介于1亿至100亿之间且为无亏损企业。这么做是为了筛选出市值不过大但质量不错的股票,避免关注太小而产生流动性问题;同时,无亏损企业则表明企业具备一定的盈利能力。
有何风险?
该选股逻辑可能会出现市值较小且营收净利润增长缓慢而未出现亏损的企业,因而忽略了优质中小市值企业的筛选。同时,由于市场环境不同,选择RSI指标的阈值可能存在主观性,存在判断错误的风险。
如何优化?
可以综合考虑更多基本面指标,如PE、PB等评估公司的价值和风险;同时,可以引入相对收益指标,如RSRS指标等,来反映股票相对于其他股票的表现。此外,可以尝试引入资金流向等指标,增强对投资情绪和市场热度的评估。
最终的选股逻辑
选股逻辑:rsi小于65,上市时间大于1年,市值介于1亿至100亿之间且为无亏损企业,pe小于30,pb小于3。
同花顺指标公式代码参考
C1: MAINBORADINFO(1) == 1 AND ZuiXinJia >= 5
C2: BARSLAST(C1) >= 240
C3: RSI(CLOSE, 14) < 65
C4: Wwsjlr_1 > 0 AND RETURN_OnEquity >= 0
C5: ZSZ >= 1 AND ZSZ <= 100
C6: PE < 30 and PB < 3
SELECT IF(C1 AND C2 AND C3 AND C4 AND C5 AND C6, 1, 0)
Python代码参考
import pandas as pd
import akshare as ak
import talib
def get_stock_list():
result_df = pd.DataFrame()
stock_pool = ak.stock_zh_a_spot().astype({'证券代码':'str', '总市值':'float'})['证券代码', '名称', '最新价', '总市值', '市盈率', '市净率'].copy()
stock_pool = stock_pool[(stock_pool['市值'] > 100000000) & (stock_pool['市值'] < 10000000000)]
stock_pool.rename(columns={"名称": "name", "市盈率": "pe", "市净率": "pb"}, inplace=True)
for code in stock_pool['证券代码'].tolist():
# 获取股票基本信息
stock_info = ak.stock_financial_report_sina(code, year=2020, quarter=4, type='资产负债表').reset_index(drop=True)
if len(stock_info) == 0:
continue
positive_profits = (stock_info['净利润']>0).all()
if positive_profits:
stock_info['code'] = code
# 剔除上市时间较短的股票
if stock_info['上市时间'].iloc[0] > 1:
result_df = result_df.append(stock_info, ignore_index=True)
# 计算RSI指标
result_df['rsi'] = talib.RSI(result_df['最新价'])
# 筛选RSI符合条件的股票
result_df = result_df[result_df['rsi'] < 65]
# 筛选符合市值和pe/pb的股票
result_df = result_df[result_df['市值'] > 100000000]
result_df = result_df[result_df['市值'] < 10000000000]
result_df = result_df[result_df['pe'] < 30]
result_df = result_df[result_df['pb'] < 3]
return result_df
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


