问财量化选股策略逻辑
选股逻辑包括三个条件:选择元宇宙行业的股票、机构动向大于0、100亿市值以内的无亏损企业。根据这些条件进行选股,进行投资。
选股逻辑分析
该选股策略主要围绕以下三个条件进行选股:
- 选取元宇宙行业中的股票,因为元宇宙领域具有较高的成长性和隐含收益;
- 机构动向具有预测性和引导作用,选择机构买入股票可以获得较好的资本回报;
- 选出100亿市值以内,近两年无亏损的企业,可以筛选出当前表现较好的股票。
综合以上条件,选择符合条件的个股进行投资。
有何风险?
- 对企业的判断可能有误,会导致选股错误;
- 如果市场整体大跌,该策略可能无法有效保护投资本金。
如何优化?
- 加入其他技术指标或基本面指标进行筛选,多角度综合分析,例如ROE、PE等;
- 加入风险控制指标,有效保护投资本金;
- 优化选股条件,例如可以选取近期表现较好、市场竞争力较强的企业。
最终的选股逻辑
该选股策略选择元宇宙行业中,机构动向大于0,100亿市值以内,近两年无亏损的企业进行投资。
同花顺指标公式代码参考
元宇宙行情:GNBK("gnxq");
机构动向:DRS_M("zlltgtzb");
市值:MCAP<=100000;
近两年是否有亏损:NOT IfAnyRed(TTMGPM,8)>0 Or PCTCHG(TTMNRT_TTM,8)>0
选股公式:GNBK("gnxq") AND DRS_M("zlltgtzb") AND MCAP<=100000 AND NOT IfAnyRed(TTMGPM,8)>0 Or PCTCHG(TTMNRT_TTM,8)>0
Python代码参考
import pandas as pd
import tushare as ts
import datetime
def stock_selector():
ts.set_token('your_token')
pro = ts.pro_api()
data1 = pro.query('stock_basic', exchange='', list_status='L', fields='ts_code,name,industry,mktcap')
data1 = data1[(data1['name'].str.contains('元宇宙')) & (data1['industry'] != '银行') & (data1['mktcap'] <= 100000)]
data2 = pro.query('fii_lgt_list', start_date='20220308', end_date='20220308', fields='ts_code, buy_value, sell_value, net_value')
data2 = data2.groupby(by='ts_code').sum()
data2['net'] = data2['net_value'] / 1e8
data2 = data2.sort_values(by='net', ascending=False)
data2 = data2.iloc[0:100, :]
data2['rank'] = range(1, 101)
data2 = data2.loc[:, ['rank']]
data3 = pro.query('income', ts_code='', start_date='20200101', end_date='20211231', fields='ts_code,ann_date,comp_type,basic_eps')
data3 = data3[data3['comp_type'] == '1']
data3['year'] = data3['ann_date'].str.slice(0, 4).astype(int)
data3 = data3[['ts_code', 'year', 'basic_eps']]
data3 = data3.groupby(by='ts_code').agg({'basic_eps': lambda x: ((1 + x) ** 2 - 1).prod()}).reset_index()
data4 = pro.query('balancesheet', ts_code='', start_date='20190101', end_date='20211231', fields='ts_code,f_ann_date,report_type,roe_tot')
data4 = data4[(data4['report_type'] == '1') & (data4['roe_tot'] > 0)]
data4['year'] = data4['f_ann_date'].str.slice(0, 4).astype(int)
data4 = data4[['ts_code', 'year', 'roe_tot']]
data4 = data4.groupby(by='ts_code').agg({'roe_tot': lambda x: (1 + x / 100).prod() - 1}).reset_index()
data5 = pd.merge(data1, data3, how='left', on='ts_code')
data5 = pd.merge(data5, data4, how='left', on='ts_code')
data5 = data5.dropna()
data5.reset_index(drop=True, inplace=True)
data6 = data5[~data5[['basic_eps', 'roe_tot']].apply(lambda x: x.lt(1.0)).any(axis=1)]
data6.reset_index(drop=True, inplace=True)
data7 = pd.concat([data6.loc[:, 'ts_code'], data2], axis=1)
data7 = data7.dropna()
data7.reset_index(drop=True, inplace=True)
data8 = pro.daily(ts_code='', start_date='20210101', end_date='20211231', fields='ts_code,trade_date,pct_chg')
data9 = pd.pivot_table(data8, values='pct_chg', index='ts_code', columns='trade_date')
first_day = datetime.datetime.strptime('2021-01-04', '%Y-%m-%d').date()
last_day = datetime.datetime.strptime('2021-12-31','%Y-%m-%d').date()
trading_days = pd.Series(pd.date_range(start=first_day, end=last_day, freq='B').date)
data9 = data9.reindex(columns=trading_days).fillna(0)
data9['2021_return'] = (data9.iloc[:, -1] / data9.iloc[:, 0]) - 1
data9 = data9[data9['2021_return'] > 0]
data9 = data9.loc[:, ['2021_return']]
data10 = pd.concat([data7, data9], axis=1)
data10 = data10.dropna()
data10.reset_index(drop=True, inplace=True)
data11 = pro.query('daily_basic', trade_date='20220308', fields='ts_code,turnover_rate', filters='turnover_rate > 0')
data12 = pd.concat([data10, data11.iloc[:, 1]], axis=1)
data12 = data12.dropna()
data12.reset_index(drop=True, inplace=True)
data12['ma10'] = talib.MA(data12['close'].values, timeperiod=10)
data12['ma60'] = talib.MA(data12['close'].values, timeperiod=60)
data13 = data12[(data12['turnover_rate'] > 1) & (data12['open'] > data12['ma10']) & (data12['open'] < data12['ma60'])]
data13.reset_index(drop=True, inplace=True)
return data13
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


