Python量化交易——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比

本文主要是介绍Python量化交易——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TA-Lib中33种技术指标回测研究

  • `Python`量化交易——`TA-Lib`中33种股票择时技术指标的有效性研究
    • 为什么要做这个评测
    • 技术指标清单
    • 评测方法
    • 评测工具
      • 测试方法及评价指标
    • 期待你的意见

Python量化交易——TA-Lib中33种股票择时技术指标的有效性研究

为什么要做这个评测

技术指标是股票交易中最常用的技术手段之一,几乎所有的技术文章或股票分析文章都离不开通过MACD等各种指标来判断一支股票的买点和卖点,做量化的也会经常接触TA-Lib中提供的各种技术指标。从股评人的文章里看,似乎这些指标都有指哪打哪的能力,但是,我们既然做量化交易,就必须用数据说话,一个技术指标到底好不好,有没有用,不是靠嘴说的,是靠数据来验证的。因此,我这个系列文章的目标,就是把TA-Lib中的技术指标全都拿出来溜一溜,做一个横向大评比。俗话说,是骡子是马拉出来溜溜,通过大数据分析,我们就应该对指标的有效性有一个大致的了解。

这个评测,就是为了使用实际数据来回答两个问题:

  1. 技术指标择时到底有没有效果?
  2. 如果有效,应该选哪个技术指标效果更好?

我会写一系列的文章,每一篇评测一种技术指标,以逐步解答上面的问题。一共评测33种技术指标,文章链接在后文表格中。

技术指标清单

在这个系列文章中,将要评测下列技术指标,这些技术指标都来自TA-Lib,分为两大类:动量指标和均线交叉指标,在qteasy的内置交易策略中,产生交易信号的规则在下表中。

每个指标都依赖一定的可调参数产生效果,例如,均线交叉指标总需要两根均线,一根快均线,一根慢均线,这两根均线的历史周期是不同的。在测试过程中,我们全部使用默认参数。qteasy的策略优化模块可以使用多种算法进行参数寻优,以达到更好的择时效果。但我们这里测试结果侧重于统计结果,因此全部采用默认参数,如下表。

已经完成评测的指标结果也在表中,点击指标名称链接到相关文章。

