问财量化选股策略逻辑
选股逻辑:macd零轴以上,外盘/内盘大于1.3,9点25分涨幅小于6%。在符合以上所有选股条件的股票中,按个股涨幅从大到小排序作为选股结果。
该选股逻辑作为第一个段落放入标题为 ## 问财量化选股策略逻辑 的段落中。分析以上的选股逻辑(每个逻辑以 "," 进行分隔),分析选股的逻辑(放入标题为 ## 选股逻辑分析 的段落),有什么风险?(放入标题为 ## 有何风险? 的段落)如何优化?(放入标题为 ## 如何优化? 的段落)并最终给出完善选股逻辑(放入标题为 ## 最终的选股逻辑 的段落),请用 Markdown 格式。
选股逻辑分析
该选股逻辑相较于之前的选股逻辑新增了一条条件——9点25分涨幅小于6%,增加了对当日早盘波动的管控,风险控制更加全面。
有何风险?
该选股逻辑存在以下风险:
- 9点25分时刻的涨幅,可能因市场行情、消息面等因素对数据产生影响,导致选股结果的不稳定性;
- MACD 技术指标需要通过具体参数进行调节,过度乐观或悲观地解读市场对方向的判断可能会导致失误。
如何优化?
以下是该选股策略的优化建议:
- 可以将对于开盘价格的数据分为一个波动区间,然后通过迭代的方式确定一个合适的区间阈值;
- 另外,技术指标的准确性需要在多个参数的基础上测试,以确定技术指标条件的严谨程度和保守程度。
最终的选股逻辑
经过分析和优化,我们得出的选股逻辑为:macd零轴以上,外盘/内盘大于1.3,9点25分涨幅小于6%。在符合以上所有选股条件的股票中,按个股涨幅从大到小排序的结果作为选股结果。
同花顺指标公式代码参考
以下是同花顺中以 MACD 为基础的选股公式:
C := REF(CLOSE, 1);
DIF := EMA(CLOSE, SHORT) - EMA(CLOSE, LONG);
DEA := EMA(DIF, MID);
MACD := (DIF - DEA) * 2;
FILTER : (MACD > 0) AND (HSL > HSL2 AND VOLUME > VOLUME1 AND BIGVOLUME > BIGVOLUME1 AND BIGMONEY > BIGMONEY1 AND CMV > 100 * 10000 AND (OPEN / REF(OPEN, 1) - 1) * 100 < 6);
SIGNAL : SORTBY(ROC(CLOSE, 5));
WITHIN(FILTER);
注:其中,SHORT、LONG、MID、HSL、HSL2、VOLUME、VOLUME1、BIGVOLUME、BIGVOLUME1、BIGMONEY、BIGMONEY1等参数需要根据实际情况进行调整。这里新增了 OPEN 涨幅小于 6% 的条件。
Python代码参考
以下是获取符合选股条件的股票列表并按个股涨幅从大到小排序的 Python 代码:
import tushare as ts
import pandas as pd
import talib as ta
# 设置 Tushare Pro 的 token
token = 'your_token_here'
ts.set_token(token)
# 初始化 tushare pro 接口
pro = ts.pro_api()
# 获取符合选股条件的股票列表并按个股涨幅从大到小排序
result = []
for stock_code in pro.stock_basic(exchange='', list_status='L', is_hs='', fields='ts_code,symbol,market,industry,list_date')['ts_code']:
# 获取当日股票数据
data_today = pro.daily_basic(ts_code=stock_code, trade_date='20220110', fields='ts_code,trade_date,total_share,float_share,turnover_rate_f')
# 获取MACD指标数据
close_price = pro.daily(ts_code=stock_code, trade_date='20220110')['close'].values
dif_today, dea_today, macd_today = ta.MACD(close_price, fastperiod=12, slowperiod=26, signalperiod=9)
# 判断 k 线数据是否符合选股条件
am_volume = pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='vol', interval='1m')['vol'].values[0] / 2
pm_volume = pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='vol', interval='1m')['vol'].values.sum() - am_volume
big_money = pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='buy_lg_amount,sell_lg_amount')['buy_lg_amount'].values[0] - pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='buy_lg_amount,sell_lg_amount')['sell_lg_amount'].values[0]
big_volume = pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='buy_lg_vol,sell_lg_vol')['buy_lg_vol'].values[0] + pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='buy_md_vol,sell_md_vol')['buy_md_vol'].values[0] + pro.moneyflow(ts_code=stock_code, start_date='20220110', end_date='20220110', fields='buy_sm_vol,sell_sm_vol')['buy_sm_vol'].values[0]
if macd_today[-1] > 0 and am_volume / pm_volume > 1.3 and big_money > 0 and big_volume > 0 and data_today['float_share'].values[0] * data_today['trade_date'].values[0] / 100000000 >= 100 and ((pro.daily(ts_code=stock_code, start_date='20220110', end_date='20220110')['open'].values[0] / pro.daily(ts_code=stock_code, start_date='20220110', end_date='20220110')['open'].values[1]) - 1) * 100 < 6:
price_change = (pro.daily(ts_code=stock_code, start_date='20220110', end_date='20220110')['close'].values[-1] - pro.daily(ts_code=stock_code, start_date='20220110', end_date='20220110')['close'].values[0]) / pro.daily(ts_code=stock_code, start_date='20220110', end_date='20220110')['close'].values[0] * 100
result.append((price_change, stock_code))
print(stock_code, price_change)
result.sort(reverse=True)
result = [x[1] for x in result]
print(result)
注:该代码仅供参考,真实情况中需要根据自己的实际需求进行调整。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
