taft

Technical analysis and research&simulation framework for algorithmic traders


Keywords
technical, analysis, trading, stock, exchange
License
MIT
Install
pip install taft==1.0.9

Documentation

TAFT: Technical Analysis tools For Trading

version 1.0.2

Related documents: data

Important notice: Quotes and volumes (numpy-arrays given as arguments to the functions listed below) are required to be indexed so that the most old value has the biggest index while the most new one has index 0.

Indicators

AD-indicator

def ad( period=1, shift=0, hi=None, lo=None, cl=None, vo=None, prev=None )
period (int) - the period of the indicator, default: 1
shift (int) - the shift inside the data arrays (hi,lo,l,vo) to calculate the indicator at, default: 0
hi (numpy array, float) - HIGH rates
lo (numpy array, float) - LOW rates
cl (numpy array, float) - CLOSE rates
vo (numpy array, float) - volumes
prev (float) - the value previously returned by the function, default: None 

Returns (float) - the value of the indicator, 'None' if failed

See the sample code here

ADX-indicator

def adx( period=14, shift=0, hi=None, lo=None, cl=None, prev=None )
period (int) - the period of the indicator, default: 14
shift (int) - the shift inside the data arrays (hi,lo,cl) to calculate the indicator for, default: 0
hi (numpy array, float) - HIGH rates
lo (numpy array, float) - LOW rates
cl (numpy array, float) - CLOSE rates
prev (dict) - previously returned by the function, default: None 

Returns (dict) - { 'adx': the ADX value, 'dx': the DX value, "+DI": the "+DI" value, "-DI": the "-DI value, 
"+DMsm": the smoothed "+DM" value, "-DMsm": the smoothed "-DM" value, "TRsm": the smoothed 'true-range' value }, 'None' if failed

See the sample code here

ATR - Average True Range

	def atr( period=14, shift=0, hi=None, lo=None, cl=None, prev=None ):
period (int) - the period of the indicator, default: 14
shift (int) - the shift inside the data arrays (hi,lo,cl) to calculate the indicator for, default: 0
hi (numpy array, float) - HIGH rates
lo (numpy array, float) - LOW rates
cl (numpy array, float) - CLOSE rates
prev (float) - the value previously returned by the function, default: None 

Returns (dict) - { 'atr': the average true-range value, 'tr' - the last rue-range value }, 'None' if failed

See the sample code here

Bollinger Bands

def bollinger( period=20, shift=0, nStds = 2.0, rates=None ):
period (int) - the period of the indicator, default: 20
shift (int) - the shift inside the 'rates' array to calculate the indicator for, default: 0
nStds (float) - the number of standard deviations to calculate 'upper' and 'lower' values of the indicator, default:2
rates (numpy array, float) - rates

Returns (dict) - { 'middle': the 'middle' value of the bollinger, 'upper': the upper value of the bollinger, 
'lower' - the lower value of the bollinger, 'std': the standard deviation value ), 'None' if failed

See the sample code here

CCI Commodity Channel Index indicator

def cci( period=20, shift=0, hi=None, lo=None, cl=None, cciConst=0.015 ):
period (int) - the period of the indicator, default: 20
shift (int) - the shift inside the data arrays (hi,lo,cl) to calculate the indicator for, default: 0
hi (numpy array, float) - HIGH rates
lo (numpy array, float) - LOW rates
cl (numpy array, float) - CLOSE rates
cciConst (float) - the constant used in the indicator formula, default: 0.015 

Returns (dict) - { 'cci': the value of the indicator, 'meanTypicalPrice': the mean 'typical price', 
'meanDeviation': the mean deviation of typical price against the mean value }, 'None' if failed

See the sample code here

EMA - Exponential Moving Average

def ema( period=10, shift=0, alpha=None, rates=None, prev=None ):			
period (int) - the period  of the indicator, default: 10
shift (int) - the shift inside the 'rates' array to calculate the indicator for, default: 0 (the last received rate)
alpha (float) - the smoothing factor, default: 2.0 / (period + 1.0)
rates (numpy array, float) - HIGH rates
prev (float) - the value previously returned by the function

Returns (float) - the EMA value, 'None' if failed

See the sample code here

Stochastic-oscillator