指标英文全称中文名称交易策略说明结果:强度结果:适应度
ADXAverage Directional Movement Index平均定向运动指数ADX交易策略:
基于ADX指标判断当前趋势的强度,从而根据趋势强度产生交易信号
1, 当ADX大于25时,判断趋势向上,设定持仓比例为1
2, 当ADX介于20到25之间时,判断为中性趋势,设定持仓比例为0
3, 当ADX小于20时,判断趋势向下,设定持仓比例为-1
12.45%45.50%
APOAbsolute Price Oscillator绝对价格震荡指标APO交易策略:
基于APO指标判断当前股价变动的牛熊趋势,从而根据趋势产生交易信号
1, 当APO大于0时,判断为牛市趋势,设定持仓比例为1
2, 当ADX小于0时,判断为熊市趋势,设定持仓比例为-1
-23.3%-33%
AROONAROONAROON指标AROON交易策略:
通过计算AROON指标趋势的强弱程度输出强多/空头和弱多/空头
1, 当UP在DOWN的上方时,输出弱多头
2, 当UP位于DOWN下方时,输出弱空头
3, 当UP大于70且DOWN小于30时,输出强多头
4, 当UP小于30且DOWN大于70时,输出强空头
AROONOSCAROON OscillatorAROON震荡指标交易策略:
当AROONOSC大于0时表示价格趋势向上,反之趋势向下,绝对值大于50时表示强烈的趋势
1, 当AROONOSC大于0时,输出弱多头
2, 当AROONOSC小于0时,输出弱空头
3, 当AROONOSC大于50时,输出强多头
4, 当AROONOSC小于-50时,输出强空头
-82.1%-107%
CCICommodity Channel Index商品渠道指数交易策略:
CCI商品渠道指数被用来判断当前股价位于超卖还是超买区间,本策略使用这个指标生成投资仓位目标
1, 当CCI大于0时,输出弱多头
2, 当CCI小于0时,输出弱空头
3, 当CCI大于50时,输出强多头
4, 当CCI小于-50时,输出强空头
CMOChande Momentum Oscillator钱德动量振荡器交易策略:
CMO 是一个在-100到100之间波动的动量指标,它被用来判断当前股价位于超卖还是超买区间,本策略使用这个指标生成投资仓位目标
1, 当CMO大于0时,输出弱多头
2, 当CMO小于0时,输出弱空头
3, 当CMO大于50时,输出强多头
4, 当CMO小于-50时,输出强空头
MACDEXTExtended MACD扩展MACD指数交易策略:
本策略使用MACD指标生成持仓目标,但是与标准的MACD不同,MACDEXT的快、慢、及信号均线的类型均可选
1, 当hist>0时输出多头
2, 当hist<0时输出空头
MFIMoney Flow Index货币流向指数MFI 交易策略:
MFI指数用于判断股价属于超买还是超卖状态,本策略使用MFI指标生成交易信号
1, 当MFI>20时,持续不断产生10%买入交易信号
2, 当MFI>80时,持续不断产生30%卖出交易信号,持续卖出持仓股票
DIDirectory Indicator方向指标DI 交易策略:
DI 指标包含负方向指标与正方向指标,它们分别表示价格上行和下行的趋势强度,本策略使用±DI指标生成交易信号
1, 当+DI > -DI时,设置持仓目标为1
2, 当+DI < -DI时,设置持仓目标为-1
DMDirectional Movement方向运动指标DM交易策略:
DM 指标包含负方向运动指标(Negative Directional Movement)与正方向运动指标(Positive Directional Movement),它们分别表示价格上行和下行的趋势,本策略使用±DM指标生成交易信号
1, 当+DM > -DM时,设置持仓目标为1
2, 当+DM < -DM时,设置持仓目标为-1
3, 其余情况设置持仓目标为0
MOMmomentum indicator动量指标MOM 交易策略:
MOM 指标可以用于识别价格的上行或下行趋势的强度,当前价格高于N日前价格时,MOM为正,反之为负。
1, 当MOM > 0时,设置持仓目标为1
2, 当MOM < 0时,设置持仓目标为-1
3, 其余情况设置持仓目标为0
PPOPercentage Price Oscillator百分比价格振荡器PO 交易策略:
PPO 指标表示快慢两根移动均线之间的百分比差值,用于判断价格的变化趋势。长短均线的计算周期和均线类型均为策略参数。
1, 当PPO > 0时,设置持仓目标为1
2, 当PPO < 0时,设置持仓目标为-1
3, 其余情况设置持仓目标为0
RSIRelative Strength Index相对强度指数RSI 交易策略:
RSI 指标度量最近价格变化的幅度,从而判断目前股票属于超卖还是超买状态
1, 当RSI > ulim时,设置持仓目标为1
2, 当RSI < llim时,设置持仓目标为-1
3, 其余情况设置持仓目标为0
STOCHStochastic Indicator随机指数STOCH 交易策略:
STOCH 指标度量价格变化的动量,并且动量的大小判断价格趋势,并生成比例买卖交易信号。
1, 当k > 80时,产生逐步卖出信号,每周期卖出持有份额的30%
2, 当k < 20时,产生逐步买入信号,每周期买入总投资额的10%
STOCHFStochastic Fast Indicator快速随机指标STOCHF 交易策略:
STOCHF 指标度量价格变化的动量,与STOCH策略类似,使用快速随机指标判断价格趋势,并生成比例买卖交易信号。
1, 当k > 80时,产生逐步卖出信号,每周期卖出持有份额的30%
2, 当k < 20时,产生逐步买入信号,每周期买入总投资额的10%
STOCHRSIStochastic Relative Strength Index随机相对强弱指标STOCHRSI 交易策略:
STOCHRSI 指标度量价格变化的动量,该指标在0~1之间波动,表示相对的价格趋势强弱程度,并生成比例买卖交易信号
1, 当k > 0.8时,产生逐步卖出信号,每周期卖出持有份额的30%
2, 当k < 0.2时,产生逐步买入信号,每周期买入总投资额的10%
ULTOSCUltimate Oscillator Indicator终极振荡器指标ULTOSC 交易策略:
ULTOSC 指标通过三个不同的时间跨度计算价格动量,并根据多种不同动量之间的偏离值生成交易信号。
1, 当ULTOSC > u时,产生逐步卖出信号,每周期卖出持有份额的30%
2, 当ULTOSC < l时,产生逐步买入信号,每周期买入总投资额的10%
WILLRWilliam’s %R威廉姆斯百分比WILLR 交易策略:
WILLR 指标被用于计算股价当前处于超买还是超卖区间,并用于生成交易信号
1, 当WILLR > -l时,产生逐步卖出信号,每周期卖出持有份额的30%
2, 当WILLR < -u时,产生逐步买入信号,每周期买入总投资额的10%
MACDMoving Average Convergence & Divergence平滑异同移动平均线MACD交易策略:
1,当MACD值大于0时,设置仓位目标为1
2,当MACD值小于0时,设置仓位目标为0
DMADifference of Moving Average平行线差指标DMA交易策略:
1, DMA在AMA上方时,多头区间,即DMA线自下而上穿越AMA线后,输出为1
2, DMA在AMA下方时,空头区间,即DMA线自上而下穿越AMA线后,输出为0
TRIXTriple Exponentially Smoothed Average三重指数平滑移动平均变化率TRIX交易策略,使用股票价格的三重平滑指数移动平均价格进行多空判断:
计算价格的三重平滑指数移动平均价TRIX,再计算M日TRIX的移动平均:
1, TRIX位于MATRIX上方时,设置仓位目标为1
2, TRIX位于MATRIX下方时,设置仓位目标位-1
SAREXTParabolic SAR Extendec扩展抛物线SAR指标扩展抛物线SAR策略,当指标大于0时发出买入信号,当指标小于0时发出卖出信号
BBANDBollinger Bands布林带线指标布林带线交易策略,根据股价与布林带上轨和布林带下轨之间的关系确定多空,在价格上穿或下穿布林带线上下轨时产生交易信号。布林带线的均线类型不可选
1,当价格上穿上轨时,产生全仓买入信号
2,当价格下穿下轨时,产生全仓卖出信号
S-BBANDSoft Bollinger Bands软性布林带线指标布林带线渐进交易策略,根据股价与布林带上轨和布林带下轨之间的关系确定多空,交易信号不是一次性产生的,而是逐步渐进买入和卖出。计算BBAND,检查价格是否超过BBAND的上轨或下轨:
1,当价格大于上轨后,每天产生10%的比例买入交易信号
2,当价格低于下轨后,每天产生33%的比例卖出交易信号
DSMAD-Cross Simple Moving Average简单移动平均交叉DSMA 双均线交叉策略:
基于SMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DDEMAD-Cross Double Exponential Moving Average双重指数平滑移动平均线交叉DDEMA 双均线交叉策略:
基于DEMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DEMAD-Cross Exponential Moving Average指数平滑移动平均线交叉DEMA 双均线交叉策略:
基于EMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DKAMAD-Cross Kaufman Adaptive Moving Average考夫曼自适应移动均线交叉DKAMA 双均线交叉策略:
基于KAMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DMAMAD-Cross MESA Adaptive Moving AverageMESA自适应移动均线交叉DMAMA 双均线交叉策略:
基于MAMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DT3D-Cross Triple Exponential Moving Average三重指数平滑移动平均线交叉DT3 双均线交叉策略:
基于T3均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DTEMAD-Cross Triple Exponential Moving Average三重指数平滑移动平均线交叉DTEMA 双均线交叉策略:
基于TEMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DTRIMAD-Cross Triple Exponential Moving Average三重指数平滑移动平均线交叉DTRIMA 双均线交叉策略:
基于TRIMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例
DWMAD-Cross Weighted Moving Average加权移动平均线交叉DWMA 双均线交叉策略:
基于WMA均线计算规则生成快慢两根均线,根据快与慢两根均线的相对位置设定持仓比例

