Top Related Projects
Python wrapper for TA-Lib (http://ta-lib.org/).
Common financial technical indicators implemented in Pandas.
Technical Analysis Indicators - Pandas TA is an easy to use Python 3 Pandas Extension with 150+ Indicators
Zipline, a Pythonic Algorithmic Trading Library
Quick Overview
The bukosabino/ta repository is a Python library for technical analysis of financial markets. It provides a comprehensive set of technical indicators and utility functions for analyzing stock market data, cryptocurrencies, and other financial instruments. The library is designed to be easy to use and integrate with popular data analysis tools like pandas.
Pros
- Extensive collection of technical indicators and overlays
- Built on top of pandas, allowing for easy integration with existing data analysis workflows
- Well-documented with clear examples and explanations
- Actively maintained and regularly updated
Cons
- May have a steeper learning curve for users unfamiliar with technical analysis concepts
- Performance can be slower for large datasets compared to some specialized libraries
- Limited built-in visualization capabilities, requiring additional libraries for plotting
- Some advanced or niche indicators may not be included
Code Examples
- Calculating Simple Moving Average (SMA):
import pandas as pd
import ta
# Assuming 'df' is a pandas DataFrame with 'close' price column
df['SMA_20'] = ta.trend.sma_indicator(df['close'], window=20)
- Computing Relative Strength Index (RSI):
# Calculate RSI with a 14-period window
df['RSI_14'] = ta.momentum.rsi(df['close'], window=14)
- Adding multiple indicators to a DataFrame:
# Add several indicators to the DataFrame
df = ta.add_all_ta_features(
df, open="open", high="high", low="low", close="close", volume="volume"
)
Getting Started
To get started with the ta library, follow these steps:
-
Install the library using pip:
pip install ta
-
Import the library and use it with your data:
import pandas as pd import ta # Load your data into a pandas DataFrame df = pd.read_csv('your_data.csv') # Calculate a simple moving average df['SMA_20'] = ta.trend.sma_indicator(df['close'], window=20) # Add all available indicators df = ta.add_all_ta_features( df, open="open", high="high", low="low", close="close", volume="volume" ) # Display the results print(df.head())
This will give you a basic setup to start using the ta library with your financial data.
Competitor Comparisons
Python wrapper for TA-Lib (http://ta-lib.org/).
Pros of ta-lib-python
- Extensive library with over 150 technical indicators and functions
- Highly optimized C implementation for faster performance
- Well-established and widely used in the financial industry
Cons of ta-lib-python
- Requires compilation and installation of C libraries, which can be complex
- Less frequently updated compared to ta
- Steeper learning curve for beginners
Code Comparison
ta-lib-python:
import talib
import numpy as np
close = np.random.random(100)
output = talib.SMA(close, timeperiod=10)
ta:
import pandas as pd
from ta import add_all_ta_features
df = pd.DataFrame()
df = add_all_ta_features(df, "open", "high", "low", "close", "volume")
Summary
ta-lib-python offers a comprehensive set of technical indicators with optimized performance, making it suitable for professional use. However, its installation process can be challenging, and updates are less frequent.
ta provides a more user-friendly approach with easier installation and regular updates. It's built on top of pandas, making it convenient for data manipulation. While it may not have as many indicators as ta-lib-python, it's more accessible for beginners and those who prefer a pure Python implementation.
The choice between the two depends on specific project requirements, performance needs, and user expertise.
Common financial technical indicators implemented in Pandas.
Pros of finta
- Simpler API and easier to use for beginners
- Faster execution speed for some indicators
- More compact codebase, potentially easier to maintain
Cons of finta
- Fewer technical indicators available compared to ta
- Less active development and community support
- Limited documentation and examples
Code Comparison
finta:
from finta import TA
close = df['close']
sma = TA.SMA(close, period=14)
ta:
from ta.trend import SMAIndicator
close = df['close']
sma_indicator = SMAIndicator(close=close, window=14)
sma = sma_indicator.sma_indicator()
Both libraries provide similar functionality for calculating technical indicators, but finta offers a more straightforward API. The ta library requires creating an indicator object before calling the method, while finta allows direct function calls.
finta is generally more concise and easier to use for simple calculations, making it a good choice for beginners or quick prototyping. However, ta offers a wider range of indicators and more customization options, which may be preferable for advanced users or complex analysis tasks.
The choice between these libraries depends on the specific requirements of your project, such as the need for particular indicators, performance considerations, and the level of community support desired.
Technical Analysis Indicators - Pandas TA is an easy to use Python 3 Pandas Extension with 150+ Indicators
Pros of pandas-ta
- More extensive collection of technical indicators (130+ vs 32 in ta)
- Better performance due to optimized Cython implementations
- More active development and community support
Cons of pandas-ta
- Steeper learning curve due to more complex API
- Larger package size, which may impact installation and load times
Code Comparison
ta:
import ta
df['rsi'] = ta.momentum.rsi(df['close'])
df['macd'] = ta.trend.macd(df['close'])
pandas-ta:
import pandas_ta as ta
df.ta.rsi(close='close', append=True)
df.ta.macd(close='close', append=True)
Both libraries extend pandas DataFrame functionality, but pandas-ta offers a more concise syntax through the ta
accessor. While ta requires separate function calls for each indicator, pandas-ta allows chaining multiple indicators in a single line:
df.ta.rsi(append=True).ta.macd(append=True)
This approach can lead to more readable and maintainable code, especially when working with multiple indicators. However, the simpler API of ta may be preferable for users who only need basic functionality or are new to technical analysis.
Zipline, a Pythonic Algorithmic Trading Library
Pros of Zipline
- More comprehensive backtesting and live trading capabilities
- Larger community and ecosystem of tools/integrations
- Better documentation and learning resources
Cons of Zipline
- Steeper learning curve for beginners
- Heavier and more complex setup process
- Less frequently updated (last commit over 2 years ago)
Code Comparison
Zipline example:
from zipline.api import order, record, symbol
def initialize(context):
context.asset = symbol('AAPL')
def handle_data(context, data):
order(context.asset, 10)
record(AAPL=data.current(context.asset, 'price'))
TA example:
import pandas as pd
import ta
df = pd.read_csv('AAPL.csv', parse_dates=['Date'])
df['SMA'] = ta.trend.sma_indicator(df['Close'], window=14)
df['RSI'] = ta.momentum.rsi(df['Close'], window=14)
Zipline offers a more structured approach for building complete trading strategies, while TA focuses on providing technical analysis indicators that can be easily integrated into existing workflows.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Technical Analysis Library in Python
It is a Technical Analysis library useful to do feature engineering from financial time series datasets (Open, Close, High, Low, Volume). It is built on Pandas and Numpy.
The library has implemented 43 indicators:
Volume
ID | Name | Class | defs |
---|---|---|---|
1 | Money Flow Index (MFI) | MFIIndicator | money_flow_index |
2 | Accumulation/Distribution Index (ADI) | AccDistIndexIndicator | acc_dist_index |
3 | On-Balance Volume (OBV) | OnBalanceVolumeIndicator | on_balance_volume |
4 | Chaikin Money Flow (CMF) | ChaikinMoneyFlowIndicator | chaikin_money_flow |
5 | Force Index (FI) | ForceIndexIndicator | force_index |
6 | Ease of Movement (EoM, EMV) | EaseOfMovementIndicator | ease_of_movement sma_ease_of_movement |
7 | Volume-price Trend (VPT) | VolumePriceTrendIndicator | volume_price_trend |
8 | Negative Volume Index (NVI) | NegativeVolumeIndexIndicator | negative_volume_index |
9 | Volume Weighted Average Price (VWAP) | VolumeWeightedAveragePrice | volume_weighted_average_price |
Volatility
ID | Name | Class | defs |
---|---|---|---|
10 | Average True Range (ATR) | AverageTrueRange | average_true_range |
11 | Bollinger Bands (BB) | BollingerBands | bollinger_hband bollinger_hband_indicator bollinger_lband bollinger_lband_indicator bollinger_mavg bollinger_pband bollinger_wband |
12 | Keltner Channel (KC) | KeltnerChannel | keltner_channel_hband keltner_channel_hband_indicator keltner_channel_lband keltner_channel_lband_indicator keltner_channel_mband keltner_channel_pband keltner_channel_wband |
13 | Donchian Channel (DC) | DonchianChannel | donchian_channel_hband donchian_channel_lband donchian_channel_mban donchian_channel_pband donchian_channel_wband |
14 | Ulcer Index (UI) | UlcerIndex | ulcer_index |
Trend
ID | Name | Class | defs |
---|---|---|---|
15 | Simple Moving Average (SMA) | SMAIndicator | sma_indicator |
16 | Exponential Moving Average (EMA) | EMAIndicator | ema_indicator |
17 | Weighted Moving Average (WMA) | WMAIndicator | wma_indicator |
18 | Moving Average Convergence Divergence (MACD) | MACD | macd macd_diff macd_signal |
19 | Average Directional Movement Index (ADX) | ADXIndicator | adx adx_neg adx_pos |
20 | Vortex Indicator (VI) | VortexIndicator | vortex_indicator_neg vortex_indicator_pos |
21 | Trix (TRIX) | TRIXIndicator | trix |
22 | Mass Index (MI) | MassIndex | mass_index |
23 | Commodity Channel Index (CCI) | CCIIndicator | cci |
24 | Detrended Price Oscillator (DPO) | DPOIndicator | dpo |
25 | KST Oscillator (KST) | KSTIndicator | kst kst_sig |
26 | Ichimoku KinkÅ HyÅ (Ichimoku) | IchimokuIndicator | ichimoku_a ichimoku_b ichimoku_base_line ichimoku_conversion_line |
27 | Parabolic Stop And Reverse (Parabolic SAR) | PSARIndicator | psar_down psar_down_indicator psar_up psar_up_indicator |
28 | Schaff Trend Cycle (STC) | STCIndicator | stc |
29 | Aroon Indicator | AroonIndicator | aroon_down aroon_up |
Momentum
ID | Name | Class | defs |
---|---|---|---|
30 | Relative Strength Index (RSI) | RSIIndicator | rsi |
31 | Stochastic RSI (SRSI) | StochRSIIndicator | stochrsi stochrsi_d stochrsi_k |
32 | True strength index (TSI) | TSIIndicator | tsi |
33 | Ultimate Oscillator (UO) | UltimateOscillator | ultimate_oscillator |
34 | Stochastic Oscillator (SR) | StochasticOscillator | stoch stoch_signal |
35 | Williams %R (WR) | WilliamsRIndicator | williams_r |
36 | Awesome Oscillator (AO) | AwesomeOscillatorIndicator | awesome_oscillator |
37 | Kaufman's Adaptive Moving Average (KAMA) | KAMAIndicator | kama |
38 | Rate of Change (ROC) | ROCIndicator | roc |
39 | Percentage Price Oscillator (PPO) | PercentagePriceOscillator | ppo ppo_hist ppo_signal |
40 | Percentage Volume Oscillator (PVO) | PercentageVolumeOscillator | pvo pvo_hist pvo_signal |
Others
ID | Name | Class | defs |
---|---|---|---|
41 | Daily Return (DR) | DailyReturnIndicator | daily_return |
42 | Daily Log Return (DLR) | DailyLogReturnIndicator | daily_log_return |
43 | Cumulative Return (CR) | CumulativeReturnIndicator | cumulative_return |
Documentation
https://technical-analysis-library-in-python.readthedocs.io/en/latest/
Motivation to use
How to use (Python 3)
$ pip install --upgrade ta
To use this library you should have a financial time series dataset including Timestamp
, Open
, High
, Low
, Close
and Volume
columns.
You should clean or fill NaN values in your dataset before add technical analysis features.
You can get code examples in examples_to_use folder.
You can visualize the features in this notebook.
Example adding all features
import pandas as pd
from ta import add_all_ta_features
from ta.utils import dropna
# Load datas
df = pd.read_csv('ta/tests/data/datas.csv', sep=',')
# Clean NaN values
df = dropna(df)
# Add all ta features
df = add_all_ta_features(
df, open="Open", high="High", low="Low", close="Close", volume="Volume_BTC")
Example adding particular feature
import pandas as pd
from ta.utils import dropna
from ta.volatility import BollingerBands
# Load datas
df = pd.read_csv('ta/tests/data/datas.csv', sep=',')
# Clean NaN values
df = dropna(df)
# Initialize Bollinger Bands Indicator
indicator_bb = BollingerBands(close=df["Close"], window=20, window_dev=2)
# Add Bollinger Bands features
df['bb_bbm'] = indicator_bb.bollinger_mavg()
df['bb_bbh'] = indicator_bb.bollinger_hband()
df['bb_bbl'] = indicator_bb.bollinger_lband()
# Add Bollinger Band high indicator
df['bb_bbhi'] = indicator_bb.bollinger_hband_indicator()
# Add Bollinger Band low indicator
df['bb_bbli'] = indicator_bb.bollinger_lband_indicator()
# Add Width Size Bollinger Bands
df['bb_bbw'] = indicator_bb.bollinger_wband()
# Add Percentage Bollinger Bands
df['bb_bbp'] = indicator_bb.bollinger_pband()
Deploy and develop (for developers)
$ git clone https://github.com/bukosabino/ta.git
$ cd ta
$ pip install -r requirements-play.txt
$ make test
Sponsor
Thank you to OpenSistemas! It is because of your contribution that I am able to continue the development of this open source library.
Based on
- https://en.wikipedia.org/wiki/Technical_analysis
- https://pandas.pydata.org
- https://github.com/FreddieWitherden/ta
- https://github.com/femtotrader/pandas_talib
In Progress
- Automated tests for all the indicators.
TODO
- Use NumExpr to speed up the NumPy/Pandas operations? Article Motivation
- Add more technical analysis features.
- Wrapper to get financial data.
- Use of the Pandas multi-indexing techniques to calculate several indicators at the same time.
- Use Plotly/Streamlit to visualize features
Changelog
Check the changelog of project.
Donation
If you think ta
library help you, please consider buying me a coffee.
Credits
Developed by DarÃo López Padial (aka Bukosabino) and other contributors.
Please, let me know about any comment or feedback.
Also, I am a software engineer freelance focused on Data Science using Python tools such as Pandas, Scikit-Learn, Backtrader, Zipline or Catalyst. Don't hesitate to contact me if you need to develop something related with this library, Python, Technical Analysis, AlgoTrading, Machine Learning, etc.
Top Related Projects
Python wrapper for TA-Lib (http://ta-lib.org/).
Common financial technical indicators implemented in Pandas.
Technical Analysis Indicators - Pandas TA is an easy to use Python 3 Pandas Extension with 150+ Indicators
Zipline, a Pythonic Algorithmic Trading Library
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot