From 8a2a2615ac79904cb34998e11bd822fa74d3e1e7 Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 14 Aug 2022 14:40:15 +0300 Subject: [PATCH] commented getextremum realized the algorithm in get mean --- market_trade/core/CoreTraidMath.py | 74 +++++++++++++----------------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/market_trade/core/CoreTraidMath.py b/market_trade/core/CoreTraidMath.py index 1702f1e..9f906c4 100644 --- a/market_trade/core/CoreTraidMath.py +++ b/market_trade/core/CoreTraidMath.py @@ -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 - +