评测方法

既然是评测,那么就必须公平且广泛。我们将利用这些技术指标,使用同样的历史数据进行模拟交易,对比择时交易和一直持有的收益率差异。

每次回测的时间跨度都是5年,从2015年1月1日开始投资于一个股票,在技术指标发出买入信号时全仓买入,在发出卖出信号后全仓卖出,一直到2019年21月31日为止,记录总收益率,记做择时收益率。与之对比,我们同时考察全仓买入同一支股票并跟踪五年的收益率,记做基准收益率

在理想情况下,我们希望择时收益率应该大于基准收益率,因为我们理论上应该总是在高点卖出,在低点买进,就如同下面的交易曲线图所示(绿线是股票价格,红线是投资曲线):
在这里插入图片描述
在这里插入图片描述

但是如果策略表现不佳,也有可能在多次反复空仓中错过本身涨幅很好的股票,造成择时收益率低于基准收益。例如下面这种情况:
在这里插入图片描述
在这里插入图片描述

一个好的技术指标,理论上应该能够识别出上涨机会,从而从总体上获得比基准收益率更高的收益,不是么?但是为了避免出现统计偏差,我们需要进行大量的数据对比。

因此,我们以2015年以来的共计433支沪深300指数成分股为目标,逐一投资于这433支股票,分别记录433个五年择时收益率与五年基准收益率,来回答前面提出的问题。

