问财量化选股策略逻辑
选股逻辑为:在换手率3%-12%、K小于20的前提下,根据资金强度由大到小,选择最具投资价值的股票作为买入信号。
选股逻辑分析
该选股策略主要考虑股票的流动性(换手率)和股票的技术面(KDJ指标),并根据资金强度选取最具投资价值的股票作为买入信号。
资金强度是根据当天的资金流入流出量计算得出,表征了市场对于该股票的投资程度。资金强度越大,说明市场对该股票的看好程度越高,投资价值也更高。
有何风险?
这种策略在选择股票时主要侧重资金流入流出量,忽略了股票基本面和市场环境等因素,只关注单一指标而忽视了多因素综合分析的风险。同时,资金流入流出量不仅与市场热度有关,还与公司股票配股、股票增发等事件有关,可能存在市场噪音的影响。
如何优化?
可以在选择股票时,综合考虑公司财务状况、行业发展趋势、基本面分析、技术指标等因素,制定综合而完善的选股策略。同时,可以分别考虑不同时间段的资金流入流出量(例如3日、5日、10日资金流入流出量),并结合其他指标进行多角度分析。
最终的选股逻辑
在换手率3%-12%、K小于20的前提下,根据资金强度(例如5日资金流入流出量)由大到小排列,选择前N只股票作为买入信号。同时,需结合公司财务状况、行业发展趋势、基本面分析和技术指标等因素进行多角度综合分析,制定综合而完善的选股策略。
同花顺指标公式代码参考
选股条件:SETPRICETYPE(1); VOLUME>0; (K<20) AND (NOT INDUSTRYCODE='932' OR INDUSTRYCODE='914'); C > REF(C,1) AND (C-MA(C,20))/MA(C,20)>FILTER(0,(F2>F1),0)
选股结果:fml('SETPRICETYPE(1); VOLUME>0; (K<20) AND (NOT INDUSTRYCODE='932' OR INDUSTRYCODE='914'); C > REF(C,1) AND (C-MA(C,20))/MA(C,20)>FILTER(0,(F2>F1),0);','desc', 'market_cap', 100)
Python代码参考
import tushare as ts
import pandas as pd
# 筛选好股票函数
def select_good_stocks(day):
# 换手率3%-12%
basic_info = ts.get_stock_basics()
good_stocks = basic_info[(basic_info['turnoverratio'] >= 3) & (basic_info['turnoverratio'] <= 12)]
# K小于20,非科创板,资金强度由大到小
good_stocks['资金强度'] = ts.get_sina_dd(stock, date=day, vol=1000000)['net']
good_stocks.sort_values(by='资金强度', ascending=False, inplace=True)
good_stocks.drop(['资金强度'], axis=1, inplace=True)
for stock in good_stocks.index.tolist():
df1 = ts.get_k_data(stock, ktype='D')
if len(df1) <= 0:
continue
# 判断是否为科创板股票
industry_code = basic_info.loc[stock, 'industry_code']
if industry_code == '932' or industry_code == '914':
good_stocks.drop([stock], inplace=True)
continue
# 判断K值是否小于20
if df1.iloc[-1]['K'] >= 20:
good_stocks.drop([stock], inplace=True)
continue
# 判断涨幅
if df1.iloc[-1]['close'] <= df1.iloc[-2]['close'] or df1.iloc[-1]['close'] <= df1['ma20'].iloc[-1]:
good_stocks.drop([stock], inplace=True)
return good_stocks
# 获取5日资金流入流出量
def get_fund_flow(day):
dateList = []
for i in range(5):
dateList.append(pd.Timestamp(day) - pd.Timedelta(days=i))
dateList.reverse()
flows = []
for day in dateList:
df = ts.get_sina_dd_data('002230', date=day.strftime('%Y-%m-%d'), vol=2000)
if len(df) <= 0:
flows.append(None)
else:
flows.append(df['net'][0])
return sum(flows)
day = '2021-09-01'
good_stocks = select_good_stocks(day)
good_stocks['5日资金流量'] = good_stocks.index.map(lambda x:get_fund_flow(day))
good_stocks.sort_values(by='5日资金流量', ascending=False, inplace=True)
print(good_stocks.head(20))
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


