问财量化选股策略逻辑
选股逻辑:选择RSI小于65、周线MACD在零轴之上、15分钟周期MACD绿柱变短的股票。
选股逻辑分析
该选股策略综合考虑了股票的市场表现和技术指标,选取RSI小于65、周线MACD在零轴之上、15分钟周期MACD绿柱变短的股票,以期望捕捉市场热点,获取收益。
有何风险?
该选股策略仅仅是基于技术指标进行选股,忽略了股票基本面的分析,选出的热点股票中也存在不可控的风险。同时,该选股策略也存在市场行情波动带来的风险。
如何优化?
在原选股策略基础上,可以加入选股条件,如涨跌幅、换手率、总市值等,结合选股策略和基本面的分析,增加选股的准确性和成功率。
最终的选股逻辑
选取RSI小于65、周线MACD在零轴之上、15分钟周期MACD绿柱变短的股票,同时结合其他股票相关指标进行综合评估和分析,以控制选股策略的风险。
同花顺指标公式代码参考
C2: DIF > 0 AND MACD > 0 AND MACD > 0 OR MACD < 0 AND REF(MACD, 1) < 0 AND MACD > REF(MACD, 1)
C3: MACD - SIGNAL < REF(MACD - SIGNAL, 1)
SELECT * FROM (
SELECT STOCK_LIST.*,
GET_RANKING() AS RANKING
FROM STOCK_LIST) RESULT
WHERE C1 AND C2 AND C3
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['DIFF'] > 0]
df = df[df['MACD'] > 0]
df = df[(df['MACD'] > 0) | ((df['MACD'] < 0) & (df['MACD'].shift(1) < 0) & (df['MACD'] > df['MACD'].shift(1)))]
df = df[df['MACD'] - df['SIGNAL'] < df['MACD'].shift(1) - df['SIGNAL'].shift(1)]
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[stock_list['市值'] > 0]
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 = pd.merge(stock_list, ak.stock_zh_a_tick_tx(symbol="sz000001"), on=['代码'])
stock_list = pd.merge(stock_list, ak.stock_zh_a_min_tx(symbol="sz000001"), on=['代码'])
stock_list = pd.merge(stock_list, ak.stock_zh_a_daily_tx(symbol="sz000001"), on=['代码'])
stock_list.rename(columns={'开盘价': '开盘', '收盘价': '收盘', '最高价': '最高', '最低价': '最低', '日期': '日期', '成交量': '成交量',
'成交额': '成交金额', '涨跌幅': '涨跌幅', '总市值': '市值', '前收盘价': '昨收盘', '换手率': '换手率',
'RSI': 'RSI', 'DIFF': 'DIFF', 'DEA': 'DEA', 'MACD': 'MACD', 'SIGNAL': 'SIGNAL'}, inplace=True)
df = stock_list[['代码', '名称', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交金额', '涨跌幅', '市值', 'RSI', 'DIFF', 'DEA', 'MACD', 'SIGNAL', '竞价时大单买入', '特大单买入量', '下午净流入', '换手率']]
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]
day_short = talib.MACD(temp_df['收盘'].astype(float).values, fastperiod=12, slowperiod=26, signalperiod=9)[2][-1] - talib.MACD(temp_df['收盘'].astype(float).values, fastperiod=12, slowperiod=26, signalperiod=9)[3][-1]
res_df = temp_df[['代码', '名称', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交金额', '涨跌幅', '市值', 'RSI', 'DIFF', 'DEA', 'MACD', 'SIGNAL', '竞价时大单买入', '特大单买入量', '下午净流入', '换手率']]
res_df = res_df.iloc[-1:]
res_df['day_short'] = day_short
df_short = pd.concat([df_short, res_df])
stock_list = pd.merge(stock_list, df_short, on=['代码', '名称', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交金额', '涨跌幅', '市值', 'RSI', 'DIFF', 'DEA', 'MACD', 'SIGNAL', '竞价时大单买入', '特大单买入量', '下午净流入', '换手率'])
stock_list = get_ranking(stock_list)
return stock_list
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


