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

在量化交易的世界中,双均线策略(Moving Average Crossover Strategy)因其简单性和有效性而备受青睐。该策略的核心思想在于利用移动平均线的特性来捕捉市场的趋势变化。具体来说,投资者会同时关注一条短期均线和一条长期均线,当短期均线穿过长期均线时发出买入或卖出信号。


在Python中实现双均线策略,首先需要获取历史价格数据。这一步可以通过各种金融数据的API或者从数据库中读取。假设我们已经有了某股票的日收盘价数据,接下来就是计算移动平均线的过程。通常我们会选择50天的短期均线和200天的长期均线作为策略参数,但这并不意味着只能使用这些天数,根据市场特性和个人经验的不同,也可以调整均线的周期。


在Python中,可以使用`pandas`库来方便地处理时间序列数据,并利用其内置的滚动窗口函数计算移动平均线。例如,我们可以使用`rolling()`方法来创建一个滚动窗口,然后调用该窗口上的`mean()`方法来计算均值。以下是一个简单的代码片段:


```python


import pandas as pd


假设df是包含股票日收盘价的DataFrame


short_window = 50 # 短期均线周期


long_window = 200 # 长期均线周期


计算短期和长期移动平均线


df['SMA'] = df.rolling(window=short_window).mean()


df['LMA'] = df.rolling(window=long_window).mean()


```


接下来,我们需要根据短期和长期均线之间的关系来生成交易信号。这可以通过比较两条均线在任意给定时间点的位置来实现。当短期均线上穿长期均线时发出买入信号(金叉),反之亦然(死叉)。以下是一个简单的函数,用于判断何时发生金叉或死叉:


```python


def crossover(a, b):


return (a > b) & (b < a).shift(1) | (a < b) & (b > a).shift(1)


生成交易信号


df['Signal'] = crossover(df['SMA'], df['LMA'])


```


在这个函数中,我们使用了逻辑操作来判断两条均线何时发生交叉。`(a > b)`代表短期均线上穿长期均线,而`(b < a).shift(1)`则表示在上一时间点上长期均线位于短期上方。类似地,`(a < b)`代表短期均线下穿长期均线,而`(b > a).shift(1)`表示在上一时间点上长期均线位于短期下方。


最后,我们可以利用这些交易信号进行回测分析,以评估策略的有效性。以下是一个简单的函数,用于根据信号买入或卖出并跟踪资金的变动情况:


```python


def backtest(df):


初始资金


capital = 100000


position_size = capital / len(df) # 每个交易单位的资金数量


portfolio_value = pd.Series(0, index=df.index) # 持仓价值序列


position = pd.Series(0, index=df.index) # 持仓序列


for i in range(len(df)):


if portfolio_value[i-1] > 0 and df['Signal'][i]:


买入信号或持有时,进行交易


position[i] = position_size / df.loc[i, 'Close'] # 计算买入数量


portfolio_value[i] = portfolio_value[i-1] + position[i]*df.loc[i, 'Close'] - position_size # 更新持仓价值


elif portfolio_value[i-1] < len(df)*position_size and df['Signal'][i-1] & ~df['Signal'][i]:


卖出信号或无持仓时,进行交易


portfolio_value[i] = portfolio_value[i-1] + position[i]*df.loc[i, 'Close'] - (portfolio_value[i-1]-position[i]*df.loc[i, 'Close']) # 更新持仓价值


position[i] = 0 # 清空持仓


return portfolio_value


```


在这个函数中,我们首先定义了初始资金和每个交易单位所需的投资额。然后,我们遍历数据帧的每一天,根据交易信号来决定是否买入或卖出。每次交易后,都会更新持仓价值序列,并记录当前的持仓情况。最终返回的是随着时间推移而变化的资金总额。


通过上述步骤,我们可以得到双均线策略在历史数据上的表现。回测的结果可以帮助我们判断策略的有效性,并根据需要调整参数。在实际应用中,投资者还可以结合其他技术指标和机器学习方法来进一步提高策略的准确性和盈利能力。总之,双均线策略虽然是经典,但其简单易行的特性使得它在量化交易中始终占据了一席之地。

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