如何在Python中进行选股策略的实现

企业微信

为什么用Python做选股

手动翻看几千只股票,眼睛累不说,还容易漏掉关键信号。Python能帮你自动化处理数据,把想法变成可执行的策略,几分钟跑完历史回测。这不是程序员的专利,懂点基础语法就能上手。

第一步:搞定数据

选股离不开历史价格、财务指标。免费数据源有yfinance、tushare。以yfinance为例,一行代码下载全部A股?不行,它主要覆盖美股。A股用akshare或者baostock更顺手。

如何在Python中进行选股策略的实现


import akshare as ak

# 获取沪深300成分股列表

df = ak.index_stock_cons(symbol="000300")

print(df.head())

拿到股票池后,批量下载日线数据。注意复权问题,前复权价格才能真实反映收益。akshare的stock_zh_a_hist函数支持复权参数。


stock_data = ak.stock_zh_a_hist(symbol="600519", period="daily", adjust="qfq")

第二步:构建因子

因子就是选股标准。常见的有动量、估值、波动率。动量因子看过去20日涨幅,估值看市盈率倒数。用pandas计算很轻松。


def momentum_factor(close_prices, window=20):

    return close_prices.pct_change(window)

把每个股票的因子值算出来,合并成一张大表。注意对齐日期,停牌股要剔除。因子最好做标准化,消除量纲影响。


from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

factor_matrix = scaler.fit_transform(factor_df)

第三步:回测验证

回测是检验策略的唯一标准。自己写循环容易出错,用backtrader或者vectorbt更省心。vectorbt速度快,适合向量化回测。


import vectorbt as vbt

# 假设已经计算出每日信号

portfolio = vbt.Portfolio.from_signals(close, entries, exits, init_cash=100000)

print(portfolio.stats())

关键指标看夏普比率、最大回撤、年化收益。夏普大于1算及格,最大回撤超过30%要警惕。注意避免未来函数,用当天收盘价算信号,第二天开盘价成交。

常见坑与优化

数据幸存者偏差:退市股票没包含,回测收益虚高。用全历史成分股列表。

过拟合:因子挖得太细,样本内漂亮样本外惨。留出最近两年做验证。

交易成本:佣金、印花税、滑点都要算进去。A股印花税千分之一,别忽略。

多因子组合:等权配置简单有效,动态加权需要更复杂的模型。

实战小例子

双均线选股:5日均线上穿20日均线买入,下穿卖出。跑一遍沪深300成分股,看看效果。代码不长,但能帮你理解整个流程。


for stock in stock_list:

    data = get_price(stock)

    data['ma5'] = data['close'].rolling(5).mean()

    data['ma20'] = data['close'].rolling(20).mean()

    data['signal'] = np.where(data['ma5'] > data['ma20'], 1, 0)

    data['position'] = data['signal'].shift(1)

    data['return'] = data['close'].pct_change() * data['position']

    # 累计收益

    data['cum_return'] = (1 + data['return']).cumprod()

把每只股票的累计收益画出来,对比等权买入持有。你会发现择时不一定更好,但能降低回撤。

进阶方向

机器学习选股:用随机森林、XGBoost预测涨跌,特征包括财务指标、技术指标。注意时序交叉验证,不能随机打乱。

组合优化:马科维茨均值方差模型,用scipy.optimize求解。约束条件包括行业中性、市值中性。

实盘对接:用easytrader连接券商客户端,自动下单。记得加风控,单笔亏损不超过总资金2%。

Python选股不是圣杯,但能帮你系统化验证想法。从简单策略开始,逐步迭代。数据质量决定上限,回测严谨性决定下限。动手写代码,比看一百篇文章都管用。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/Python-xuangu-1100.html