首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Python 写第一个量化交易策略

用 Python 写第一个量化交易策略

原创
作者头像
克劳德2048
发布2026-09-20 15:51:16
发布2026-09-20 15:51:16
100
举报

用 Python 写第一个量化交易策略,最适合从经典的"双均线策略"入手:当短期均线上穿长期均线时买入、下穿时卖出。完整流程包括五步:准备行情数据、计算快慢两条均线、根据均线交叉生成买卖信号、简单模拟策略收益、把结果可视化出来。这个策略逻辑简单、代码量小,是理解"从想法到代码再到验证"这一完整链路的最佳练手项目。本文带你一步步写出并跑通人生第一个量化策略,附完整可运行的代码框架。

一、为什么第一个策略要选双均线

带新手写第一个策略,我几乎都推荐双均线策略。原因有三:

一是逻辑够简单。 它的规则一句话就能说清:短期均线上穿长期均线就买、下穿就卖。新手不会被复杂逻辑绕晕。

二是覆盖了完整链路。 别看它简单,"准备数据→算指标→生成信号→模拟收益→可视化"这一整套量化的核心流程,它全都涉及。写完这一个,你就摸清了量化策略开发的骨架。

三是容易验证和扩展。 它的效果直观、好检验,之后你想加条件、换指标,都可以在这个骨架上改。

所以别小看这第一个策略,它是你理解量化的最佳"敲门砖"。下面开始动手。

二、第一步:准备行情数据

任何策略都从数据开始。这里我们假设你已经拿到了一份包含日期和收盘价的行情数据(实际中可以从数据源获取,入门阶段用一份历史数据 CSV 即可)。

先用 pandas 把数据读进来:

代码语言:python
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取行情数据,假设有 date 和 close 两列
df = pd.read_csv("stock_data.csv", parse_dates=["date"])
df = df.sort_values("date").reset_index(drop=True)

print(df.head())

这一步的目标是拿到一份干净、按时间排好序的收盘价数据。记住"垃圾进垃圾出",数据一定要先整理干净。

三、第二步:计算快慢两条均线

有了收盘价,接下来计算两条均线——一条短期(快线)、一条长期(慢线)。均线就是收盘价在一段时间内的平均值,用 pandas 的 rolling 方法几行就能算出来:

代码语言:python
复制
# 计算 5 日均线(快线)和 20 日均线(慢线)
df["ma_fast"] = df["close"].rolling(window=5).mean()
df["ma_slow"] = df["close"].rolling(window=20).mean()

print(df[["date", "close", "ma_fast", "ma_slow"]].tail())

这里我们用 5 日线作为快线、20 日线作为慢线。这两个数字是可以调整的参数,入门先用经典设置。

四、第三步:根据均线交叉生成买卖信号

这是策略的核心——把"金叉买入、死叉卖出"的想法变成信号。

逻辑是:当快线在慢线之上时,我们认为处于持有状态(信号为 1);当快线在慢线之下时,处于空仓状态(信号为 0)。信号从 0 变 1 就是买入点,从 1 变 0 就是卖出点。

代码语言:python
复制
# 快线在慢线上方记为 1(持有),否则记为 0(空仓)
df["signal"] = np.where(df["ma_fast"] > df["ma_slow"], 1, 0)

# 信号发生变化的地方,就是买卖点
df["trade"] = df["signal"].diff()
# trade = 1 表示买入,trade = -1 表示卖出

到这里,策略的"大脑"就写好了——它已经能根据行情自动判断该买还是该卖。

五、第四步:简单模拟策略收益

有了信号,我们来简单估算这个策略的收益表现。思路是:只有在持有状态(signal=1)时,才享受第二天的价格涨跌。

代码语言:python
复制
# 计算每日收益率
df["return"] = df["close"].pct_change()

# 策略收益:用前一天的信号 × 当天收益(持有时才有收益)
df["strategy_return"] = df["signal"].shift(1) * df["return"]

# 计算累计收益(净值曲线)
df["cum_market"] = (1 + df["return"]).cumprod()
df["cum_strategy"] = (1 + df["strategy_return"]).cumprod()

print("策略累计收益:", df["cum_strategy"].iloc[-1])
print("买入持有收益:", df["cum_market"].iloc[-1])

注意这里用了 signal.shift(1)——用前一天的信号决定当天的持仓,这是为了避免"未来函数"(不能用今天才知道的信号去赚今天的钱)。这是新手极易犯的坑,一定要注意。

六、第五步:把结果可视化

最后,把策略净值和"买入持有"做个对比,画出来直观感受:

代码语言:python
复制
plt.figure(figsize=(12, 6))
plt.plot(df["date"], df["cum_market"], label="Buy & Hold")
plt.plot(df["date"], df["cum_strategy"], label="MA Strategy")
plt.legend()
plt.title("Dual Moving Average Strategy")
plt.show()

运行后你会看到两条曲线:一条是简单买入持有的收益,一条是你的双均线策略收益。对比它们,你就能直观看到策略的效果——这就是你人生第一个量化策略的成果!

七、几个重要提醒

第一个策略跑通了,但有几点我必须提醒你,别被表面结果误导:

一是这只是简化模型。 上面的收益计算没有考虑滑点、手续费,真实交易中这些成本会侵蚀收益。真正做回测时要把它们算进去。

二是回测好不代表实盘赚钱。 就算这个策略在历史数据上表现不错,也绝不意味着未来能赚钱。历史不会简单重复,切忌拿着漂亮曲线就重仓实盘。

三是别急着优化参数。 你可能想把 5 日、20 日改来改去让曲线更好看——小心过拟合!参数调得过度贴合历史,实盘往往失灵。

四是这是练手,不是致富工具。 双均线是经典的教学策略,它的价值在于帮你理解流程,而不是拿去赚钱。

八、完整流程回顾

我把这个策略的五步整理成一张表,帮你梳理:

步骤

做什么

核心工具

1

准备行情数据

pandas 读取、排序

2

计算快慢均线

rolling().mean()

3

生成买卖信号

np.where、diff

4

模拟策略收益

pct_change、cumprod

5

结果可视化

matplotlib 画图

结尾

用 Python 写第一个量化策略,双均线是最好的起点——它用最简单的逻辑,带你走完了从数据、指标、信号、收益到可视化的完整链路。跑通它,你就真正迈进了量化实战的大门。记住,第一个策略的意义在于理解流程,而不是赚钱,保持这份清醒,你才能走得更远。

当你的策略越写越成熟、想让它长期自动运行时,就需要一个稳定的运行环境。腾讯云近期上线了量化交易专题活动,可以了解云服务器如何承载 Python 量化程序的数据抓取、回测与自动化交易。如果想搭建自己的运行环境,也可以先了解腾讯云云服务器 CVM 的相关能力。

风险提示:本文仅为量化交易科普与技术分享,不构成任何投资建议。文中代码仅为教学示例,不代表任何真实策略效果。金融市场存在风险,任何交易策略都可能产生亏损,请结合自身情况谨慎决策。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、为什么第一个策略要选双均线
  • 二、第一步:准备行情数据
  • 三、第二步:计算快慢两条均线
  • 四、第三步:根据均线交叉生成买卖信号
  • 五、第四步:简单模拟策略收益
  • 六、第五步:把结果可视化
  • 七、几个重要提醒
  • 八、完整流程回顾
  • 结尾
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档