def stochastic( periodK=14, periodD=3, shift=0, hi=None, lo=None, cl=None ):
periodK (int) - the period  of the 'fast' stochastic line, default: 14
periodD (int) - the period  of the 'slow' stochastic line, default: 3
shift (int) - the shift inside the data arrays (hi,lo,cl) to calculate the indicator for, default: 0
hi (numpy array, float) - HIGH rates
lo (numpy array, float) - LOW rates
cl (numpy array, float) - CLOSE rates

Returns: the 'K' ('fast) stochastic value, 'D': the 'D' ('slow') tochastic value, 'None' if failed.

See the sample code here

ROC - The Rate Of Change indicator

def roc( period=12, shift=0, rates=None ):
period (int) - the period of the indicator, default: 12
shift (int) - the shift inside the 'rates' array to calculate the indicator for, default: 0 (the last received rate)
rates (numpy array, float) - the rates

Returns (float) - the rate of change (ROC) value, 'None' if failed

RSI - Relative Strength Index

def rsi( period=14, shift=0, rates=None, prev=None ):
period (int) - the period of the indicator, default: 14
shift (int) - the shift inside the 'rates' array to calculate the indicator for, default: 0 (the last received rate)
rates (numpy array, float) - the rates
prev (dict) - the value previously returned by the function

Returns (dict) - { 'rsi':the RSI value, 'rs': the Relative Strength value, 
'averageGain': the 'average gain' value, 'averageLoss': the 'average loss' value }, 'None' if failed

See the sample code here

SMA - Simple Moving Average

def sma( period=10, shift=0, rates=None ):
period (int) - the period of the indicator, default: 10
shift (int) - the shift inside the 'rates' array to calculate the indicator for, default: 0 (the last received rate)
rates (numpy array, float) - the rates

Returns (float) - the SMA value, 'None' if failed 

Simulation and Research

simulateTrade

Simulates trade - opening and closing position.

def simulateTrade( shift=0, hi=None, lo=None, tp=None, sl=None, tpSlides=False, slSlides=False, side=1, price=None, type=0 ):
shift (int) - the shift inside the 'rates' arrays (hi,lo,cl), i.e. the index at which the trade is 'opened'
hi (numpy array, float) - HIGH rates
lo (numpy array, float) - LOW rates
tp (float) - the 'take profit' value, if 'None' a huge value of (max(hi)-min(lo))*100.0 is used	
sl (float) - the 'stop loss' value, if 'None' a huge value of (max(hi)-min(lo))*100.0 is used	
tpSlides (boolean) - if 'True' a sliding take profit is used 
slSlides (boolean) - if 'True' a sliding stop loss is used
side (int) - the value of '1' simulates open LONG, the value of '-1' simulates open short
price (float) - the 'current' (initial) price, if 'None' the value of 'current price' is the mean between lo[shift] and hi[shift]

Returns (dict): { 
	'profit' (float): the profit in points;
	'closedAt' (int): the index value (inside the 'hi' and 'lo' arrays) where the trade was 'closed', 
		'-1' if neigther stop loss nor take profit has been reached till the end of the arrays;
	'closePrice' (float): close price
}

See the sample code here

Utilities

normalize

Normalizes the values of an array with the following formula: x[i] = (x[i] - ) /

def normalize( x, meanX=None, stdX=None, normInterval=[0,-1] ):
x (numpy array, float) - the array to be normalized 
meanX (float) - the mean value to normalize with (if "None" the value will be calculated)
stdX (float) - the std value to normalize with (if "None" the value will be calculated)
normInterval (list of length 2, int) - the starting and the ending indexes inside the 'x' array.
    The indexes denote a subarray used to calculate 'meanX' and 'stdX'.
    if normInterval[1]==-1, the whole array is used. 
Returns: nothing

readFinam

Loads rates from Finam file

def readFinam( fileName ):
fileName (string) - the name of the file with Finam rates. 

Returns (dict): {
	'op' (numpy-array, float): open rates, '0' index takes the latest rate
	'hi' (numpy-array, float): high rates, '0' index takes the latest rate
	'lo' (numpy-array, float): low rates, '0' index takes the latest rate
	'cl' (numpy-array, float): close rates, '0' index takes the latest rate
	'vol' (numpy-array, float): volumes, '0' index takes the volume of the latest period
	'dtm' (list, datetime): date&time, '0' index takes the date and time of the latest period
}