双均线量化交易策略指南

策略原理

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

注意事项

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

  • 避免在开盘价跳空时执行信号
  • 不同品种参数需重新优化
  • 回测存在过拟合风险
  • 需定期进行策略再平衡
相关推荐
wj3055853781 天前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
星寂樱易李1 天前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
qingfeng154151 天前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
彦为君1 天前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
PILIPALAPENG1 天前
Python 语法速成指南:前端开发者视角(JS 类比版)
前端·人工智能·python
用户8356290780511 天前
Python 操作 PowerPoint 页眉与页脚指南
后端·python
枫叶林FYL1 天前
项目九:异步高性能爬虫与数据采集中枢 —— 基于 Crawl<sub>4</sub>AI 与 Playwright 的现代化数据采集平台 项目总览
爬虫·python·深度学习·wpf
猫猫的小茶馆1 天前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
Miss_min1 天前
128K长序列数据生成
开发语言·python·深度学习