python 双均线策略
发表于 2026年5月26日 · 阅读 12,394

Python 双均线策略是一种基于历史数据进行股票或金融期货交易的方法,它通过计算两个不同周期(时间窗口)的简单移动平均线(SMA)来确定买入和卖出的时机。这种方法通常用于中长线的投资决策,因为它假设价格会围绕其历史波动模式进行调整。在本文中,我们将详细介绍如何使用 Python 编写一个双均线策略的算法模型。


双均线策略原理


简单移动平均线(SMA)是一种技术分析工具,它通过计算一段时间内价格的平均数来揭示趋势的方向和强度。当两个不同的周期长度的SMA交叉时,可以用来发出交易信号。最常见的两个周期是50日和200日,但也可以根据个人偏好或市场情况调整这两个周期的长度。


短期均线(通常是较短的窗口):追踪短期价格趋势。


长期均线(较长的时间窗口):反映更长期的价格趋势。


Python 实现步骤


第1步:数据收集与处理


首先,我们需要从金融数据源获取历史价格数据。Python中的pandas和yfinance库可以用来轻松地加载股票的历史价格数据。


```python


import yfinance as yf


import pandas as pd


选择要分析的股票和数据范围


stock = 'AAPL' # 示例:苹果公司的股票代码


start_date = '2015-01-01'


end_date = '2023-06-30'


获取历史价格数据


prices = yf.download(stock, start=start_date, end=end_date)['Adj Close']


```


第2步:计算均线


使用pandas的rolling函数可以很容易地计算不同周期的平均值。


```python


short_window = 50 # 短期均线的周期(天)


long_window = 200 # 长线均线的周期(天)


prices['SMA_short'] = prices.rolling(window=short_window).mean()


prices['SMA_long'] = prices.rolling(window=long_window).mean()


```


第3步:信号生成与执行策略


当短期均线穿越长期均线时,我们根据穿越的方向发出买入或卖出的信号。如果短期均线穿过长期均线向上,则可能是一个买入信号;反之,向下穿越可能是卖出信号。


```python


判断交叉方向


prices['Signal'] = np.where(prices['SMA_short'] > prices['SMA_long'], 1, -1)


```


第4步:策略回测与评估


最后,我们可以使用pandas和matplotlib库来可视化信号的产生以及随时间变化的资产价值。


```python


import matplotlib.pyplot as plt


绘制两条均线及其交叉点


plt.figure(figsize=(10,6))


plt.plot(prices['SMA_short'], label='Short SMA')


plt.plot(prices['SMA_long'], label='Long SMA')


plt.scatter(prices[prices['Signal']==1].index, prices[prices['Signal']==1]['SMA_short'], color='green', marker='^')


plt.scatter(prices[prices['Signal']==-1].index, prices[prices['Signal']==-1]['SMA_long'], color='red', marker='v')


plt.title('Double Moving Average Strategy for ' + stock)


plt.xlabel('Date')


plt.ylabel('Price')


plt.legend()


plt.show()


```


第5步:量化结果


为了定量分析策略的表现,我们可以计算每日的策略盈亏情况。


```python


计算每天的持仓比例(假设买入时全仓投入)


prices['Position'] = prices['Signal'] / (prices['Signal'].abs().sum())


计算收盘价与持有份额的乘积,即每日净值


portfolio_value = pd.Series(100000) # 假设起始资金为100,000元


for i in range(len(prices)):


portfolio_value[i] = portfolio_value[i-1] * (1 + prices['Position'][i]*prices['Close'][i])


```


结论与反思


通过上述Python代码,我们不仅实现了双均线策略的算法模型,而且还对策略的表现进行了回测和评估。这种方法可以帮助投资者在市场波动中找到潜在的买卖时机,但同时也提醒投资者该策略并不保证盈利,且需要结合其他技术分析工具和风险管理策略来使用。最后,回测结果通常与实际交易时的表现存在差异,因此最终决策应基于全面的风险分析和个人的投资哲学。

作者简介:本文作者为财经观察专栏撰稿人,长期关注宏观经济、区块链及资本市场动态,致力于提供深度解读与前沿观点。