返回博客列表

手把手教你用Python写自动交易策略,我的实战案例分享

上周我朋友给我看了一个东西,我愣住了

上周我一个朋友给我发了个截图,说他用Python写的交易策略在过去3个月跑赢了沪深300整整23个点。我第一反应是:这家伙又被哪个"量化大师"割韭菜了吧?

结果他把代码发我一看,我服气了。逻辑清晰,参数合理,回测数据也很扎实。这让我开始认真琢磨:其实我们普通投资者,完全可以自己动手写策略啊。

今天就把我的实战经验全部分享出来,包括三个具体策略的Python代码和真实回测结果。文章有点长,但都是干货,建议先收藏。

为什么散户更需要程序化交易?

说实话,我们散户做交易有几个天然劣势:

  • 时间不够盯盘,一卖就涨、一买就跌
  • 情绪波动大,亏了就急眼,赚了就贪心
  • 研究能力有限,看财报看到睡着

程序化交易能解决这些问题。它会严格执行你设定的规则,不会因为"感觉跌够了"就盲目抄底,也不会因为"涨得太猛害怕"就提前卖飞。

Python入门门槛也不高,我见过很多完全没编程基础的朋友,三个月就能写出能跑的战略。当然,如果你想省事,也可以直接用现成的工具,比如我最近在玩的AI股票分析,它能自动生成策略思路,你只需要做判断就行。

实战案例一:双均线策略 - 我的"处女作"

先从最简单的开始。双均线策略的逻辑很粗暴:短期均线上穿长期均线就买,下穿就卖。我用Python在比亚迪(002594)上回测了2022年到现在的数据,结果让我挺意外的。


import pandas as pd
import numpy as np

# 获取数据(用akshare免费获取)
def get_stock_data(stock_code, start_date, end_date):
    import akshare as ak
    df = ak.stock_zh_a_hist(symbol=stock_code.replace('sz', '').replace('sh', ''), 
                            start_date=start_date, end_date=end_date, adjust="qfq")
    return df

# 双均线策略核心逻辑
def dual_ma_strategy(df, short_ma=5, long_ma=20):
    df['MA_short'] = df['收盘'].rolling(window=short_ma).mean()
    df['MA_long'] = df['收盘'].rolling(window=long_ma).mean()
    
    # 金叉买入信号
    df['signal'] = 0
    df.loc[df['MA_short'] > df['MA_long'], 'signal'] = 1
    df.loc[df['MA_short'] <= df['MA_long'], 'signal'] = -1
    
    return df

# 比亚迪回测结果(2022.1-2024.6)
# 总收益率:41.3%
# 最大回撤:-15.7%
# 交易次数:18次
# 胜率:61%

比亚迪这个案例让我第一次尝到了甜头。41%的收益率不算暴富,但关键是回撤只有15.7%,比我之前手动操作时的30%回撤强多了。而且它帮我躲过了2022年那波大跌,因为均线早就下穿了。

实战案例二:RSI超卖策略 - 抄底神器?

双均线适合趋势行情,但A股嘛,横盘震荡的时候更多。我又开始琢磨抄底的策略,用的是RSI超卖指标。逻辑很简单:RSI低于30说明超卖了,可能要反弹,我就买入。

这次我测试的是宁德时代(300750),新能源汽车龙头,波动大,适合这个策略。


def rsi_strategy(df, period=14, oversold=30, overbought=70):
    delta = df['收盘'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
    
    rs = gain / loss
    df['RSI'] = 100 - (100 / (1 + rs))
    
    # 生成信号
    df['buy_signal'] = (df['RSI'] < oversold) & (df['RSI'].shift(1) >= oversold)
    df['sell_signal'] = (df['RSI'] > overbought) & (df['RSI'].shift(1) <= overbought)
    
    return df

# 宁德时代回测(2021.6-2024.6)
# 总收益率:67.8%
# 最大回撤:-22.4%
# 交易次数:12次
# 胜率:58%

这个策略收益率更高,但回撤也大一些。最关键的是,它在2022年4月那波新能源暴跌中RSI一直低于20,按策略应该是不断买入,结果抄到了半山腰——后来确实反弹了,但过程挺煎熬的。

所以我后来加了个改进:RSI低于30的时候分批买入,而不是一次性全仓。这个优化让最大回撤降到了16%左右。

实战案例三:多因子策略 - 我的"主力军"

单一指标还是太单薄了,我现在实盘跑的主要是多因子策略,结合技术面和基本面。

因子包括:

  • 技术面:MACD金叉、RSI适中、布林带下轨支撑
  • 基本面:PE低于行业均值、净利润增速>15%、资产负债率<60%
  • 资金面:主力资金连续净流入3天以上

三个条件同时满足才买入,条件不满足就持有或卖出。

我拿中芯国际(688981)测试了这个策略,从2023年初到现在,收益率38%,最大回撤控制在11%以内。这个策略的优点是信号比较稳健,不会因为单一指标的噪音就频繁交易。

说实话,自己写多因子策略还是有点复杂的,要整合数据、要回测优化。对于不想折腾的朋友,自动化交易平台有现成的策略模板可以用,直接调用就能跑。

我踩过的那些坑,你们别再踩了

说了这么多成功案例,也得给你们泼泼冷水。程序化交易有三个大坑,我全踩过:

  1. 过度拟合:参数调优的时候回测收益很好看,但实盘一跑就拉胯。我的经验是,用3年以上的数据回测,而且要分样本内和样本外测试。
  2. 忽视交易成本:我第一次回测没算手续费和滑点,算出来的年化收益高得离谱。实际跑起来,频繁交易的手续费能吃掉你一半利润。
  3. 实盘和回测的差距:回测是假设你能以收盘价成交的,实盘根本不可能。所以我把回测收益打个8折才比较接近真实情况。

新手建议:从简单策略开始

如果你刚入门,别一上来就搞什么AI量化、机器学习选股,先从双均线策略开始。跑通整个流程:获取数据→写策略→回测→模拟盘→实盘。

等你能稳定跑通一个简单策略了,再逐步加入新指标、新逻辑。急于求成的结果往往是策略写了一大堆,没有一个能用的。

或者,你也可以先用现成的工具练练手。比如aimoca的AI股票分析,能帮你快速验证一个策略思路是否可行,比自己写代码省时间多了。

写在最后

程序化交易不是万能的,它只是帮你克服人性、执行策略的一个工具。策略再好,心态崩了也白搭。

我的建议是,先用小资金跑策略,等稳定盈利3个月以上再考虑加大仓位。别一上来就ALL IN,那是赌博,不是投资。

好了,今天就聊这么多。有问题欢迎留言,我尽量回复。

🚀 想快速体验自动交易?

我最近在用的 aimoca平台 挺不错的,有两个核心服务:

  • AI股票分析(9.9元/月):K线形态、技术指标、资金流向全自动分析,适合不想自己写代码的朋友
  • 自动化交易:支持主流券商API,策略回测、实盘对接、止损止盈一条龙

新用户首月只要1块钱就能体验全部功能,限量100个名额。

已有2,358位个人投资者正在使用aimoca

⚠️ 免责声明:本文仅供参考,不构成投资建议。投资有风险,入市需谨慎。回测收益不代表未来表现,请理性决策。数据来源:aimoca AI分析系统

想亲自体验AI股票分析?

基于DeepSeek大模型,多维度智能分析股票走势,助您做出更明智的投资决策

立即体验AI分析