当前位置: 首页 > 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.dtcms.com/a/339046.html

相关文章:

  • Matplotlib数据可视化实战:Matplotlib子图布局与管理入门
  • Ansible 角色管理指南
  • Pandas数据处理与分析实战:Pandas数据处理与Matplotlib可视化入门
  • 0819 使用IP多路复用实现TCP并发服务器
  • Tomcat 的核心脚本catalina.sh 和 startup.sh的关系
  • 陪诊小程序系统开发:开启智慧就医新时代
  • CNN 在故障诊断中的应用:原理、案例与优势
  • BEV:隐式相机视角转换-----BEVFormer
  • 简单实现监听redis的Key过期事件
  • Shopee本土店账号安全运营:规避封禁风险的多维策略
  • 微服务-08.微服务拆分-拆分商品服务
  • 什么是强化学习
  • JMeter高级性能测试训练营 – 从入门到企业级实战
  • pytest高级用法之插件开发
  • Quartus Prime 18.1网盘资源下载与安装指南
  • 从线性回归到神经网络到自注意力机制 —— 激活函数与参数的演进
  • Berry Material React TypeScript 管理后台使用教程 v0.1.0
  • 手写C++ string类实现详解
  • React 新拟态登录页面使用教程
  • 星图云开发者平台新功能速递 | 微服务管理器:无缝整合异构服务,释放云原生开发潜能
  • C++入门自学Day14-- Stack和Queue的自实现(适配器)
  • [Android] 显示的内容被导航栏这挡住
  • STM32 定时器(输出模式)
  • 开源游戏引擎Bevy 和 Godot
  • 开源AI工具Midscene.js
  • 第9章 React与TypeScript
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(17):文法+单词第5回3-复习
  • 指针的应用学习日记
  • GraphQL 与 REST 在微服务架构中的对比与设计实践
  • RadioIrqProcess函数详细分析与流程图