问财量化选股策略逻辑
本选股策略为:RSI指标小于65,今日上涨幅度大于1%,主板股票,前25天存在涨停。期望通过技术面和基本面,找到具备较强市场表现的股票。
选股逻辑分析
该选股策略结合了技术面和基本面。RSI小于65代表股票处于超卖区间,可以预期股票将会反弹;今日上涨幅度大于1%代表股票动能较强,预期未来将继续上涨;选择主板股票,代表该股票具备较强的市场地位和良好的基本面;前25天存在涨停,可以反映该股票是热门股票或投资者情绪企稳。该选股策略期望长期内能够获得具有一定市场表现的投资收益。
有何风险?
由于选股条件较为固定,可能会忽略市场的动态变化,导致股票运行状况与市场趋势出现脱节;涨停股票不一定代表股票基本面良好,需要合理评估涨停原因,避免被高估;过度注重技术指标可能会存在伪信号的问题,需要进行风险控制和合理把握。
如何优化?
可以从技术分析和基本面两方面入手优化选股策略。比如加入多种指标进行筛选,设置更加合理的基本面指标标准,不完全依靠涨停判断股票投资价值。同时,可以根据市场行情和股票类型等进行动态调整,避免出现市场动态与选股逻辑不符合的情况。需要进行风险控制和合理把握。
最终的选股逻辑
本选股策略为:RSI指标小于65,今日上涨幅度大于1%,主板股票,前25天存在涨停。期望寻找具备较强市场表现的股票。
同花顺指标公式代码参考
//收盘价
CLOSE:MA(CLOSE,1);
//收盘价14日指数平均值
RSV:=SMA((CLOSE-LLV(LOW,14))/(HHV(HIGH,14)-LLV(LOW,14))*100,3,1);
//KD指标中的D值即为RSV的3日加权移动平均值
K:EMA(RSV,2);
D:EMA(K,2);
//J值即为3K-2D
J:3*K-2*D;
TenMA:=MA(C,10); //10日均线
Weave1:=Weave(LAST(J)<LAST(D) AND J>LAST(D),RSI<65,C>Refer(C,-1),0);
Weave2:=Weave(IsMain,Weave1,0);
Weave3:=Weave(Count(C<=1.098*PreClose,N>25)==1,BelongMarket=Weave2,0); //前25天有涨停的股票
Weave4:=Weave(IsSuspend=False,Weave3,ClosedToday=0,0);
SELECTIF(Weave4,1);
python代码参考
# 导入需要使用的库
import pandas as pd
import tushare as ts
import talib
# 选股函数
def stock_picking():
# 获取RSI指标小于65、今日上涨幅度大于1%、主板股票、前25天存在涨停的股票池
basic_data = ts.get_stock_basics()
market_data = ts.get_today_all()
market_data.dropna(inplace=True)
market_data['circulating_market_value'] = market_data['mktcap'] - market_data['nmc']
market_data['circul'] = market_data['circulating_market_value'] / market_data['settlement'] / 100000000
daily_data = ts.get_today_ticks()
merge_data = pd.merge(market_data, daily_data, on='name', how='inner')
merge_data.drop(merge_data[merge_data['changepercent'] == 0.0].index, inplace=True)
merge_data.drop(merge_data[merge_data['volume'] <= 0].index, inplace=True)
merge_data['ten_ma'] = merge_data['price'].rolling(window=10).mean()
high_data = talib.MAX(merge_data['high'], timeperiod=14)
low_data = talib.MIN(merge_data['low'], timeperiod=14)
rsv_data = (merge_data['price'] - low_data) / (high_data - low_data) * 100
k_data = talib.EMA(rsv_data, timeperiod=2)
d_data = talib.EMA(k_data, timeperiod=2)
j_data = 3 * k_data - 2 * d_data
merge_data['j'] = j_data
merge_data['last_25days'] = merge_data['changepercent'].rolling(window=25).apply(lambda x: (x > 9.9).sum(), raw=False)
filter_data = merge_data[(merge_data['rsi'] < 65) & (merge_data['changepercent'] > 1.0) & (merge_data['stock_type'] == '主板') & (merge_data['last_25days'] > 0) & (merge_data['open'] < 1.01 * merge_data['ten_ma']) & (merge_data['open'] > 0.99 * merge_data['ten_ma']) & (merge_data['j'].shift(1) < merge_data['d'].shift(1)) & (merge_data['j'] > merge_data['d'])]
filter_data = filter_data[['name', 'industry', 'open', 'price', 'outstanding', 'totals', 'totalAssets', 'liquidAssets', 'fixedAssets', 'reserved','reservedPerShare', 'esp', 'bvps', 'pb', 'timeToMarket']]
return filter_data
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
