双均线量化交易策略指南

策略原理

采用两条不同周期的简单移动平均线(SMA):

  • 短期均线:5日线(快速反应价格变化)
  • 长期均线:20日线(反映长期趋势)

交易信号生成规则

复制代码
当 5日线 > 20日线 → 买入信号
当 5日线 < 20日线 → 卖出信号

Python实现模块

1. 数据获取模块

python 复制代码
import yfinance as yf

def fetch_stock_data(ticker, start_date, end_date):
    """
    获取股票历史数据
    参数:
    ticker -- 股票代码 (例:'AAPL')
    start_date -- 开始日期 (格式:'YYYY-MM-DD')
    end_date -- 结束日期
    """
    return yf.download(ticker, start=start_date, end=end_date)

2. 策略计算模块

python 复制代码
def calculate_signals(data, short_window=5, long_window=20):
    """
    计算双均线和交易信号
    参数说明:
    short_window -- 短期均线周期(默认5日)
    long_window -- 长期均线周期(默认20日)
    """
    data['SMA5'] = data['Close'].rolling(short_window).mean()
    data['SMA20'] = data['Close'].rolling(long_window).mean()
    data['Signal'] = np.where(data['SMA5'] > data['SMA20'], 1, -1)
    return data

3. 回测引擎

python 复制代码
def backtest_strategy(data, initial_capital=1000000):
    """
    策略回测模块
    参数:
    initial_capital -- 初始资金(默认100万)
    """
    position = 0
    capital_curve = [initial_capital]
    
    for i in range(1, len(data)):
        if data['Signal'][i-1] == 1 and position == 0:
            position = capital_curve[-1] / data['Close'][i]
            capital_curve.append(position * data['Close'][i])
        elif data['Signal'][i-1] == -1 and position != 0:
            capital_curve.append(capital_curve[-1])
            position = 0
        else:
            capital_curve.append(position * data['Close'][i] if position else capital_curve[-1])
    
    return pd.Series(capital_curve, index=data.index)

可视化分析

python 复制代码
import matplotlib.pyplot as plt

plt.figure(figsize=(12,6))
plt.plot(data['Close'], label='收盘价', alpha=0.5)
plt.plot(data['SMA5'], label='5日均线', linestyle='--')
plt.plot(data['SMA20'], label='20日均线', linestyle='-.')
plt.scatter(data[data['Signal'].diff() != 0].index, 
           data['Close'][data['Signal'].diff() != 0], 
           c=data['Signal'][data['Signal'].diff() != 0].map({1:'g', -1:'r'}),
           marker='^', s=100)
plt.title('双均线策略交易信号可视化')
plt.legend()
plt.savefig('strategy_visualization.png', dpi=300, bbox_inches='tight')

策略优化建议

参数调优组合

组合名称 短期均线 长期均线 适用场景
激进型 3日 10日 高波动市场
平衡型 5日 20日 趋势行情
保守型 10日 50日 长线投资

改进方向

  1. 增加交易成本计算(佣金、滑点)
  2. 结合波动率过滤避免震荡行情
  3. 添加止损止盈机制
  4. 多品种回测验证策略普适性

使用示例

python 复制代码
if __name__ == "__main__":
    # 获取数据
    data = fetch_stock_data('AAPL', '2020-01-01', '2023-12-31')
    
    # 计算策略
    strategy_data = calculate_signals(data)
    
    # 执行回测
    results = backtest_strategy(strategy_data)
    
    # 展示结果
    print(f"累计收益率:{(results[-1]/1000000-1)*100:.2f}%")

注意事项

❗ 实际交易需考虑以下因素:

  • 避免在开盘价跳空时执行信号
  • 不同品种参数需重新优化
  • 回测存在过拟合风险
  • 需定期进行策略再平衡
相关推荐
TF男孩2 小时前
ARQ:一款低成本的消息队列,实现每秒万级吞吐
后端·python·消息队列
该用户已不存在7 小时前
Mojo vs Python vs Rust: 2025年搞AI,该学哪个?
后端·python·rust
站大爷IP9 小时前
Java调用Python的5种实用方案:从简单到进阶的全场景解析
python
用户83562907805114 小时前
从手动编辑到代码生成:Python 助你高效创建 Word 文档
后端·python
c8i14 小时前
python中类的基本结构、特殊属性于MRO理解
python
liwulin050615 小时前
【ESP32-CAM】HELLO WORLD
python
Doris_202315 小时前
Python条件判断语句 if、elif 、else
前端·后端·python
Doris_202315 小时前
Python 模式匹配match case
前端·后端·python
这里有鱼汤16 小时前
Python量化实盘踩坑指南:分钟K线没处理好,小心直接亏钱!
后端·python·程序员
大模型真好玩16 小时前
深入浅出LangGraph AI Agent智能体开发教程(五)—LangGraph 数据分析助手智能体项目实战
人工智能·python·mcp