🤖 全新课程 · 2026年重磅上线

算法交易入门
从零搭建你的量化策略

告别凭感觉买卖,用数据和代码做决策。本课程专为零编程基础的投资人设计,手把手带你写出第一个能赚钱的交易策略。

12 章节
6 实战策略
Python 编程语言

📋 本课程目录

🧠 第一章:算法交易是什么

算法交易(Algorithmic Trading),简单说就是用计算机程序代替人来做交易决策。你定好规则,机器自动执行。它不神秘,也不高深——本质上就是把你的交易思路写成代码,让电脑帮你盯盘、下单。

很多散户觉得算法交易是机构才用的东西,其实不然。今天任何一个普通投资者,只要有台电脑、能上网,就能写出自己的交易策略。股老师这门课,就是帮零基础的你迈出这一步。

算法交易的优势

速度快

机器毫秒级响应,捕捉转瞬即逝的机会,人类手动操作至少需要几秒钟

😐

没情绪

严格按照规则执行,不会被恐惧、贪婪影响,克服人性的弱点

📊

可回测

用历史数据验证策略效果,亏钱在回测里亏,不在实盘里亏

🔄

24小时

策略可以同时监控多个市场、多只股票,人不睡觉它也不睡

📈

可优化

不断迭代升级,数据驱动决策,越用越聪明

🎯

纪律性

严格执行止损止盈,避免犹豫不决导致的亏损扩大

