以下是一个结合技术面和市场情绪的条件选股程序,包含尾盘选股和竞价选股两种策略,采用Python实现,使用akshare获取数据(需提前安装akshare库):
“`python
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
def get_realtime_data():
“””获取实时行情数据”””
stock_zh_a_spot_em_df = ak.stock_zh_a_spot_em()
return stock_zh_a_spot_em_df
def filter_stocks(df, strategy_type):
“””条件筛选核心函数”””
filtered = pd.DataFrame()
# 通用过滤条件(排除ST、次新股、科创板等)
df = df[~df[‘名称’].str.contains(‘ST’)]
df = df[df[‘代码’].str[:3] != ‘688’]
df = df[df[‘上市日期’] < pd.to_datetime(‘2022-01-01’)]
# 市值筛选(20亿-500亿)
df = df[(df[‘总市值’] > 20) & (df[‘总市值’] < 500)]
if strategy_type == “尾盘”:
# 尾盘选股条件(14:30后执行)
filtered = df[
(df[‘涨跌幅’] > 1.5) & (df[‘涨跌幅’] < 8) & # 排除极端涨幅
(df[‘量比’] > 1.8) &
(df[‘换手率’] > 3) &
(df[‘振幅’] < 12) &
(df[‘5分钟涨跌幅’] > 0.5) &
(df[’60日涨跌幅’] < 30) &
(df[‘成交额’] > 50000000) # 当日成交额大于5000万
]
# 加入技术指标条件
filtered = filtered[
(filtered[‘收盘’] > filtered[’20日均线’]) &
(filtered[‘5日均量’] > filtered[’20日均量’]*1.2)
]
elif strategy_type == “竞价”:
# 竞价选股条件(9:25后执行)
filtered = df[
(df[‘高开幅度’] > 2) & (df[‘高开幅度’] < 7) &
(df[‘竞价量比’] > 3) &
(df[‘昨成交额’] > 80000000) & # 昨日成交额大于8000万
(df[‘委比’] > 80) &
(df[‘涨停板封单额’] == 0) # 排除可能一字涨停
]
# 加入资金面条件
filtered = filtered[
(filtered[‘主力资金3日净流入’] > 10000000) &
(filtered[‘散户资金3日净流出’] > 5000000)
]
return filtered.sort_values(by=’量比’, ascending=False)
def get_additional_data(code):
“””获取补充数据(示例)”””
try:
# 获取资金流向数据
stock_individual_fund_flow_df = ak.stock_individual_fund_flow(
stock=code, market=”sh”
)
# 获取筹码分布数据
stock_cyq_em_df = ak.stock_cyq_em(symbol=code)
return {
‘主力资金3日净流入’:
stock_individual_fund_flow_df.iloc[:3][‘主力净流入’].sum(),
‘散户资金3日净流出’:
stock_individual_fund_flow_df.iloc[:3][‘散户净流入’].sum() * -1,
‘筹码集中度’: stock_cyq_em_df.iloc[-1][‘集中度90’]
}
except:
return None
def main(strategy_type=’尾盘’):
“””主程序”””
print(f”开始执行{strategy_type}选股…”)
# 获取基础数据
df = get_realtime_data()
# 获取补充数据(实际使用时需要循环处理,此处示例简化)
# 注意:此处需要异步处理以提高效率
# 执行筛选
results = filter_stocks(df, strategy_type)
# 添加行业信息
industry_df = ak.stock_board_industry_name_em()
results = pd.merge(results, industry_df, on=’代码’, how=’left’)
# 结果处理
if not results.empty:
selected_columns = [‘代码’, ‘名称’, ‘最新价’, ‘涨跌幅’, ‘量比’, ‘换手率’,
‘成交额’, ‘所属行业’, ‘总市值’]
results = results[selected_columns]
# 生成信号说明
results[‘策略信号’] = strategy_type + “策略:” + \
(“量价齐升” if strategy_type == “尾盘” else “竞价抢筹”)
# 保存结果
timestamp = datetime.now().strftime(“%Y%m%d_%H%M”)
filename = f”{strategy_type}_选股结果_{timestamp}.xlsx”
results.to_excel(filename, index=False)
print(f”发现{len(results)}支符合股票,已保存到{filename}”)
else:
print(“今日未发现符合条件的股票”)
if __name__ == “__main__”:
# 根据时间自动选择策略
current_time = datetime.now().time()
if current_time >= pd.to_datetime(’14:30′).time():
main(‘尾盘’)
elif current_time >= pd.to_datetime(‘9:25’).time() and \
current_time < pd.to_datetime(‘9:30’).time():
main(‘竞价’)
else:
print(“当前不是策略执行时间”)
“`
程序特色说明:
1. 双策略智能切换
– 尾盘策略(14:30后执行)
– 竞价策略(9:25-9:30执行)
– 根据执行时间自动切换策略
2. 多维筛选条件
– 量价因子:量比+换手率+成交额
– 技术形态:均线系统+筹码集中度
– 资金流向:主力资金3日净流入
– 风险过滤:排除ST、次新、科创板
3. 创新性指标组合
– 尾盘策略加入「5分钟动量」+「均量线突破」
– 竞价策略加入「高开幅度」+「竞价量比」+「委比」
– 资金面结合「主力资金」和「散户资金」动向
4. 风险控制体系
– 市值过滤(20-500亿)
– 涨幅限制(排除涨停股)
– 波动控制(振幅<12%)
5. 实用功能
– 自动保存Excel结果
– 行业分类标注
– 信号说明生成
– 时间戳命名文件
使用建议:
1. 安装依赖:`pip install akshare pandas`
2. 在交易日的:
– 14:30-15:00 运行尾盘策略
– 9:25-9:30 运行竞价策略
3. 可根据自身需求调整参数:
– 修改`filter_stocks()`中的数值条件
– 添加新的技术指标(MACD/KDJ等)
– 调整市值范围、量比阈值等
注意事项:
1. 实时数据依赖网络状况
2. 需配合人工验证使用
3. 建议回测验证参数有效性
4. 注意交易规则变化(如涨跌幅限制)
这个程序结合了机构常用的量价分析方法和散户关注的资金流向指标,既保证了策略的合理性,又加入了市场情绪因素,适合大多数投资者使用。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/1227402
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!