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

Python量化交易:结合爬虫与TA-Lib技术指标分析

引言

量化交易(Quantitative Trading)是利用数学模型和计算机程序进行金融投资决策的方法。Python凭借其丰富的数据分析和机器学习库,已成为量化交易的主流工具之一。本文将介绍如何结合网络爬虫获取股票数据,并使用TA-Lib(Technical Analysis Library)计算技术指标,构建一个简易的量化交易分析系统。

核心内容:

  1. 使用爬虫获取股票数据**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">yfinance</font>** + **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">requests</font>**
  2. TA-Lib技术指标计算(MACD、RSI、布林带等)
  3. 策略回测与可视化**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">Backtrader</font>** + **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">Matplotlib</font>**

1. 数据获取:爬取股票数据

1.1 使用yfinance获取历史数据

**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">yfinance</font>**是Yahoo Finance的Python接口,可方便获取股票历史数据。

import yfinance as yf
import pandas as pd# 下载苹果公司(AAPL)的股票数据
data = yf.download("AAPL", start="2022-01-01", end="2023-12-31")# 查看数据结构
print(data.head())

输出示例:

Open       High        Low      Close  Adj Close    Volume
Date                                                                     
2022-01-03  177.830002  182.880005  177.710007  182.009995  181.483673  104487900
2022-01-04  182.630005  182.940002  179.119995  179.699997  179.192230   99310400
2022-01-05  179.610001  180.169998  174.639999  174.919998  174.438995   94537600
2022-01-06  172.699997  175.300003  171.639999  172.000000  171.531570   96904000
2022-01-07  172.889999  174.139999  171.029999  172.169998  171.701080   86709100

2. 技术指标计算:TA-Lib实战

2.1 安装TA-Lib

2.2 计算常用技术指标

(1) 移动平均线(MA)
import talib# 计算5日、20日、60日均线
data['MA5'] = talib.MA(data['Close'], timeperiod=5)
data['MA20'] = talib.MA(data['Close'], timeperiod=20)
data['MA60'] = talib.MA(data['Close'], timeperiod=60)
(2) 相对强弱指数(RSI)
# 计算14日RSI
data['RSI'] = talib.RSI(data['Close'], timeperiod=14)
(3) MACD(异同移动平均线)
# 计算MACD(默认参数:12, 26, 9)
data['MACD'], data['MACD_Signal'], data['MACD_Hist'] = talib.MACD(data['Close'])
(4) 布林带(Bollinger Bands)
# 计算布林带(20日均线 ± 2倍标准差)
data['Upper Band'], data['Middle Band'], data['Lower Band'] = talib.BBANDS(data['Close'], timeperiod=20)

指标可视化:

import matplotlib.pyplot as pltplt.figure(figsize=(12, 8))
plt.plot(data.index, data['Close'], label='Close Price', alpha=0.7)
plt.plot(data.index, data['MA20'], label='20-Day MA', color='orange')
plt.plot(data.index, data['Upper Band'], label='Upper Band', linestyle='--', color='red')
plt.plot(data.index, data['Lower Band'], label='Lower Band', linestyle='--', color='green')
plt.title('AAPL Stock Price with Technical Indicators')
plt.legend()
plt.grid(True)
plt.show()

3. 量化策略回测(Backtrader实战)

3.2 实现双均线交易策略

import backtrader as btclass SmaCrossStrategy(bt.Strategy):params = (('fast', 5), ('slow', 20))  # 短期5日均线,长期20日均线def __init__(self):self.sma_fast = bt.indicators.SMA(period=self.p.fast)self.sma_slow = bt.indicators.SMA(period=self.p.slow)def next(self):# 金叉买入if self.sma_fast[0] > self.sma_slow[0] and self.sma_fast[-1] <= self.sma_slow[-1]:self.buy()# 死叉卖出elif self.sma_fast[0] < self.sma_slow[0] and self.sma_fast[-1] >= self.sma_slow[-1]:self.sell()# 创建回测引擎
cerebro = bt.Cerebro()
datafeed = bt.feeds.PandasData(dataname=data)
cerebro.adddata(datafeed)
cerebro.addstrategy(SmaCrossStrategy)
cerebro.broker.set_cash(100000)  # 初始资金10万美元# 运行回测
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())# 可视化回测结果
cerebro.plot(style='candlestick')

