# FinTA (Financial Technical Analysis) [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) [![PyPI](https://img.shields.io/pypi/v/finta.svg?style=flat-square)](https://pypi.python.org/pypi/finta/) [![Downloads](https://pepy.tech/badge/finta/month)](https://pepy.tech/project/finta/month) [![](https://img.shields.io/badge/python-3.6+-blue.svg)](https://www.python.org/download/releases/3.6.0/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) [![Build Status](https://travis-ci.org/peerchemist/finta.svg?branch=master)](https://travis-ci.org/peerchemist/finta) [![Patrons](https://img.shields.io/liberapay/patrons/peerchemist.svg?logo=liberapay)](https://img.shields.io/liberapay/patrons/peerchemist.svg?logo=liberapay) [![Bitcoin Donate](https://badgen.net/badge/Bitcoin/Donate/F19537?icon=bitcoin)](https://blockstream.info/address/3Jp1RjKZdQjb1Ui4o5MVqhfch3rD1xUynn) [![Peercoin Donate](https://badgen.net/badge/peercoin/Donate/green?icon=https://raw.githubusercontent.com/peercoin/media/84710cca6c3c8d2d79676e5260cc8d1cd729a427/Peercoin%202020%20Logo%20Files/01.%20Icon%20Only/Inside%20Circle/Transparent/Green%20Icon/peercoin-icon-green-transparent.svg)](https://chainz.cryptoid.info/ppc/address.dws?PWzpZ5igHDSA76gNZ9DwE7aeCbfLsZbDkJ) Common financial technical indicators implemented in Pandas. ![example](examples/plot.png) *This is work in progress, bugs are expected and results of some indicators may not be accurate.* ## Supported indicators: Finta supports over 80 trading indicators: ``` * Simple Moving Average 'SMA' * Simple Moving Median 'SMM' * Smoothed Simple Moving Average 'SSMA' * Exponential Moving Average 'EMA' * Double Exponential Moving Average 'DEMA' * Triple Exponential Moving Average 'TEMA' * Triangular Moving Average 'TRIMA' * Triple Exponential Moving Average Oscillator 'TRIX' * Volume Adjusted Moving Average 'VAMA' * Kaufman Efficiency Indicator 'ER' * Kaufman's Adaptive Moving Average 'KAMA' * Zero Lag Exponential Moving Average 'ZLEMA' * Weighted Moving Average 'WMA' * Hull Moving Average 'HMA' * Elastic Volume Moving Average 'EVWMA' * Volume Weighted Average Price 'VWAP' * Smoothed Moving Average 'SMMA' * Fractal Adaptive Moving Average 'FRAMA' * Moving Average Convergence Divergence 'MACD' * Percentage Price Oscillator 'PPO' * Volume-Weighted MACD 'VW_MACD' * Elastic-Volume weighted MACD 'EV_MACD' * Market Momentum 'MOM' * Rate-of-Change 'ROC' * Relative Strenght Index 'RSI' * Inverse Fisher Transform RSI 'IFT_RSI' * True Range 'TR' * Average True Range 'ATR' * Stop-and-Reverse 'SAR' * Bollinger Bands 'BBANDS' * Bollinger Bands Width 'BBWIDTH' * Momentum Breakout Bands 'MOBO' * Percent B 'PERCENT_B' * Keltner Channels 'KC' * Donchian Channel 'DO' * Directional Movement Indicator 'DMI' * Average Directional Index 'ADX' * Pivot Points 'PIVOT' * Fibonacci Pivot Points 'PIVOT_FIB' * Stochastic Oscillator %K 'STOCH' * Stochastic oscillator %D 'STOCHD' * Stochastic RSI 'STOCHRSI' * Williams %R 'WILLIAMS' * Ultimate Oscillator 'UO' * Awesome Oscillator 'AO' * Mass Index 'MI' * Vortex Indicator 'VORTEX' * Know Sure Thing 'KST' * True Strength Index 'TSI' * Typical Price 'TP' * Accumulation-Distribution Line 'ADL' * Chaikin Oscillator 'CHAIKIN' * Money Flow Index 'MFI' * On Balance Volume 'OBV' * Weighter OBV 'WOBV' * Volume Zone Oscillator 'VZO' * Price Zone Oscillator 'PZO' * Elder's Force Index 'EFI' * Cummulative Force Index 'CFI' * Bull power and Bear Power 'EBBP' * Ease of Movement 'EMV' * Commodity Channel Index 'CCI' * Coppock Curve 'COPP' * Buy and Sell Pressure 'BASP' * Normalized BASP 'BASPN' * Chande Momentum Oscillator 'CMO' * Chandelier Exit 'CHANDELIER' * Qstick 'QSTICK' * Twiggs Money Index 'TMF' * Wave Trend Oscillator 'WTO' * Fisher Transform 'FISH' * Ichimoku Cloud 'ICHIMOKU' * Adaptive Price Zone 'APZ' * Squeeze Momentum Indicator 'SQZMI' * Volume Price Trend 'VPT' * Finite Volume Element 'FVE' * Volume Flow Indicator 'VFI' * Moving Standard deviation 'MSD' * Schaff Trend Cycle 'STC' * Mark Whistler's WAVE PM 'WAVEPM' ``` ## Dependencies: - python (3.6+) - pandas (1.0.0+) TA class is very well documented and there should be no trouble exploring it and using with your data. Each class method expects proper `ohlc` DataFrame as input. ## Install: `pip install finta` or latest development version: `pip install git+git://github.com/peerchemist/finta.git` ## Import `from finta import TA` Prepare data to use with finta: finta expects properly formated `ohlc` DataFrame, with column names in `lowercase`: ["open", "high", "low", "close"] and ["volume"] for indicators that expect `ohlcv` input. ### to resample by time period (you can choose different time period) `ohlc = resample(df, "24h")` ### You can also load a ohlc DataFrame from .csv file `data_file = ("data/bittrex:btc-usdt.csv")` `ohlc = pd.read_csv(data_file, index_col="date", parse_dates=True)` ____________________________________________________________________________ ## Examples: ### will return Pandas Series object with the Simple moving average for 42 periods `TA.SMA(ohlc, 42)` ### will return Pandas Series object with "Awesome oscillator" values `TA.AO(ohlc)` ### expects ["volume"] column as input `TA.OBV(ohlc)` ### will return Series with Bollinger Bands columns [BB_UPPER, BB_LOWER] `TA.BBANDS(ohlc)` ### will return Series with calculated BBANDS values but will use KAMA instead of MA for calculation, other types of Moving Averages are allowed as well. `TA.BBANDS(ohlc, MA=TA.KAMA(ohlc, 20))` For more examples see examples directory. ------------------------------------------------------------------------ I welcome pull requests with new indicators or fixes for existing ones. Please submit only indicators that belong in public domain and are royalty free. ## Contributing 1. Fork it (https://github.com/peerchemist/finta/fork) 2. Study how it's implemented. 3. Create your feature branch (`git checkout -b my-new-feature`). 4. Run [black](https://github.com/ambv/black) code formatter on the finta.py to ensure uniform code style. 5. Commit your changes (`git commit -am 'Add some feature'`). 6. Push to the branch (`git push origin my-new-feature`). 7. Create a new Pull Request. ------------------------------------------------------------------------