TA-Lib技术分析库简明教程

在本文中,我们将介绍如何使用TA_Lib在 Python 中生成一些指标,你可以在交易机器人中使用它们,或者只是补充你的交易策略。

TA-Lib技术分析库简明教程
一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | AVAX | FTM | OK
技术分析是一种交易学科,用于通过分析从交易活动中收集的统计趋势(例如价格变动和交易量)来评估投资并识别交易机会——Investopedia

由于人们对自动或“AI”交易机器人的兴趣增加,技术分析近年来越来越受欢迎。它是一种识别股票价格趋势的工具,尽管它可能是一个有争议的话题。有些人可能会将它比作股票交易的星座,而另一些人则反驳说它是一种利用市场机制的技术。

我认为它介于两者之间,如果使用得当,它是一种有用的工具,但需要充分理解,而不是盲目遵循。

在本文中,我们将介绍如何在 Python 中生成一些指标,你可以在交易机器人中使用它们,或者只是补充你的交易策略。

虽然技术分析可以让我们深入了解价格的动量,以确定阻力点或良好的买入机会,但它并不是一个可以 100% 确定价格走向的魔法球。不要指望技术分析能准确地告诉你 12 个月后股票的价格,在尝试将其用于交易策略时,了解其目的和局限性是最重要的。

1、安装 TA-Lib

与标准 Python 包相比,Ta-Lib 的安装可能有点棘手。

$ python -m pip install TA-Lib

理论上,它可以像任何其他包一样使用 pip 安装,但是,就我而言,我首先必须使用 vs2024 x64 本机工具命令终端将 Ta-Lib 安装到我的机器上。这还需要安装 vscode,这不会花太长时间(请注意,这是针对 Windows 的,MAC 或 Linux 过程会有所不同)。

有关安装说明的完整细分,请查看官方文档

2、收集数据

与往常一样,在启动 Python 项目时,我们应该导入我们将要使用的库。对于这项工作,我们将使用 yfinance 来获取财务数据,以及 talib 来分析数据。

# Importing required libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
import talib as ta

在此示例中,我将使用 Microsoft 过去一年的数据,但你可以通过更改 tickertime_period 变量来调整股票和时间长度。

ticker = 'MSFT'
time_period = '1y'

msft = yf.Ticker(ticker)
data = msft.history(period=time_period)

# Display the first few rows of the data
print(data.head())

这将为我们留下以下数据,每行代表过去一年的交易日。你可以深入研究其中很多内容,但我们关心的两列是收盘价和成交量,因为这些是我们将用来计算技术指标的数据。

至于如何获取我们的技术分析数据,这相对简单,我们需要首先启动一些空列表并循环遍历收盘价和成交量数据。

一旦我们完成了一些轻量级类型转换,得到了包含成交量和收盘价浮点数的 numpy 数组,我们就需要等到至少有 20 天的数据才能开始计算。

然后我们将这些数据传递给不同的 ta_lib 函数,并将结果格式化为数据框。

data_closes = []
data_volume = []
ret_list = []
for close, volume in zip(data['Close'], data['Volume']):
    # Keep track of the closing prices and volumes
    data_volume.append(volume)
    data_closes.append(close)
    
    # Convert the lists to numpy arrays
    int_data = [float(x) for x in data_volume]
    np_volume = np.array(int_data)
    
    float_data = [float(x) for x in data_closes]
    np_closes = np.array(float_data)
    
    # Once we have some data to analyze    
    if len(np_closes) > 20 and len(np_volume) > 20:
        
        # Calculate RSI (Relative Strength Index)
        RSI = ta.RSI(np_closes, timeperiod = 14) # Calculate RSI for last 14 closing prices
        
        # Calculate Moving Averages
        SMA = ta.SMA(np_closes, timeperiod = 20) # Calculate Simple Moving Average for last 20 closing prices
        EMA = ta.EMA(np_closes, timeperiod = 20) # Calculate Exponential Moving Average for last 20 closing prices
        
        # Calculate MACD (Moving Average Convergence Divergence)
        MACD, MACDsignal, MACDhist = ta.MACD(np_closes, fastperiod=12, slowperiod=26, signalperiod=9)
        
        # Bollinger Bands
        upperband, middleband, lowerband = ta.BBANDS(np_closes, timeperiod=18, nbdevup=2, nbdevdn=2, matype=0)
        
        # OBV
        OBV = ta.OBV(np_closes, np_volume)
        OBV_EMA = ta.EMA(OBV, timeperiod=18)

        ret_list.append([close, volume, RSI[-1], SMA[-1], EMA[-1], MACD[-1], MACDsignal[-1], MACDhist[-1], upperband[-1], middleband[-1], lowerband[-1], OBV[-1], OBV_EMA[-1]])
        # Display the first few rows of the data with the new technical indicators
        # print(data.head())
