当前位置: 首页 > news >正文

双均线量化交易策略指南

策略原理

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

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

交易信号生成规则

当 5日线 > 20日线 → 买入信号
当 5日线 < 20日线 → 卖出信号

Python实现模块

1. 数据获取模块

import yfinance as yfdef 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. 策略计算模块

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. 回测引擎

def backtest_strategy(data, initial_capital=1000000):"""策略回测模块参数:initial_capital -- 初始资金(默认100万)"""position = 0capital_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 = 0else:capital_curve.append(position * data['Close'][i] if position else capital_curve[-1])return pd.Series(capital_curve, index=data.index)

可视化分析

import matplotlib.pyplot as pltplt.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. 多品种回测验证策略普适性

使用示例

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}%")

注意事项

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

  • 避免在开盘价跳空时执行信号
  • 不同品种参数需重新优化
  • 回测存在过拟合风险
  • 需定期进行策略再平衡

相关文章:

  • 嵌入式学习Day27
  • 八股碎碎念02——Synchronized
  • “可观、可测、可调、可控“,四可功能如何让光伏电站变身电网“优等生“?
  • 2025年中级社会工作者备考精选练习题
  • 看海回测系统回测过程
  • 手写一个简单的线程池
  • 2025版CansCodeAPI管理系统:免费下载,全新升级!
  • Navicat 是只能通过查看数据的方式知晓是否执行吗?是否有日志作为提示?
  • C语言数据结构-单向链表
  • yolov5 安卓运行
  • 未授权访问漏洞利用链实战总结
  • 【LLM】使用 Ollama 和 RAGFlow 进行本地模型搭建知识库问答
  • 零代码构建 RAG 私有知识问答服务
  • 写起来比较复杂的深搜题目
  • 探索微观世界的“度量衡”:显微测量仪器解析
  • 7.6/Q1,GBD数据库最新文章解读
  • 【计网】五六章习题测试
  • 《牛客》数组中出现次数超过一半的数字
  • 班迪录屏--解决视频剪辑时声音和画面不同步的问题
  • 深度“求索”:DeepSeek+Dify构建个人知识库
  • 做一个彩票网站需要怎么做/企业网站建设方案
  • 做一个网站需要投入多少钱/一站式软文发布推广平台
  • 手表网站 云/百度一下官网手机版
  • 腾讯企业邮箱登录入口免费版/简述seo和sem的区别与联系
  • 蛋糕网站模板/随州网络推广
  • 做图素材的网站有哪些/新媒体运营是做什么