QufiLab

About

Something about the project.

Installation

The easiest way to install qufilab is to use a package manager like pip

pip3 install qufilab

Alternatively, one can clone the package and install from source

git clone https://github.com/normelius/qufilab.git
python setup.py install

Indicators

Warning

All of qufilab’s technical indicators are implemented in c++ and a big part of the speed performance comes from the fact that no type conversion exist between python and c++. In order for this to work, numpy arrays of type numpy.dtype.float64 or numpy.dtype.float32 are preferably used. Observe that all other types of numpy arrays are accepted, however the returned numpy array will be converted into the type numpy.dtype.float64.

Trend

Double Exponential Moving Average

qufilab.dema(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing calculated double exponential moving average values.

Notes

\[dema_K = 2 \cdot ema_K - ema(ema_K)\]

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> dema = ql.ema(df['close'], periods = 10)
>>> print(dema)
[nan nan nan ... 210.18599259 211.72078484 212.32702478]

Exponential Moving Average

qufilab.ema(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing calculated exponential moving average values.

Notes

The calculation of ema can be written as a power series:

\[ema_K = \alpha[price_K + (1-\alpha)price_{K-1} + \ (1-\alpha)^2price_{K-2} + ... + (1-\alpha)^{K-(n-1)}price_{K-(n-1)},\]

which also can be written as:

\[ema_K = ema_{K-1} + \alpha[price_K - ema_{K-1}],\]

where \(\alpha = \frac{2}{n+1}\) is the multiplier and depends on the period n. Observe that for the first ema value, a simple moving average is used.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> ema = ql.ema(df['close'], periods = 10)
>>> print(ema)
[nan nan nan ... 209.63323895 210.53265005 210.98489549]

Linear Weighted Moving Average

qufilab.lwma(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing calculated linear weighted moving average values.

Notes

The linear weighted moving average is calculated similar to the simple moving average, except that the values aren’t equally weighted, but linearly weighted with the highest weight going first and then decreasing linearly. This implementation use the number of periods as the highest weight, and thereafter decreasing down to one.

\[lwma_K = \frac{price_K \cdot w_n + price_{K-1} \cdot w_{n-1} \ + ... + price_{K-(n-1)} \cdot w_1}{\sum_{i=1}^n w_i},\]

where \(w_1 = 1, w_2 = 2,... w_n = n\)

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> lwma = ql.lwma(df['close'], periods = 10)
>>> print(lwma)
[nan nan nan ... 209.50327273 210.35927273 210.96381818]

Simple Moving Average

qufilab.sma(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing calculated simple moving average values.

Notes

The calculation of sma is a equally weighted mean for the last n days.

\[sma_K = \frac{price_K + price_{K-1} + ... + price_{K-(n-1)}}{n} = \frac{1}{n}\sum_{i=0}^{n-1} price_{K-i}\]

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> sma = ql.sma(df['close'], periods = 10)
>>> print(sma)
[nan nan nan ... 209.872 209.695 209.749]

Smoothed Moving Average

qufilab.smma(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing calculated smoothed moving average values.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> smma = ql.smma(df['close'], periods = 10)
>>> print(smma)
[nan nan nan ... 208.85810754 209.43029679 209.78926711]

T3 Moving Average

qufilab.t3(data, periods, volume_factor=0.7)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

volume_factorfloat, optional

What volume factor to be used when calculating the constants. See Notes below for implementation.

Returns
ndarray

An array containing calculated t3 moving average values.

Notes

The t3 moving average indicator utilize many different exponential moving averages and is calculated with:

\[ \begin{align}\begin{aligned}t3 = c_1e_6 + c_2e_5 + c_3e_4 + c_4e_3\\e_1 = ema(data)\\e_2 = ema(e_1)\\e_3 = ema(e_2)\\e_4 = ema(e_3)\\e_5 = ema(e_4)\\e_6 = ema(e_5)\\c_1 = -a^3\\c_2 = 3a^2 + 3a^3\\c_3 = –6a^2–3a–3a^3\\c_4 = 1 + 3a + a^3 + 3a^2\end{aligned}\end{align} \]

where a is the volume factor and is typically set to 0.7.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> t3 = ql.t3(df['close'], periods = 10)
>>> print(t3)
[nan nan nan ... 210.08668472 210.2348457 210.47802463]

Triangular Moving Average

qufilab.tma(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing calculated triangular moving average values.

Notes

The triangular moving average is calculated by taking an sma of an sma.

\[tma = sma(sma(price, n_1), n_2)\]

As seen above, two different periods are used in this implementation. If the parameter periods is even

\[ \begin{align}\begin{aligned}n_1 = \frac{periods}{2}\\n_2 = \frac{periods}{2} + 1\end{aligned}\end{align} \]

otherwise they are rounded up after the following calculation

\[n_1 = n_2 = \frac{periods + 1}{2}\]

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> tma = ql.tma(df['close'], periods = 10)
>>> print(tma)
[nan nan nan ... 208.93833333 209.115 209.684]

Weighted Close

qufilab.wc(high, low, close)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

closendarray

An array containing closing prices.

Returns
ndarray

An array containing calculated weighted close values.

Notes

The weighted close is defined as:

\[wc_K = \frac{2 \cdot close_K + high_K + low_K}{4}\]

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> wc = ql.wc(df['high'], df['low'], df['close'])
>>> print(wc)
[153.1975 154.09 154.3075 ... 210.1875 213.2675 213.785]

Momentum

Absolute Price Oscillator

qufilab.apo(price, period_slow=26, period_fast=12, ma='sma')
Parameters
pricendarray

Array of type float64 or float32 containing price values.

period_slowint, optional

Number of periods for the slow moving average. Default to 26.

period_fastint, optional

Number of fast periods for the fast moving average. Default to 12.

ma{‘sma’, ‘ema’}, optional

Type of moving average to be used. Default to ‘sma’

Returns
ndarray

Array of type float64 or float32 containing the calculated absolute price oscillator values.

Aroon Indicator

qufilab.aroon(high, low, period=20)
Parameters
highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

periodint, optional

Number of periods to be used. Defaults to 20.

Returns
ndarray

Array of type float64 or float32 containing the calculated aroon indicator values.

Balance of Power

qufilab.bop(high, low, open_, close)
Parameters
highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

open_ndarray

Array of type float64 or float32 containing open prices.

closendarray

Array of type float64 or float32 containing closing prices.

Returns
ndarray

Array of type float64 or float32 containing the calculated balance of power values.

Commodity Channel Index

qufilab.cci(close, high, low, period=20)
Parameters
closendarray

Array of type float64 or float32 containing closing prices.

highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

periodint, optional

Number of periods to be used. Defaults to 20.

Returns
ndarray

Array of type float64 or float32 containing the calculated commodity channel index values.

Chande Momentum Indicator

qufilab.cmo(close, period)
Parameters
closendarray

Array of type float64 or float32 containing closing prices.

periodint

Number of periods to be used.

Returns
ndarray

Array of type float64 or float32 containing the calculated chande momentum values.

MACD

qufilab.macd(price)
Parameters
pricendarray

Array of type float64 or float32 containing the prices to calculate macd from.

Returns
macdndarray

Array of type float64 or float32 containing the macd values.

signalndarray

Array of type float64 or float32 containing the signal values.

Money Flow Index

qufilab.mfi(high, low, close, volume, period)
Parameters
highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

closendarray

Array of type float64 or float32 containing closing prices.

volumendarray

Array of type float64 or float32 containing volume values.

periodint

Number of periods to be used.

Returns
ndarray

Array of type float64 or float32 containing the calculated money flow index values.

Momentum Indicator

qufilab.mi(price, period)
Parameters
pricendarray

Array of type float64 or float32 containing price values.

periodint

Number of periods to be used.

Returns
ndarray

Array of type float64 or float32 containing the calculated momentum indicator values.

Percentage Price Oscillator

qufilab.ppo(price, period_fast=12, period_slow=26, ma='ema')
Parameters
pricendarray

Array of type float64 or float32 containing price values.

period_fastint, optional

Number of fast periods for the fast moving average. Default to 12.

period_slowint, optional

Number of periods for the slow moving average. Default to 26.

ma{‘ema’, ‘sma’}, optional

Type of moving average to be used. Default to ‘ema’

Returns
ndarray

Array of type float64 or float32 containing the calculated percentage price values.

Relative Strength Index

qufilab.rsi(price, period, rsi_type='smoothed')
Parameters
pricendarray

Array of type float64 or float32 containing the data to calculate rsi from.

periodint

Number of periods to be used.

rsi_type{‘smoothed’, ‘standard’}, optional

Specify what kind of averaging should be used for calculating the average gain/ average loss. Standard is the Wilder’s smoothing.

Returns
ndarray

Returns a numpy ndarray with type float64 or float32.

Price Rate of Change

qufilab.roc(price, period)
Parameters
pricendarray

Array of type float64 or float32 containing price values.

periodint

Number of periods to be used.

Returns
ndarray

Array of type float64 or float32 containing the calculated rate of change values.

Volume Price Trend

qufilab.vpt(price, volume)
Parameters
pricendarray

Array of type float64 or float32 containing price values.

volumendarray

Array of type float64 or float32 containing volume values.

Returns
ndarray

Array of type float64 or float32 containing the calculated volume price trend values.

William’s R

qufilab.willr(close, high, low, period)
Parameters
closendarray

Array of type float64 or float32 containing the closing prices.

highndarray

Array of type float64 or float32 containing the high prices.

lowndarray

Array of type float64 or float32 containing the low prices.

periodint

Number of periods to be used.

Returns
ndarray

Array of type float64 or float32 containing the william’s r values.

Volatility

Average True Range

qufilab.atr(close, high, low, period)
Parameters
closendarray

Array of type float64 or float32 containing the closing prices.

highndarray

Array of type float64 or float32 containing the high prices.

lowndarray

Array of type float64 or float32 containing the low prices.

periodint

Number of periods to be used.

Returns
ndarray

Array of type float64 or float32 containing the calculated average true range values.

Bollinger Bands

qufilab.bbands(price, period, deviation=2)
Parameters
pricendarray

Array of type float64 or float32 containing the prices.

periodint

Number of periods to be used.

deviationint, optional

Number of standard deviations from the mean. Defaults to 20.

Returns
upperndarray

Upper bollinger band.

middlendarray

middle bollinger band.

lowerndarray

lower bollinger band.

Chaikin Volatility

qufilab.cv(high, low, period=10, smoothing_period=10)
Parameters
highndarray

Array of type float64 or float32 containing the high prices.

lowndarray

Array of type float64 or float32 containing the low prices.

periodint, optional

Number of periods to be used. Defaults to 10.

smooting_periodint, optional

Number of periods to be used for smoothing chaikin volatility values. Defaults to 10.

Returns
ndarray

Array of type float64 or float32 containing the calculated chaikin volatility values.

Keltner Channels

qufilab.kc(close, high, low, period=20, period_atr=20, deviation=2)
Parameters
closendarray

Array of type float64 or float32 containing the closing prices.

highndarray

Array of type float64 or float32 containing the high prices.

lowndarray

Array of type float64 or float32 containing the low prices.

periodint, optional

Number of periods to be used. Defaults to 20.

period_atrint, optional

Number of periods to be used for the average true range calculations. Defaults to 20.

deviationint, optional

Number of deviations from the mean. Defaults to 2.

Returns
upperndarray

Upper keltner band.

middlendarray

middle keltner band.

lowerndarray

lower keltner band.

Volume

Accumulation Distribution

qufilab.acdi(close, high, low, volume)
Parameters
closendarray

Array of type float64 or float32 containing closing prices.

highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

volumendarray

Array of type float64 or float32 containing volume values.

Returns
ndarray

Array of type float64 or float32 containing the calculated accumulation distribution values.

Chaikin Indicator

qufilab.ci(close, high, low, volume)
Parameters
closendarray

Array of type float64 or float32 containing closing prices.

highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

volumendarray

Array of type float64 or float32 containing volume values.

Returns
ndarray

Array of type float64 or float32 containing the calculated chaikin indicator values.

Chaikin Money Flow

qufilab.cmf(close, high, low, volume, period=21)
Parameters
closendarray

Array of type float64 or float32 containing closing prices.

highndarray

Array of type float64 or float32 containing high prices.

lowndarray

Array of type float64 or float32 containing low prices.

volumendarray

Array of type float64 or float32 containing volume values.

periodint, optional

Number of periods to use. Defaults to 21.

Returns
ndarray

Array of type float64 or float32 containing the calculated chaikin money flow values.

Negative Volume Index

qufilab.nvi(price, volume)
Parameters
pricendarray

Array of type float64 or float32 containing prices.

volumendarray

Array of type float64 or float32 containing volume values.

Returns
ndarray

Array of type float64 or float32 containing the calculated negative volume index values.

On Balance Volume

qufilab.obv(price, volume)
Parameters
pricendarray

Array of type float64 or float32 containing prices.

volumendarray

Array of type float64 or float32 containing volume values.

Returns
ndarray

Array of type float64 or float32 containing the calculated on balance volume values.

Positive Volume Index

qufilab.pvi(price, volume)
Parameters
pricendarray

Array of type float64 or float32 containing prices.

volumendarray

Array of type float64 or float32 containing volume values.

Returns
ndarray

Array of type float64 or float32 containing the calculated positive volume index values.

Statistics

Beta

qufilab.beta(data, market, periods, normalize=False)
Parameters
datandarray

An array containing values.

marketndarray

An array containing market values to be used as the comparison when calculating beta.

periodsint

Number of periods to be used.

normalizebool, optional

Specify whether to normalize the standard deviation calculation within the beta calculation with n - 1 instead of n. Defaults to False.

Returns
ndarray

An array containing beta values.

Examples

>>> import qufilab as ql
>>> import numpy as np
...
>>> # Load sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> df_market = ql.load_sample('DJI')
>>> beta = ql.beta(df['close'], df_market['close'], periods = 10)
>>> print(beta)
[nan nan nan ... 0.67027616 0.45641977 0.3169785]

Covariance

qufilab.cov(data, market, periods, normalize=True)
Parameters
datandarray

An array containing values.

marketndarray

An array containing market values to be used as the comparison when calculating beta.

periodsint

Number of periods to be used.

normalizebool, optional

Specify whether to normalize covariance with n - 1 instead of n. Defaults to True.

Returns
ndarray

An array containing covariance values.

Examples

>>> import qufilab as ql
>>> import numpy as np
...
>>> # Load sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> df_market = ql.load_sample('DJI')
>>> cov = ql.cov(df['close'], df_market['close'], periods = 10)
>>> print(cov)
[nan nan nan ... -360.37842558  -99.1077715 60.84627274]

Percentage Change

qufilab.pct_change(data, periods)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

Returns
ndarray

An array containing percentage change for the specified periods.

Examples

>>> import qufilab as ql
>>> import numpy as np
...
>>> # Load sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> pct_change = ql.pct_change(df['close'], periods = 10)
>>> print(pct_change)
[nan nan nan ... -1.52155537 -0.81811879 0.25414157]

Standard Deviation

qufilab.std(data, periods, normalize=True)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

normalizebool, optional

Specify whether to normalize the standard deviation with n - 1 instead of n. Defaults to True.

Returns
ndarray

An array containing standard deviation values for the specified periods.

Examples

>>> import qufilab as ql
>>> import numpy as np
...
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> sma = ql.std(df['close'], periods = 10)
>>> print(sma)
[nan nan nan ... 3.31897842 2.9632574  3.02394683]

Variance

qufilab.var(data, periods, normalize=True)
Parameters
datandarray

An array containing values.

periodsint

Number of periods to be used.

normalizebool, optional

Specify whether to normalize the standard deviation with n - 1 instead of n. Defaults to True.

Returns
ndarray

An array containing variance values.

Examples

>>> import qufilab as ql
>>> import numpy as np
...
>>> # Load a sample dataframe.
>>> df = ql.load_sample('MSFT')
>>> print(df['close'].dtype)
float64
>>> var = ql.var(df['close'], periods = 10)
>>> print(var)
[nan nan nan ... 11.01561778  8.78089444 9.14425444]

Candlestick Patterns

Abandoned Baby - Bear

qufilab.abandoned_baby_bear(high, low, open_, close, periods=10)

Abandoned Baby Bear

Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
patternndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Abandoned Baby - Bull

qufilab.abandoned_baby_bull(high, low, open_, close, periods=10)

Abandoned Baby Bull

Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
patternndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Belt Hold - Bear

qufilab.belthold_bear(high, low, open_, close, periods=10, shadow_margin=5.0)

Belt Hold Bear

Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using for example 5%, both the lower and upper shadow can be as high as 5% of the candlestick body size. This exist to allow some margin (not restrict to no shadow).

Returns
patternndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Belt Hold - Bull

qufilab.belthold_bull(high, low, open_, close, periods=10, shadow_margin=5.0)

Belt Hold Bull

Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using for example 5%, both the lower and upper shadow can be as high as 5% of the candlestick body size. This exist to allow some margin (not restrict to no shadow).

Returns
patternndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Doji

qufilab.doji(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
dojindarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> df = ql.load_sample('MSFT')
>>> doji = ql.doji(df['high'], df['low'], df['open'], df['close'])
>>> print(doji)
[False False False ... False False False]

Dragonfly Doji

qufilab.dragonfly_doji(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
dragonfly_dojindarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> df = ql.load_sample('MSFT')
>>> dragonfly_doji = ql.dragonfly_doji(df['high'], df['low'], df['open'], df['close'])
>>> print(dragonfly_doji)
[False False False ... False False False]

Engulfing - Bear

qufilab.engulfing_bear(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
engulfingndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Engulfing - Bull

qufilab.engulfing_bull(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
engulfingndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Hammer

qufilab.hammer(high, low, open_, close, periods=10, shadow_margin=5.0)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using i.e. 5%, upper shadow can be as long as 5% of the candlestick body size. This exist to allow some margin and not exclude the shadows entirely.

Returns
hammerndarray

A numpy array of type bool specifying true whether a pattern has been found or false otherwise.

Notes

Observe that the lower shadow shall be bigger than 2x the body, but lower than 3x the body.

_images/hammer.png

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> df = ql.load_sample('MSFT')
>>> hammer = ql.hammer(df['high'], df['low'], df['open'], df['close'])
>>> print(hammer)
[False False False ... False False False]

Harami - Bear

qufilab.harami_bear(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
harami_bearndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Harami - Bull

qufilab.harami_bull(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
harami_bullndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Inverted Hammer

qufilab.inverted_hammer(high, low, open_, close, periods=10, shadow_margin=5.0)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using i.e. 5%, lower shadow can be as long as 5% of the candlestick body size. This exist to allow some margin and not exclude the shadows entirely.

Returns
inverted_hammerndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> df = ql.load_sample('MSFT')
>>> inverted_hammer = ql.inverted_hammer(df['high'], df['low'], df['open'], df['close'])
>>> print(inverted_hammer)
[False False False ... False False False]

Kicking - Bear

qufilab.kicking_bear(high, low, open_, close, periods=10, shadow_margin=5.0)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using for example 5%, both the lower and upper shadow can be as high as 5% of the candlestick body size. This exist to allow some margin (not restrict to no shadow).

Returns
kicking_bearndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Kicking - Bull

qufilab.kicking_bull(high, low, open_, close, periods=10, shadow_margin=5.0)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using for example 5%, both the lower and upper shadow can be as high as 5% of the candlestick body size. This exist to allow some margin (not restrict to no shadow).

Returns
kicking_bullndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Marubozu White

qufilab.marubozu_white(high, low, open_, close, shadow_margin=5.0, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using for example 5%, both the lower and upper shadow can be as high as 5% of the candlestick body size. This exist to allow some margin (not restrict to no shadow).

periodsint, optional

Specifying number of periods for trend identification.

Returns
marubozu_whitendarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Examples

>>> import qufilab as ql
>>> import numpy as np
... 
>>> df = ql.load_sample('MSFT')
>>> marubozu_white = ql.marubozu_white(df['high'], df['low'], df['open'], df['close'])
>>> print(marubozu_white)
[False False False ... False False False]

Marubozu Black

qufilab.marubozu_black(high, low, open_, close, shadow_margin=5.0, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

shadow_marginfloat, optional

Specify what margin should be allowed for the shadows. By using for example 5%, both the lower and upper shadow can be as high as 5% of the candlestick body size. This exist to allow some margin (not restrict to no shadow).

periodsint, optional

Specifying number of periods for trend identification.

Returns
marubozu_blackndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Piercing

qufilab.piercing(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
piercingndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Spinning Top White

qufilab.spinning_top_white(high, low, open_, close, periods=10)
Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
spinning_top_whitendarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

Three White Soldiers

qufilab.tws(high, low, open_, close, periods=10)

Three White Soldiers

Parameters
highndarray

An array containing high prices.

lowndarray

An array containing low prices.

open_ndarray

An array containing open prices.

closendarray

An array containing close prices.

periodsint, optional

Specifying number of periods for trend identification.

Returns
twsndarray

A numpy ndarray of type bool specifying true whether a pattern has been found or false otherwise.

For maintainers

Adding new indicators

The process of adding a new indicator to the library consists of several steps and is documented here for future reference.

  1. When creating a new indicator, start by declaring what type of indicator it is. For example, the rsi indicator is a momentum indicator, and hence should be implemented in the momentum.cc file. The first line of the docstring in the .cc file should be Implementation of INDICATOR, i.e. Implementation of SMA. This is needed for the linking of source code to github, since docs/source/conf.py manually retrieves the source code from github and searches for that line to get the correct line number. If the indicator have dependencies from other functions in other script, be sure to include the header files and update qufilab/indicators/CMakeLists.txt. This is needed when building manually, since the linking won’t work otherwise.

  2. When the implementation is done, the documentation for the indicator needs to be created. Start by adding the indicator to the correct entry in the docs/source/indicators.yaml file. This file ensures that correct links to the underlying source code can be made when building the docs.

  3. Add the correct specifications to the docs/source/indicators.rst directory.