commented getextremum

realized the algorithm in get mean
This commit is contained in:
Mark 2022-08-14 14:40:15 +03:00
parent 4ad23a9bea
commit 8a2a2615ac

View File

@ -2,7 +2,7 @@ import numpy as np
class CoreMath:
def __init__(self, base_df, params=None):
"""
Этот класс нужен для того, чтобы проводить операции над датафреймами
@ -46,56 +46,48 @@ class CoreMath:
ans = self.getSTD()
return ans
def getExtremumValue(self):
ans=None
'''
actionOptions:
'extremumtype':
"""
Эта функция возвращает экстремум произвольного типа внутри одного столбца
Тип контролируется разделом внутри словаря параметров `self.params` по ключу `actionOptions`:
'extremumtype': -- тип экстремума
'min'
'max'
'valueType':
'open'
'close'
'high'
'low'
'''
:return ans, экстремум произвольного типа
"""
ans=None
if self.params['actionOptions']['extremumtype']=='max':
ans=max(self.col)
if self.params['actionOptions']['extremumtype']=='min':
ans=min(self.col)
return ans
def getMeanValue(self):
'''
actionOptions:
"""
Божественный код
Эта функция возвращает среднее значение одного из следующих типов.
Для определения типа используется словарь `self.params`, по ключу `actionOptions`, релевантные ключи выглядят
так:
'MeanType':
'MA'
'SMA'
'EMA'
'WMA'
--'SMMA'
'valueType':
'open'
'close'
'high'
'low'
'window'
'span'
'weights'
'''
'MA' -- среднее по всему столбцу
'SMA' -- скользящее среднее
'EMA' -- экспоненциальное скользящее среднее
'WMA' -- взвешенное скользящее среднее
'window' -- размер окна
'span' -- >=1 , аналог окна для экспоненциального среднего, чем он больше тем меньше коэффициент сглаживания
'weights' -- numpy.ndarray, список размером в параметр `window`, конкретные веса для каждого элемента
"""
ans=None
if self.params['actionOptions']['MeanType']=='MA':
ans = self.col.mean()
if self.params['actionOptions']['MeanType']=='SMA':
ans=np.convolve(self.col, np.ones(self.params['actionOptions']['window']), 'valid') / self.params['actionOptions']['window']
#ans=self.col.rolling(window=self.params['actionOptions']['window']).mean().to_list()
if self.params['actionOptions']['MeanType']=='EMA':
ans=self.col.ewm(span=self.params['actionOptions']['span'], adjust=False).mean().to_list()
if self.params['actionOptions']['MeanType']=='WMA':
@ -105,10 +97,8 @@ class CoreMath:
weights=np.arange(1,self.params['actionOptions']['window']+1)
ans=self.col.rolling(window=self.params['actionOptions']['window']).apply(lambda x: np.sum(weights*x) / weights.sum(), raw=False).to_list()
return(ans)
return ans
def getSTD(self):
'''
actionOptions:
@ -119,7 +109,7 @@ class CoreMath:
'''
ans=None
@ -128,10 +118,10 @@ class CoreMath:
ans=np.asarray([])
for i in range(len(self.col)-window+1):
ans=np.append(ans, np.std(self.col[i:i+window], ddof=1))
except:
#window = len(self.col)
ans=np.std(self.col, ddof=1)
return ans