评测工具

我会使用qteasy作为回测评测的工具。

qteasy是本人正在开发的一个快速量化交易工具包,使用这个工具包,可以快速灵活地生成各种量化交易策略,生成历史数据并回测策略的表现,有针对性地优化策略的性能;未来还将提供实时自动化交易功能。该项目正在开发中,Github项目地址在这里:https://github.com/shepherdpp/qteasy

qteasy利用TA-Lib中大部分动量和均线技术指标,内置了相当多的交易策略,开箱即用。因此,我们可以利用这一点,用一行代码快速创建交易策略,而且回测操作也只需要一行代码即可:

import qteasy as qt
# 创建一个基于ADX(平均定向运动指数)的交易策略
op = qt.Operator('adx', signal_type='pt')
# 设置基本参数并开始回测(回测前需要确保下载足够的历史数据,参见qteasy文档)
qt.run(op,mode=1,asset_pool='000001.SZ',  # 投资标的asset_type='E',			 # 投资标的为股票benchmark_asset='000001.SZ',  # 收益率基准,与投资标的相同benchmark_asset_type='E',invest_start='20150101',   # 回测开始日期invest_end='20191231'      # 回测结束日期)

运行上述代码,如果没有报错,可以看到下面文字形式的输出结果,以及详细回测结果分析图表:

     ====================================|                                  ||       BACK TESTING RESULT        ||                                  |====================================qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 23.5ms
time consumption for operation back looping:  361.3msinvestment starts on      2015-01-05 00:00:00
ends on                   2019-12-31 00:00:00
Total looped periods:     5.0 years.-------------operation summary:------------
Only non-empty shares are displayed, call 
"loop_result["oper_count"]" for complete operation summarySell Cnt Buy Cnt Total Long pct Short pct Empty pct
000001.SZ    29       29     58   58.7%      0.0%     41.3%   Total operation fee:     ¥    1,236.87
total investment amount: ¥  100,000.00
final value:              ¥  143,880.70
Total return:                    43.88% 
Avg Yearly return:                7.56%
Skewness:                          0.16
Kurtosis:                          9.06
Benchmark return:                57.77% 
Benchmark Yearly return:          9.57%
------strategy loop_results indicators------ 
alpha:                           -0.006
Beta:                             1.000
Sharp ratio:                      0.452
Info ratio:                      -0.032
250 day volatility:               0.232
Max drawdown:                    36.34% peak / valley:        2015-07-10 / 2015-08-25recovered on:         2017-11-22
===========END OF REPORT=============

在这里插入图片描述
qteasy给出了很多的结果分析指标,但现在我们只需要择时收益率:43.88%,以及基准收益率:57.77%。

为了列出2015年以来的所有沪深300指数成份股,可以使用下面的代码:

import qteasy as qt
stocks = qt.filter_stock_codes(index='000300.SH', date='20150101')

然后,我们就可以循环操作,逐一回测所有的成份股了:

for stk in stocks:qt.run(op,mode=1,asset_pool=stk,asset_type='E',benchmark_asset=stk,benchmark_asset_type='E',visual=False,  # 批量执行时,关闭可视化图表输出report=False,  # 批量执行时,关闭回测结果输出invest_start='20150101',invest_end='20191231',trade_log=False  # 批量执行时,关闭回测交易结果日志)

测试方法及评价指标

使用qteasy回测所有433支股票的回测结果,每次回测的时间跨度都是5年,从2015年1月1日开始投资于一个股票,在技术指标发出买入信号时全仓买入,在发出卖出信号后全仓卖出,一直到2019年21月31日为止,记录总收益率,记做择时收益率。与之对比,我们同时考察全仓买入同一支股票并跟踪五年的收益率,记做基准收益率。

我们的第一个评价指标就是平均择时收益率与平均基准收益率之差,称为指标的强度

S t r e n g t h = a v g ( 择时收益率 − 基准收益率 ) Strength = avg(择时收益率 - 基准收益率) Strength=avg(择时收益率基准收益率)

指标的强度 S t r e n g t h Strength Strength越高,代表策略获取超额收益的能力越强。因此强度越高越好

不过,这个评价指标只能代表择时收益率总体上的表现,但是有可能较高的择时收益率只是通过少数股票的超高收益得到的,其余大多数股票的择时收益率表现平平,只是平均值较高而已。就像99个穷光蛋和1个马云一平均,一百个都是百万富翁一样,因此我们不能光看平均,还得看这个策略在多少股票上跑得好,多少股票上跑得差。

因此我们还可以,根据所有回测后股票的基准收益率和择时收益率之间的关系,将所有股票分成六组:

  • 第一组:力挽狂澜,股票基准收益为负,但择时后收益为正
  • 第二组:锦上添花:股票基准收益为正,择时后收益更高,收益为正
  • 第三组:差强人意,股票基准收益为正,择时后收益降低,但仍然为正
  • 第四组:无力回天,股票基准收益为负,择时后收益有所改善,但仍然为负
  • 第五组:屋漏逢雨,股票基准收益为负,择时后收益更差,收益为负
  • 第六组:乐极生悲,股票基准收益为正,择时后反而亏损,最终收益为负

显然,上面六组中,我们希望前三组里股票越多越好,尤其是第一组和第二组,可以得到高于基准的收益率,同时希望后三组的股票越少越好,尤其是最后一组,将本来可观的收益变为负的。因此,我们第二个评价指标就是每一组里股票个数的加权平均值,称为指标的适应性

A d a p t a b i l i t y = ∑ ( w e i g h t G ∗ c o u n t G ) 6 Adaptability = \frac{\sum(weight_G * count_G)} 6 Adaptability=6(weightGcountG)

其中count_G是每一组股票的个数,而weight_G是每一组的权重,这个权重分别如下:

  • 第一组:力挽狂澜,权重为3倍该组平均收益率差
  • 第二组:锦上添花:权重为2倍该组平均收益率差
  • 第三组:差强人意,权重为1倍该组平均收益率差
  • 第四组:无力回天,权重为1倍该组平均收益率差
  • 第五组:屋漏逢雨,权重为2倍该组平均收益率差,因为平均收益率差为负,因此会降低
  • 第六组:乐极生悲,权重为3倍该组平均收益率差

指标的适应性体现了指标的适用范围,适应性强的指标,对更多的个股都能产生作用,这个指标也是越高越好。我们后面就将用强度适应性两个评价指标来对前文所列出的33个指标进行一次横向大评比,敬请期待!

期待你的意见

我们将从下一篇文章开始,逐一解释每一个技术指标,并进行433轮回测,记录择时收益率和基准收益率,并借以评价每个技术指标的有效性以及优劣。

如果您对评测方法或指标有任何意见或建议,欢迎回复或私信交流,希望大家学习交流、共同进步!

这篇关于Python量化交易——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302716

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At