输出示例:

Starting Portfolio Value: 100000.00
Final Portfolio Value: 112450.50

4. 优化与扩展

4.1 策略优化(网格搜索参数)

from backtrader.analyzers import SharpeRatio# 测试不同均线组合
for fast_period in [5, 10, 15]:for slow_period in [20, 30, 50]:cerebro = bt.Cerebro()datafeed = bt.feeds.PandasData(dataname=data)cerebro.adddata(datafeed)cerebro.addstrategy(SmaCrossStrategy, fast=fast_period, slow=slow_period)cerebro.addanalyzer(SharpeRatio, _name='sharpe')results = cerebro.run()sharpe = results[0].analyzers.sharpe.get_analysis()['sharperatio']print(f"Fast={fast_period}, Slow={slow_period}, Sharpe Ratio={sharpe:.2f}")

4.2 结合机器学习(LSTM预测股价)

from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense# 数据标准化
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1, 1))# 构建LSTM模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(60, 1)))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')# 训练模型(示例代码,需调整)
# model.fit(X_train, y_train, epochs=10, batch_size=32)

5. 总结

本文实现了以下核心功能:

  1. 数据获取:使用**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">yfinance</font>**和爬虫抓取股票数据。
  2. 技术分析:利用**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">TA-Lib</font>**计算MACD、RSI、布林带等指标。
  3. 策略回测:通过**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">Backtrader</font>**验证双均线策略的盈利能力。
  4. 优化扩展:参数优化与机器学习结合。
http://www.xdnf.cn/news/1329463.html

相关文章:

  • Vue2.x核心技术与实战(二)
  • 力扣hot100:三数之和(排序 + 双指针法)(15)
  • Android Cordova 开发 - Cordova 嵌入 Android
  • 谷歌为什么要将Android的页面大小(Page Size)从传统的4KB升级至16KB
  • Android RxJava数据库操作:响应式改造实践
  • Android-ContentProvider的跨应用通信学习总结
  • 2943. 最大化网格图中正方形空洞的面积
  • MCP(模型上下文协议):是否是 AI 基础设施中缺失的标准?
  • 电源、电流及功率实测
  • 【图像算法 - 18】慧眼辨良莠:基于深度学习与OpenCV的麦田杂草智能识别检测系统(附完整代码)
  • RabbitMQ:SpringAMQP 入门案例
  • 【自动驾驶】8月 端到端自动驾驶算法论文(arxiv20250819)
  • 最新研究进展:2023-2025年神经机器翻译突破性成果
  • 【LeetCode】17. 电话号码的字母组合
  • idea中如何设置文件的编码格式
  • 【撸靶笔记】第七关:GET - Dump into outfile - String
  • Python爬虫实战:研究ICP-Checker,构建ICP 备案信息自动查询系统
  • 【MySQL】--- 库表操作
  • 字节开源了一款具备长期记忆能力的多模态智能体:M3-Agent
  • 【数据结构】堆和二叉树详解(下)
  • 构建自主企业:AgenticOps 的技术蓝图
  • 学习嵌入式的第二十一天——数据结构——链表
  • 可以一键生成PPT的AI PPT工具(最新整理)
  • 从机器视觉到图像识别:计算机视觉的多维探索
  • 图论\dp 两题
  • Matplotlib数据可视化实战:Matplotlib基础与实践-快速上手数据可视化
  • 数据结构-栈和队列
  • kubeadm部署k8s集群环境搭建
  • consul-基础概念
  • 信号以及共享内存