问财量化选股策略逻辑
选股逻辑:选择RSI小于65、周线MACD在零轴之上,30日平均线向上的股票。
选股逻辑分析
该选股策略主要基于技术分析,选取在RSI小于65、周线MACD在零轴之上,30日平均线向上的股票,筛选具备市场潜力和技术走势的股票。通过结合多重指标和数据,进行综合分析和评估,减少市场波动的影响,选出符合条件的股票,达到技术分析和基本面分析的双重目的。
有何风险?
该选股策略主要基于技术指标的选股,忽略了基本面数据的影响,存在盈利能力、现金流、资产负债等方面的风险。同时,由于市场情况的变化和技术指标的变动,可能会出现股市短期波动或误判的情况,对选股的准确性和稳定性可能会有影响。
如何优化?
在原有选股策略的基础上,加入更多的技术指标和基本面数据,如成交量、资金流向、市盈率、市净率等,通过综合分析和评估,筛选具备高成长性和市场价值的股票。同时,根据股票所处行业特点和市场趋势,动态调整筛选条件,提高选股准确性和灵活性,以适应市场变化和投资需求。
最终的选股逻辑
在RSI小于65、周线MACD在零轴之上,30日平均线向上的基础上,结合成交量、资金流向、市盈率、市净率等其他技术指标和基本面数据,根据股票所处行业特点和市场趋势,动态调整筛选条件,选择具备高成长性和市场价值的股票。通过运用多重指标和数据,进行综合分析和评估,选出符合条件的股票,达到技术分析和基本面分析的双重目的。
同花顺指标公式代码参考
C2: RSI(CLOSE, 14) < 65
SELECT * FROM (
SELECT STOCK_LIST.*,
GET_RANKING() AS RANKING
FROM STOCK_LIST) RESULT
WHERE C1 AND C2
ORDER BY RANKING ASC
python代码参考
import pandas as pd
import akshare as ak
def get_ranking(df):
df['最低价昨日'] = df['LOW'].shift(1)
df = df[df['RSI'] < 65]
df = df[df['MACD'] > 0]
df = df[df['30日平均线'] > df['60日平均线']]
df['RANKING'] = df['流通市值'].rank(ascending=False)
df = df[df['RANKING'] <= 10]
df.sort_values(by='RANKING', ascending=True, inplace=True)
return df
def get_stock_list():
stock_list = ak.stock_zh_a_spot_em()
stock_list['市值'] = stock_list['市值'].astype(float)
stock_list['流通市值'] = stock_list['流通市值'].astype(float)
stock_list = stock_list[stock_list['市值'] > 0]
stock_list = pd.merge(stock_list, ak.stock_zh_a_tick_tx(symbol="sz000001"), on=['代码'])
stock_list = pd.merge(stock_list, ak.stock_zh_a_spot_top_n_big_order(symbol="", n='50'), on=['代码'])
stock_list = pd.merge(stock_list, ak.stock_zh_a_spot_check(symbol="sh600000"), on=['代码'])
stock_list = pd.merge(stock_list, ak.stock_zh_a_spot_em_limit_up(), on=['代码'])
stock_list.rename(columns={'当前价': '当前价格', '归属母公司股东的净利润同比增长率(%)': 'NPARENT_NETPROFITYOY', '开盘价': '开盘', '收盘价': '收盘', '最高价': '最高', '最低价': '最低', '日期': '日期', '成交量': '成交量',
'成交额': '成交金额', '涨跌幅': '涨跌幅', '总市值': '市值', '前收盘价': '昨收盘', '换手率': '换手率', '板块': '板块', '超大单净量': '超大单净量', 'CURRENT': '当前价格', 'KDJ_K': 'KDJ_K', 'KDJ_D': 'KDJ_D', 'KDJ_J': 'KDJ_J', 'RSI': 'RSI', 'DIFF': 'DIFF', 'DEA': 'DEA', 'MACD': 'MACD', 'SIGNAL': 'SIGNAL', '30日平均线': '30日平均线', '60日平均线': '60日平均线', '流通市值': '流通市值'}, inplace=True)
df = stock_list[['代码', '名称', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交金额', '涨跌幅', '市值', '流通市值', 'NPARENT_NETPROFITYOY', 'KDJ_K', 'KDJ_D', 'KDJ_J', 'RSI', 'DIFF', 'DEA', 'MACD', 'SIGNAL', '当前价格', '买一量', '卖一量', '板块', '30日平均线', '60日平均线']]
df.set_index('日期', inplace=True)
df.sort_values(by=['代码', '日期'], ascending=[True, True], inplace=True)
df_short = pd.DataFrame()
for code in df.index.get_level_values('代码').unique():
temp_df = df[df.index.get_level_values('代码') == code]
if len(temp_df) > 1:
res_df = temp_df[['代码', '名称', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交金额', '涨跌幅', '市值', '流通市值', 'NPARENT_NETPROFITYOY', 'KDJ_K', 'KDJ_D', 'KDJ_J', 'RSI', 'DIFF', 'DEA', 'MACD', 'SIGNAL', '当前价格', '买一量', '卖一量', '板块', '30日平均线', '60日平均线']]
res_df = res_df[-8:]
df_short = pd.concat([df_short, res_df])
stock_list = pd.merge(stock_list, df_short, on=['代码', '名称', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交金额', '涨跌幅', '市值', '流通市值', 'NPARENT_NETPROFITYOY', 'KDJ_K', 'KDJ_D', 'KDJ_J', 'RSI', 'DIFF', 'DEA', 'MACD', 'SIGNAL', '当前价格', '买一量', '卖一量', '板块', '30日平均线', '60日平均线'])
stock_list = get_ranking(stock_list)
return stock_list
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
