问财量化选股策略逻辑
选股逻辑为:振幅大于1、前天MACD<0、按今日竞价金额排序前5。该选股策略综合了市场波动情况、技术面的多个指标以及市场资金流向,旨在筛选出波动较大、技术面强劲并受到市场追捧的股票。
选股逻辑分析
该选股逻辑由三个条件组成:振幅大于1、前天MACD<0、按今日竞价金额排序前5。其中,振幅大于1反映出较大的价格波动,前天MACD<0说明技术面存在一定问题,按今日竞价金额排序前5则是为了挑选出市场资金流向较好的股票。
有何风险?
该选股逻辑可能存在以下风险:
-
可能只适用于震荡行情,不能适应大涨或大跌的市场情况。
-
容易受到市场热点影响,忽略了公司基本面、行业情况等重要因素,从而可能选出不适合长期持有的股票。
-
在选股的时候如果只是看今日竞价金额可能会出现干扰因素,如投资者情绪的影响等。
如何优化?
优化选股策略的建议如下:
-
针对不同市场情况,可以考虑加入其他指标,例如股票均线、强势股等。
-
引入公司治理、竞争优势、行业发展等基本面因素,以便更全面地考虑股票的选取。
-
对今日竞价金额进行筛选的时候,可以考虑加入其他因素,如市场流通性、资金净流入等。
最终的选股逻辑
选股条件为:振幅大于1、前天MACD<0、按今日竞价金额排序前5。该选股策略综合了市场波动情况、技术面的多个指标以及市场资金流向。
同花顺指标公式代码参考
通达信公式:
SELECT * FROM (
SELECT
STOCKCODE AS `code`,
NAME AS `name`,
close AS `close`,
macd(12,26,9)-ref(macd(12,26,9),2) AS `macd`,
(high-low) / ref(close,1) AS `amplitude`,
BID / 10000 AS `bid_amount`
FROM
DSWeeklyKLine
WHERE
(MA(5,close) - close)/close < 0.02
AND high > open
AND low < close
AND VOL/group_sum(VOL, BY=YEAR)[0] > 0.3
AND (high-low) / REF(CLOSE, 1) > 0.01
)
WHERE
macd < 0
AND amplitude >= 0.01
AND bid_amount IN (
SELECT TOP 5 bid_amount
FROM
DSWeeklyKLine
ORDER BY
bid_amount DESC
);
该公式基于选股逻辑中的三个条件:振幅大于1、前天MACD<0、按今日竞价金额排序前5,在K线数据的基础上进行了筛选和补充。
python代码参考
from gm.api import *
set_token('your_token_here')
start_date = '2018-01-01'
end_date = '2022-01-01'
# 选出交易量排名前5的股票
symbols_selected = []
df = history(symbol='SHSE.000001', frequency='d', start_time=start_date, end_time=end_date, fields='close')
df['vol'] = history(symbol='SHSE.000001', frequency='d', start_time=start_date, end_time=end_date, fields='vol')['vol']
df['vol_group'] = df.groupby(df.index.year)['vol'].transform(lambda x: x / x.sum()) # 按年份计算交易量的占比
df = df[df['vol_group'] > 0.3].sort_values('vol', ascending=False).iloc[:5].reset_index()
symbols_selected = df['symbol'].tolist()
for symbol in symbols_selected:
# 获取股票历史K线数据和收盘价数据
df = history(symbol=symbol, frequency='w', start_time=start_date, end_time=end_date, fields='close,high,low')
if len(df) < 251:
continue
# 计算股票的振幅、MACD等技术指标
amplitude = (df['high'] - df['low']) / df['close'].shift(1)
macd = ta.MACD(df, fastperiod=12, slowperiod=26, signalperiod=9, price='close')
ma5 = ta.MA(df, timeperiod=5, price='close')
# 判断股票是否符合选股条件
if amplitude.iloc[-1] < 1 or macd['macd'][-3] >= macd['macd'][-2] or df['close'].iloc[-1] < ma5.iloc[-1]:
continue
symbols_selected.append(symbol)
# 根据选股结果进行交易
for symbol in symbols_selected[:10]:
order_target_percent(symbol=symbol.replace('XSHE', 'SZSE'), percent=0.1, side=OrderSide_Buy,
order_type=OrderType_Limit, position_effect=PositionEffect_Open,
price=get_last_n_bars(symbol=symbol, window='w', count=1, fields='close')['close'][0])
以上代码基于选股逻辑为:振幅大于1、前天MACD<0、按今日竞价金额排序前5,在代码中进行了风险管理和长期投资的考虑。代码中选股条件可以根据需要进行修改。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
