问财量化选股策略逻辑
选股逻辑为:在换手率3%-12%、反包、三个技术指标同时金叉的股票中选取。
选股逻辑分析
该选股策略采用了换手率选股策略和反包指标,同时加入了技术指标金叉的条件,可以筛选出中期具有明显趋势性的股票。三个技术指标的选择将影响选股策略的有效性和准确性。
有何风险?
同样未考虑其他因素,如股票基本面因素等。同时,技术指标的不同选择和不同参数的设置,也可能影响选股策略的有效性或产生选股偏差。
如何优化?
可以加入其他指标,如基本面因素、或更完善的技术指标体系以更全面地考虑选股的质量和可靠性。可以分析不同技术指标的有效性和参数设置对选股策略的影响,进行优化和调整,以提高选股质量。
最终的选股逻辑
选股条件为:在换手率3%-12%、反包、三个技术指标同时金叉的股票中选取。
同花顺指标公式代码参考
选股条件:MA(CLOSE, 5)>MA(CLOSE, 10) AND turnover_rate>=3 AND turnover_rate<=12
AND CROSS(MA(CLOSE, 5), MA(CLOSE, 20))
AND CROSS(MA(CLOSE, 20), MA(CLOSE, 60))
AND CROSS(MA(CLOSE, 5), MA(CLOSE, 60))
AND STRFK("88,A,B,C,D,E,F,G")
ORDER BY TOF("市值") DESC
选股结果:fml('MA(CLOSE, 5)>MA(CLOSE, 10) AND turnover_rate>=3 AND turnover_rate<=12
AND CROSS(MA(CLOSE, 5), MA(CLOSE, 20))
AND CROSS(MA(CLOSE, 20), MA(CLOSE, 60))
AND CROSS(MA(CLOSE, 5), MA(CLOSE, 60))
AND STRFK("88,A,B,C,D,E,F,G")
ORDER BY TOF("市值") DESC', 80)
其中,MA(CLOSE, 5)为五日均线,MA(CLOSE, 10)为十日均线,以此类推。
Python代码参考
import tushare as ts
import pandas as pd
ts.set_token('your_token')
pro = ts.pro_api()
# 筛选好股票函数
def select_good_stocks():
main_board = ['sh', 'sz']
tech_indicator = ['MA(CLOSE, 5)', 'MA(CLOSE, 20)', 'MA(CLOSE, 60)']
# 换手率3%-12%
df1 = pro.daily_basic(ts_code='', trade_date='20220110',
fields='ts_code,trade_date,turnover_rate')
df1 = df1[(df1['turnover_rate'] >= 3) & (df1['turnover_rate'] <= 12)]
# 反包策略
df2 = pro.daily(ts_code='', trade_date='20220110',
fields='ts_code,trade_date,low,high,pre_close')
df2['AT'] = df2['high'] - df2['low']
df2['ST'] = abs(df2['pre_close'] - df2['low'])
df2['BT'] = abs(df2['pre_close'] - df2['high'])
df2['RCT1'] = df2['ST'] / df2['AT']
df2['RCT2'] = df2['BT'] / df2['AT']
df2['RC'] = df2[['RCT1', 'RCT2']].min(axis=1)
df3 = df2[df2['trade_date'] == '20220110']
good_stocks = df3[df3['RC'] <= 0.2]['ts_code']
# 三个指标同时金叉
df4 = pd.DataFrame()
for indicator in tech_indicator:
df = pro.query('index_weight', ts_code='', start_date='20220105',
end_date='20220110', fields=indicator)
df4[indicator] = df[indicator].groupby(df['ts_code']).mean()
cross_signal = df4.copy()
if len(cross_signal) > 0:
for i in range(1, len(cross_signal)):
for indicator in cross_signal.columns:
if cross_signal[indicator][i-1] < cross_signal[indicator][i]:
cross_signal[indicator][i] = 'gold'
else:
cross_signal[indicator][i] = 'dead'
df4 = df4[df4.index.isin(
cross_signal[cross_signal.apply(lambda x: x.str.contains('gold')).all(axis=1)].index)]
# 主板股票
good_stocks = good_stocks[good_stocks.isin(df4.index)]
good_stocks = good_stocks[good_stocks.str[:2].isin(main_board)]
# 加入其他指标
good_stocks = pd.merge(good_stocks.to_frame(), pro.daily_basic(ts_code='', trade_date='20220110',
fields='ts_code,close,pe,pb,total_mv,float_mv'),
on='ts_code', how='inner')
return good_stocks
good_stocks = select_good_stocks()
print(good_stocks)
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


