以下是一个结合收盘价、成交量、资金流向和板块效应的Python策略框架,使用Tushare数据接口实现。该程序通过多维度筛选潜力股,建议在实盘前进行历史回测验证。
“`python
import tushare as ts
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 初始化Tushare(需自行获取token)
pro = ts.pro_api(‘your_tushare_token’)
# 参数设置
TRADE_DATE = datetime.now().strftime(‘%Y%m%d’) # 当前交易日
SELECT_NUM = 10 # 选股数量
VOL_MA_DAYS = 5 # 成交量均线天数
PRICE_MA_DAYS = 20 # 价格均线天数
def get_base_data():
“””获取基础数据”””
# 获取全A股列表
stock_list = pro.stock_basic(exchange=”, list_status=’L’,
fields=’ts_code,name,industry,list_date’)
# 获取交易日历
trade_cal = pro.trade_cal(exchange=’SSE’, start_date=’20240101′,
end_date=TRADE_DATE)
last_5_days = trade_cal[trade_cal.is_open==1].tail(5)[‘pretrade_date’].tolist()
# 获取行情数据
df = pro.daily(trade_date=TRADE_DATE)
df = df.merge(stock_list, on=’ts_code’)
# 获取资金数据
money_flow = pro.moneyflow(trade_date=TRADE_DATE)
df = df.merge(money_flow[[‘ts_code’,’buy_lg_amount’,’buy_elg_amount’]], on=’ts_code’)
return df, last_5_days
def calculate_technical(df, last_days):
“””计算技术指标”””
# 计算量价关系
df[‘vol_ma’] = df[‘vol’].rolling(VOL_MA_DAYS).mean()
df[‘price_ma’] = df[‘close’].rolling(PRICE_MA_DAYS).mean()
# 资金强度计算
df[‘big_money’] = df[‘buy_lg_amount’] + df[‘buy_elg_amount’]
df[‘money_ratio’] = df[‘big_money’] / df[‘vol’] / df[‘close’]
# 近期涨幅计算
hist_data = pro.daily(ts_code=’,’.join(df[‘ts_code’]),
start_date=last_days[0],
end_date=TRADE_DATE)
hist_pivot = hist_data.pivot(index=’ts_code’, columns=’trade_date’, values=’pct_chg’)
df[‘5d_pct’] = hist_pivot.mean(axis=1)
return df
def sector_analysis(df):
“””板块强度分析”””
sector_strength = df.groupby(‘industry’).agg({
‘pct_chg’:’mean’,
‘big_money’:’sum’,
‘vol’:’sum’
}).reset_index()
sector_strength[‘sector_score’] = (
sector_strength[‘pct_chg’]*0.4 +
sector_strength[‘big_money’]*0.3 +
sector_strength[‘vol’]*0.3
)
top_sectors = sector_strength.nlargest(3, ‘sector_score’)[‘industry’].tolist()
return df[df[‘industry’].isin(top_sectors)]
def strategy_filter(df):
“””执行多因子筛选”””
filtered = df[
# 价格突破均线
(df[‘close’] > df[‘price_ma’]) &
# 放量上涨
(df[‘vol’] > 1.5*df[‘vol_ma’]) &
# 资金强度筛选
(df[‘money_ratio’] > 0.2) &
# 排除新股
(df[‘list_date’] < ‘20200101’) &
# 波动性筛选
(df[‘5d_pct’].between(5, 20))
]
# 综合评分排序
filtered[‘score’] = (
filtered[‘pct_chg’]*0.3 +
filtered[‘money_ratio’]*0.4 +
filtered[‘5d_pct’]*0.3
)
return filtered.nlargest(SELECT_NUM, ‘score’)
def main():
# 数据准备
raw_data, hist_dates = get_base_data()
# 指标计算
tech_data = calculate_technical(raw_data, hist_dates)
# 板块筛选
sector_data = sector_analysis(tech_data)
# 策略执行
final_picks = strategy_filter(sector_data)
# 结果展示
print(“今日精选个股:”)
print(final_picks[[‘ts_code’,’name’,’industry’,’close’,’pct_chg’,’score’]])
# 生成买入信号
final_picks[‘position’] = np.where(final_picks[‘score’] > 0.7,
‘重仓’, ‘标准仓’)
return final_picks
if __name__ == ‘__main__’:
result = main()
“`
策略逻辑说明:
1. 多维度数据整合:
– 行情数据(收盘价、成交量)
– 资金数据(大单买入金额)
– 板块信息(行业分类)
– 历史表现(5日涨幅)
2. 核心筛选条件:
– 量价配合:成交量突破5日均量1.5倍
– 趋势判断:收盘价站上20日均线
– 资金强度:大单资金占比超过20%
– 板块效应:选择当日最强的3个板块
– 波动要求:5日累计涨幅在5%-20%之间
3. 风险控制:
– 排除上市未满2年的新股
– 设置仓位分级(根据评分)
4. 排序机制:
– 综合评分=当日涨幅×30% + 资金强度×40% + 近期动量×30%
注意事项:
1. 需申请Tushare权限并替换token
2. 建议在收盘后半小时运行(确保数据更新)
3. 实际使用需添加异常处理机制
4. 应结合大盘环境使用(弱势行情需提高筛选标准)
5. 建议配合止损策略使用(如跌破5日线止损)
进阶优化方向:
1. 加入基本面指标(PE、PEG)
2. 引入机器学习模型进行特征工程
3. 添加盘中实时监控模块
4. 结合市场情绪指标(如涨停板数量)
5. 加入北向资金持仓变化因子
建议回测时重点验证:
1. 不同市场环境下的胜率变化
2. 板块轮动效应的持续性
3. 资金因子的有效性
4. 参数敏感性测试(均线周期、权重分配)
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/1227409
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!