ta_df = pd.DataFrame(ret_list, columns=['Close', 'Volume', 'RSI', 'SMA', 'EMA', 'MACD', 'MACDsignal', 'MACDhist', 'upperband', 'middleband', 'lowerband', 'OBV', 'OBV_EMA'])

ta_df

我们已经收集了数据并计算了技术指标,但它们意味着什么呢?

3、移动平均线

移动平均线看起来像是一条贯穿图表价格的线。本质上,它告诉我们的是不断更新的平均价格,这让我们可以大致了解价格的走向,而不会受到随机短期波动的影响。

我们计算了两条这样的线,一条是 SMA,一条是 EMA,SMA 如上所述。EMA(我们图表上的绿线)的工作原理类似,但它确实对最近的价格变化给予了一些权重,这就是为什么当价格急剧上涨或下跌时,你可以看到它的变化略微更大。

我们的移动平均线是一个很好的基准,但它们本身可能无法告诉我们太多信息。然而,熟悉这些线也有助于我们理解其他一些技术指标。

4、MACD

移动平均线收敛/发散使用与上面描述的类似的信号线。为此,我们通过从 12 周期 EMA 中减去 26 周期 EMA 来计算 MACD 线。然后,我们创建另一条 9 天 EMA 线,称为信号线,该线与该线重叠。对于此图表,我们还添加了 MACD 直方图。

内容很多,其确切机制有点超出本文的范围。为了快速了解查看此图表时需要了解的内容,当这两条线交叉时,这被认为是趋势反转的信号。因此,如果股票价格一直在上涨,而两条线交叉,则表明价格可能很快开始下跌。直方图反映了这一点,当它高于 0 时,我们会看到价格趋势向上,而当它低于 0 时则相反。

5、RSI

相对强弱指数通过显示振荡器向我们显示股票的动量,本质上向我们显示股票何时在 RSI 的某个水平之上或之下移动。超过某个水平(通常为 60-80)可能表明股票“超买”,价格可能很快下跌,而低于某个水平(通常为 40-20)则表明“超卖”,这表明价格有可能回升。

我们在结果中看到了这一理论的体现,查看图表中价格进入“超买”状态的突出显示区域,我们可以看到价格持续下跌。

6、布林带

布林带与 RSI 类似,它们试图发现“超买”或“超卖”情况,并假设随后价格会回调至更接近平均值。与 RSI 的主要区别在于,衡量价格何时达到这些条件的指标不断变化,因为它们遵循标准差。

与上一张图表一样,我们看到了类似的趋势,即当价格达到波段极限时,价格通常会出现更接近平均值的价格回调。与 RSI 相比,有趣的是,有时我们会发现“超卖”情况,而 RSI 从未发现过这种情况。这种情况凸显了为什么同时使用多种类型的 TA 而不是仅仅依赖一种信号很重要。

7、平衡成交量

与之前的指标不同,OBV 关注的是成交量而不是价格。其原理围绕着成交量先于价格变动的概念。这个想法是,成交量可以洞察价格趋势的强弱。当 OBV 上升时,表明成交量正在流入证券,表明看涨情绪。相反,如果 OBV 下降,则表明成交量正在流出,表明看跌情绪。

我们可以看到,图表中的 OBV 线与之前图表中的实际价格线非常相似,并且 OBV EMA 线遵循与我们初始 EMA 线类似的路径。

8、结束语

你现在应该对如何在 Python 中计算和分析技术指标有基本的了解。这是一个深奥的主题,因此如果你有兴趣应用这些技术,应该将其作为你进行更多研究的基础。


原文链接:Quick Start Guide: Introduction to Technical Analysis in Python Using Ta-Lib

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。
通过 NowPayments 打赏