双均线量化交易策略指南

策略原理

采用两条不同周期的简单移动平均线(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}%")

注意事项

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

  • 避免在开盘价跳空时执行信号
  • 不同品种参数需重新优化
  • 回测存在过拟合风险
  • 需定期进行策略再平衡
相关推荐
全栈陈序员12 小时前
【Python】基础语法入门(九)—— 代码规范、调试技巧与性能初探
开发语言·python·代码规范
nvd1112 小时前
解决 Gemini API 连接卡住问题的方案
python
李剑一12 小时前
Python学习笔记2
python
晨非辰13 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
有梦想的西瓜13 小时前
如何优化电力系统潮流分布:最优潮流(OPF)问题
python·电力·opf
DanCheng-studio18 小时前
网安毕业设计简单的方向答疑
python·毕业设计·毕设
轻抚酸~19 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法
独行soc20 小时前
2025年渗透测试面试题总结-264(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
汤姆yu21 小时前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
如何原谅奋力过但无声21 小时前
TensorFlow 1.x常用函数总结(持续更新)
人工智能·python·tensorflow