问财量化选股策略逻辑
选股逻辑:选出RSI小于65,下午大单净流入,10日涨幅大于0小于35的股票。
选股逻辑分析
该选股策略综合利用了技术指标和市场情绪,通过RSI指标判断股票被低估,通过下午大单净流入判断市场情绪向好,通过涨幅判断股票有一定的增长性。但该选股策略忽略了一些基本面因素,例如公司业绩和行业前景等因素。
有何风险?
该选股逻辑主要依赖于技术指标和市场情绪,忽略了股票的基本面,例如公司业绩和行业前景等因素。同时,过度依赖代码筛选,可能存在选出股票不具备长期投资价值的风险。
如何优化?
可以结合基本面因素进行筛选,如利润增长率、市净率等,以降低选股风险。同时,可以考虑引入其他技术指标,如均线、MACD等,对选股策略进行优化。
最终的选股逻辑
选出下午大单净流入,10日涨幅大于0小于35,RSI小于65的股票。
同花顺指标公式代码参考
C2: AFTERNOON(NETFLOW) > 0
C3: DAYTYPE
C4: EMA(CLOSE,10)/REF(EMA(CLOSE,10),1)-1 >0 AND EMA(CLOSE,10)/REF(EMA(CLOSE,10),1)-1 <0.35
C5: LEFT(CODE,2) NOT IN ('30','00')
SELECT * FROM (
SELECT STOCK_LIST.*,
GET_RANKING() AS RANKING
FROM STOCK_LIST) RESULT
WHERE C1 AND C2 AND C3 AND C4 AND C5
ORDER BY RANKING DESC
python代码参考
import pandas as pd
import akshare as ak
import talib
def get_ranking(df):
df = df[df['成交量'] > 0]
df = df[df['下午净流入'] > 0]
df = df[df['RSI'] < 65]
df = df[(df['10日涨幅'] > 0) & (df['10日涨幅'] < 0.35)]
df = df[~df['代码'].str.startswith(('30', '00'))]
stocks_em = ak.stock_zh_a_daily_em_alpha(indicator="涨幅排名")
stocks_list = stocks_em['名称']
df['RANKING'] = df['名称'].apply(lambda x: stocks_list.index(x) + 1 if x in stocks_list else 0)
df = df[df['RANKING'] > 0]
df.sort_values(by='RANKING', ascending=True, inplace=True)
return df.head(5)
def get_stock_list():
stock_list_df = ak.stock_zh_a_spot_em()
stock_list_df['10日涨幅'] = 0
for code in stock_list_df['代码']:
k_data_df = ak.stock_zh_a_daily_em(symbol=code, adjust="qfq")
if len(k_data_df) < 10:
continue
k_data_df['10日涨幅'] = ((k_data_df['收盘'] - talib.EMA(k_data_df['收盘'], timeperiod=10)) / talib.EMA(k_data_df['收盘'], timeperiod=10)).shift(1)
stock_list_df.loc[stock_list_df['代码'] == code, '10日涨幅'] = k_data_df['10日涨幅'].iloc[-1]
stock_lhb_df = ak.stock_em_hsgt_lhb()
stock_lhb_df = stock_lhb_df[stock_lhb_df['日期'] == ak.stock_zh_a_spot_trade_history_sina()[0]]
stock_lhb_df = stock_lhb_df[stock_lhb_df['类型'] == '买入']
stock_lhb_df.rename(columns={'买入金额': '龙虎榜买入金额'}, inplace=True)
stock_lhb_df['股票代码'] = stock_lhb_df['股票代码'].apply(lambda x: x.split('.')[0])
stocks_list = pd.merge(stock_list_df, stock_lhb_df, left_on='代码', right_on='股票代码', how='left')
stocks_list['昨日龙虎榜'] = stocks_list['龙虎榜买入金额'].apply(lambda x: 'Y' if x > 0 else 'N')
stocks_list.drop(columns=['股票代码', '龙虎榜买入金额'], inplace=True)
result_df = pd.DataFrame()
for code in stocks_list['代码']:
k_data_df = ak.stock_zh_a_daily_em(symbol=code, adjust="qfq")
k_data_df = k_data_df[k_data_df['成交量'] > 0]
if len(k_data_df) < 10:
continue
rsi = talib.RSI(k_data_df['收盘'], timeperiod=14)
if rsi.iloc[-1] >= 65:
continue
net_flow = ak.stock_individual_em_ggt_flow(code)
if net_flow.iloc[-1]['净流入额'] <= 0:
continue
if stocks_list[stocks_list['代码'] == code]['昨日龙虎榜'].iloc[0] != 'Y':
continue
result_df = result_df.append(k_data_df)
result_df['10日涨幅'] = ((result_df['收盘'] - talib.EMA(result_df['收盘'], timeperiod=10)) / talib.EMA(result_df['收盘'], timeperiod=10)).shift(1)
result_df = get_ranking(result_df)
return result_df
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