你需要具备什么

  • 基本的电脑操作能力——会安装软件、会用浏览器就行
  • 愿意学习一点点编程——我们选Python,它是最容易上手的编程语言
  • 基础的股票知识——至少知道K线、均线是什么(如果不清楚,先看入门课程
  • 耐心和好奇心——量化交易不是一夜暴富,是长期积累的过程

💡 股老师的话: 别怕编程。你不需要成为程序员,只需要学会把"如果……就……"这样的逻辑写成代码。就像学开车,你不需要懂发动机原理,会踩油门刹车就行。

算法交易的常见类型

策略类型 核心逻辑 适合人群
趋势跟踪 价格突破均线或通道时买入,趋势反转时卖出 初学者、趋势投资者
均值回归 价格偏离均值过多时反向操作,博取价格回归 震荡市中的交易者
套利策略 利用不同市场或品种之间的价差获利 有一定经验的交易者
统计套利 基于统计模型发现定价偏差,配对交易 进阶量化交易者
做市策略 同时挂买卖单,赚取买卖价差 机构为主,个人较难

对个人投资者来说,趋势跟踪均值回归是最容易上手的两类策略。后面的章节我们会实际写出这两种策略的代码。

🛠️ 第二章:搭建你的量化开发环境

写算法交易不需要昂贵的设备,一台普通的笔记本电脑就够了。我们只需要安装三个东西:Python编程环境、一个代码编辑器、以及一些免费的Python库。

第一步:安装 Python

  1. 打开浏览器,访问 python.org/downloads
  2. 下载最新版本的 Python(推荐 3.10 或 3.11)
  3. 安装时一定要勾选 "Add Python to PATH"(添加到系统路径)
  4. 安装完成后,打开命令行(Windows 按 Win+R,输入 cmd),输入 python --version,看到版本号就是成功了

第二步:安装量化必备库

打开命令行,依次输入以下命令(每输完一行按回车):

bash
# 安装核心库
pip install pandas numpy matplotlib

# 安装金融数据获取库
pip install yfinance akshare

# 安装回测框架(二选一即可)
pip install backtrader
# 或者
pip install zipline-reloaded

📌 说明: pandasnumpy 是数据处理的基础库,matplotlib 用来画图,yfinance 可以获取美股数据,akshare 可以获取A股数据。回测框架 backtrader 最易上手,我们后面就用它。

第三步:安装代码编辑器

推荐使用 VS Code(Visual Studio Code),免费且功能强大。

  • 下载地址:code.visualstudio.com
  • 安装后打开,在左侧扩展商店搜索 "Python",安装微软官方的 Python 扩展

验证环境

新建一个文件,命名为 test.py,输入以下代码并运行:

Python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成一些示例数据
dates = pd.date_range('2025-01-01', periods=100)
prices = np.random.randn(100).cumsum() + 100

# 画个折线图
plt.plot(dates, prices)
plt.title('测试:随机价格走势')
plt.xlabel('日期')
plt.ylabel('价格')
plt.show()

print('环境搭建成功!股老师为你骄傲 🎉')

如果看到一张折线图和打印出来的成功消息,说明你的量化开发环境已经搭好了!

📝 第三章:写出你的第一个交易策略

现在我们来写一个最简单的策略——双均线交叉策略(Golden Cross / Death Cross)。这是最经典的交易策略之一:当短期均线上穿长期均线时买入(金叉),下穿时卖出(死叉)。

策略逻辑

  • 计算5日均线(MA5)和20日均线(MA20)
  • 当 MA5 上穿 MA20 时,买入(金叉信号)
  • 当 MA5 下穿 MA20 时,卖出(死叉信号)
  • 如果已经持有,就不再重复买入;如果已经空仓,就不再重复卖出

我们先手动写一个简单的版本,不使用回测框架,这样更容易理解背后的逻辑:

Python
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

# 1. 获取数据——以贵州茅台为例
ticker = yf.Ticker("600519.SS")
data = ticker.history(period="1y")  # 最近1年数据

# 2. 计算均线
data['MA5'] = data['Close'].rolling(window=5).mean()
data['MA20'] = data['Close'].rolling(window=20).mean()

# 3. 生成信号
data['Signal'] = 0
data.loc[data['MA5'] > data['MA20'], 'Signal'] = 1  # 金叉信号
data['Position'] = data['Signal'].diff()  # 1表示买入,-1表示卖出

# 4. 画出结果
plt.figure(figsize=(14, 7))
plt.plot(data.index, data['Close'], label='收盘价', color='#94a3b8', alpha=0.7)
plt.plot(data.index, data['MA5'], label='MA5', color='#6366f1', linewidth=1.5)
plt.plot(data.index, data['MA20'], label='MA20', color='#f59e0b', linewidth=1.5)

# 标记买入点(绿色箭头)
buy_signals = data[data['Position'] == 1]
plt.scatter(buy_signals.index, buy_signals['Close'], 
            color='#22c55e', marker='^', s=120, label='买入信号', zorder=5)

# 标记卖出点(红色箭头)
sell_signals = data[data['Position'] == -1]
plt.scatter(sell_signals.index, sell_signals['Close'], 
            color='#ef4444', marker='v', s=120, label='卖出信号', zorder=5)

plt.title('双均线交叉策略信号 (贵州茅台)', fontsize=16, fontweight='bold')
plt.legend()
plt.grid(alpha=0.1)
plt.show()

print(f"买入信号次数: {len(buy_signals)}")
print(f"卖出信号次数: {len(sell_signals)}")

运行这段代码,你会看到一张标注了买入和卖出信号的走势图。是不是很直观?这就是算法交易的魅力——你定好规则,电脑帮你执行。

⚠️ 重要提醒: 这个策略只是教学演示,不代表实盘能赚钱。双均线策略在趋势行情中表现不错,但在震荡市中会反复被"打脸"。后面我们会教你如何评估策略的好坏。

📊 第四章:回测与策略评估

写好了策略,不能直接拿到实盘去试。我们需要用历史数据来回测,看看这个策略在过去的表现如何。回测的目的不是预测未来,而是排除那些明显有问题的策略

使用 Backtrader 回测

上面我们手写了策略逻辑,但要做专业的回测,推荐使用 backtrader 框架。它帮我们处理了资金管理、订单执行、滑点等细节。

Python
import backtrader as bt
import yfinance as yf
import pandas as pd

# 1. 定义策略类
class GoldenCrossStrategy(bt.Strategy):
    params = (
        ('fast', 5),    # 短期均线周期
        ('slow', 20),   # 长期均线周期
    )

    def __init__(self):
        self.fast_ma = bt.indicators.SMA(self.data.close, period=self.params.fast)
        self.slow_ma = bt.indicators.SMA(self.data.close, period=self.params.slow)
        self.crossover = bt.indicators.CrossOver(self.fast_ma, self.slow_ma)

    def next(self):
        if self.crossover > 0:  # 金叉
            self.buy()
        elif self.crossover < 0:  # 死叉
            self.sell()

# 2. 获取数据
ticker = yf.Ticker("600519.SS")
data = ticker.history(period="2y")
data_feed = bt.feeds.PandasData(dataname=data)

# 3. 配置回测引擎
cerebro = bt.Cerebro()
cerebro.addstrategy(GoldenCrossStrategy)
cerebro.adddata(data_feed)
cerebro.broker.setcash(100000.0)  # 初始资金10万
cerebro.broker.setcommission(commission=0.0003)  # 佣金万分之三

# 4. 添加分析器
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')

# 5. 运行回测
print('初始资金: %.2f' % cerebro.broker.getvalue())
results = cerebro.run()
print('最终资金: %.2f' % cerebro.broker.getvalue())

# 6. 输出评估指标
strat = results[0]
sharpe = strat.analyzers.sharpe.get_analysis()
returns = strat.analyzers.returns.get_analysis()
drawdown = strat.analyzers.drawdown.get_analysis()

print(f"\n=== 回测评估报告 ===")
print(f"夏普比率: {sharpe.get('sharperatio', 0):.2f}")
print(f"年化收益率: {returns.get('rnorm100', 0):.2f}%")
print(f"最大回撤: {drawdown.get('max', {}).get('drawdown', 0):.2f}%")

# 7. 画图
cerebro.plot()

如何读懂回测报告

指标 含义 参考标准
年化收益率 策略每年平均赚多少 一般 >15% 算不错
夏普比率 每承担一单位风险能获得多少超额收益 >1 可接受,>2 很好,>3 优秀
最大回撤 策略从最高点到最低点最多亏了多少 最好 <20%
胜率 盈利交易占总交易的比例 40%-60% 都正常
盈亏比 平均盈利 / 平均亏损 >1.5 较好
交易次数 策略总共交易了多少次 太少可能欠拟合,太多可能过拟合

✅ 核心原则: 不要只看收益率!一个年化50%但最大回撤40%的策略,可能比年化15%但最大回撤8%的策略更糟糕。记住:活得久比赚得快更重要

回测中常见的坑

  • 前视偏差(Look-ahead Bias)——用到了未来的数据来做决策,比如用今天的收盘价来决定今天是否买入
  • 过拟合(Overfitting)——把参数调得刚好适应历史数据,但换一个时间段就失效
  • 幸存者偏差(Survivorship Bias)——只考虑现在还存在的股票,忽略了已经退市的
  • 不考虑交易成本——佣金、印花税、滑点加起来可能吃掉你很大一部分利润
  • 忽略流动性——小盘股可能你挂单了根本成交不了

避免这些坑的最好方法:用样本外数据验证。比如用2024年的数据来优化策略,然后用2025年的数据来验证。

🎯 第五章:实战策略案例

理论学再多,不如动手写一个。下面给你三个从简单到进阶的实战策略,每个都可以直接运行和修改。

案例一:布林带突破策略

当价格突破布林带上轨时买入(强势突破),跌破下轨时卖出(恐慌抛售)。适合趋势明显的行情。

Python
import backtrader as bt

class BollingerBreakout(bt.Strategy):
    params = (
        ('period', 20),
        ('devfactor', 2),
    )

    def __init__(self):
        self.boll = bt.indicators.BollingerBands(
            self.data.close, period=self.params.period, 
            devfactor=self.params.devfactor
        )

    def next(self):
        # 价格突破上轨,买入
        if self.data.close[0] > self.boll.lines.top[0] and not self.position:
            self.buy()
        
        # 价格跌破中轨,卖出
        if self.data.close[0] < self.boll.lines.mid[0] and self.position:
            self.sell()

案例二:RSI超买超卖策略

RSI指标低于30时买入(超卖),高于70时卖出(超买)。适合震荡行情。

Python
class RSIStrategy(bt.Strategy):
    params = (
        ('rsi_period', 14),
        ('oversold', 30),
        ('overbought', 70),
    )

    def __init__(self):
        self.rsi = bt.indicators.RSI(self.data.close, period=self.params.rsi_period)

    def next(self):
        # RSI低于超卖线,买入
        if self.rsi[0] < self.params.oversold and not self.position:
            self.buy()
        
        # RSI高于超买线,卖出
        if self.rsi[0] > self.params.overbought and self.position:
            self.sell()

案例三:海龟交易法则简化版

这是著名的趋势跟踪策略。突破过去20日最高价买入,跌破过去10日最低价卖出。

Python
class TurtleStrategy(bt.Strategy):
    params = (
        ('entry_period', 20),   # 突破买入周期
        ('exit_period', 10),    # 跌破卖出周期
    )

    def __init__(self):
        self.entry_high = bt.indicators.Highest(
            self.data.high, period=self.params.entry_period
        )
        self.exit_low = bt.indicators.Lowest(
            self.data.low, period=self.params.exit_period
        )

    def next(self):
        if self.data.close[0] > self.entry_high[-1] and not self.position:
            self.buy()
        
        if self.data.close[0] < self.exit_low[-1] and self.position:
            self.sell()

把上面任何一个策略放到之前回测的模板里,替换 GoldenCrossStrategy,就能看到它的表现。

💡 股老师的建议: 不要贪多。选一个策略,深入理解它,把它跑通,然后不断优化。一个策略做精了,比十个半吊子策略强一百倍。

⚠️ 第六章:风险管理与进阶之路

算法交易最大的优势是纪律性,最大的风险是你相信算法不会错。任何策略都有失效的时候,做好风险管理比策略本身更重要。

资金管理三原则

  • 单笔风险不超过总资金的2%——比如你有10万,单笔最多亏2000元
  • 总仓位不超过70%——永远留一些现金,应对突发情况
  • 连续亏损3次后暂停——可能是市场环境变了,或者策略逻辑出了问题

如何避免过拟合

过拟合是量化交易最大的敌人。一个看起来完美的回测曲线,实盘可能一塌糊涂。避免过拟合的方法:

  • 参数简单化 参数越少,越不容易过拟合。能用2个参数解决的问题,不要用10个。
  • 样本外验证 把数据分成两部分:70%用来开发策略(训练集),30%用来验证(测试集)。如果在测试集上表现依然不错,策略才值得信任。
  • 多市场测试 如果一个策略在A股、港股、美股上都表现不错,那它更可能是有效的。如果只在某一只股票上表现好,那大概率是巧合。
  • 蒙特卡洛模拟 随机打乱交易顺序,模拟成千上万次,看策略的收益分布是否稳定。
  • 从回测到实盘的最后一公里

    1. 模拟盘运行1-3个月——用真实行情但虚拟资金,验证策略在真实市场中的表现
    2. 从小资金开始——先用总资金的5%-10%跑实盘,跑顺了再加仓
    3. 持续监控——不要写好了就不管了,每天看一眼策略的运行情况
    4. 做好日志——记录每一次交易的原因、结果、当时的市场环境
    5. 定期复盘——每月或每季度回顾策略表现,决定是否需要调整

    🚨 股老师提醒你: 算法交易不是"躺着赚钱"的魔法。它只是一种工具,帮你更高效地执行交易纪律。如果你对策略没信心,不要实盘。如果你对风险没概念,不要实盘。如果你连代码逻辑都没完全理解,绝对不要实盘

    进阶学习路径

    完成了本课程的基础内容后,如果你想继续深入,可以按这个方向学习:

    • 机器学习在量化中的应用——用随机森林、LSTM等模型预测价格走势
    • 多因子选股模型——构建自己的因子库,筛选出优质股票组合
    • 高频交易基础——理解订单簿、微结构、延迟等概念
    • 期权策略量化——用算法管理期权组合,实现更复杂的收益结构
    • C++/Rust高性能实现——当Python速度不够时,用更底层的语言优化

    同时,建议你把之前学过的技术分析知识(比如MACDKDJ布林带)都尝试写成策略,回测一下,看看哪些指标是真的有用的。

    🚀 准备好开始了吗?

    安装好Python,复制上面的代码,按照教程一步步来。
    遇到问题?随时联系股老师,我们帮你解决。