From e4c944cd0708b0168ea32de96e92d343119d2175 Mon Sep 17 00:00:00 2001 From: Redsandyg <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 25 Feb 2022 14:20:52 +0300 Subject: [PATCH 01/37] Create readme.txt --- Docs/readme.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 Docs/readme.txt diff --git a/Docs/readme.txt b/Docs/readme.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Docs/readme.txt @@ -0,0 +1 @@ + From 2ac9162310a5861e430dfefe530aed3560418cca Mon Sep 17 00:00:00 2001 From: Redsandyg <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 25 Feb 2022 14:24:00 +0300 Subject: [PATCH 02/37] Rename Untitled Diagram.drawio to Dosc/ClassDiogram.drawio --- Untitled Diagram.drawio => Dosc/ClassDiogram.drawio | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Untitled Diagram.drawio => Dosc/ClassDiogram.drawio (100%) diff --git a/Untitled Diagram.drawio b/Dosc/ClassDiogram.drawio similarity index 100% rename from Untitled Diagram.drawio rename to Dosc/ClassDiogram.drawio From deb69072c40d71a6fd7d4bc632a1079af2e4ffa6 Mon Sep 17 00:00:00 2001 From: Redsandyg <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 25 Feb 2022 14:24:52 +0300 Subject: [PATCH 03/37] Rename Dosc/ClassDiogram.drawio to Docs/ClassDiogram.drawio --- {Dosc => Docs}/ClassDiogram.drawio | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Dosc => Docs}/ClassDiogram.drawio (100%) diff --git a/Dosc/ClassDiogram.drawio b/Docs/ClassDiogram.drawio similarity index 100% rename from Dosc/ClassDiogram.drawio rename to Docs/ClassDiogram.drawio From 5f19a1a3438a9ea01a352a3c6e7b01317fd9060e Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Wed, 2 Mar 2022 23:51:51 +0300 Subject: [PATCH 04/37] Create readme.txt --- Core/readme.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 Core/readme.txt diff --git a/Core/readme.txt b/Core/readme.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Core/readme.txt @@ -0,0 +1 @@ + From 2adaff0edf0e103bad7247e0bdc46d75f337b1f1 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Wed, 2 Mar 2022 23:53:21 +0300 Subject: [PATCH 05/37] Add files via upload --- Core/CoreDraw.py | 138 ++++++++++++++++++++++++++++++++++++++++++ Core/CoreTraidMath.py | 124 +++++++++++++++++++++++++++++++++++++ 2 files changed, 262 insertions(+) create mode 100644 Core/CoreDraw.py create mode 100644 Core/CoreTraidMath.py diff --git a/Core/CoreDraw.py b/Core/CoreDraw.py new file mode 100644 index 0000000..8c4669a --- /dev/null +++ b/Core/CoreDraw.py @@ -0,0 +1,138 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import plotly.express as px + +class corePlt(): + def __init__(self, params={ + 'vtype':'', + 'df':pd.DataFrame(), + 'row':1, + 'col':1, + 'name':'' + }): + self.vtype=params['vtype'] + self.df=params['df'] + self.row=params['row'] + self.col=params['col'] + self.name=params['name'] + + + + + +class coreDraw(): + def __init__(self, data=[],needShow=False): + self.data=self.getPlts(data) + self.needShow=needShow + self.ans=self.getAns() + + + + + + def getPlts(self, data): + ans=None + + if type(data)==list: + ans=[] + for i in data: + ans.append(corePlt(i)) + else: + ans=[corePlt(data)] + + + + + return ans + + def getAns(self): + ''' + data list + vtype + df + row=1 + col=1 + name + + + + ''' + + ans=None + + + + + maxRow=1 + maxCol=1 + for i in self.data: + if i.row > maxRow: + maxRow =i.row + if i.col > maxCol: + maxCol =i.col + + fig = make_subplots( + rows=maxRow, + cols=maxCol, + shared_xaxes=True, + vertical_spacing=0.02, + shared_yaxes=True, + horizontal_spacing=0.02, + #column_widths=[] + + ) + + + fig.update_layout(xaxis_rangeslider_visible=False) + + + for i in self.data: + if i.vtype=='Scatter': + fig.add_trace(go.Scatter(x=i.df['date'],y=i.df['value'],name=i.name), row=i.row, col=i.col) + elif i.vtype=='OCHL': + fig.add_trace(go.Candlestick( + x=i.df['date'], + open=i.df['open'], + high=i.df['high'], + low=i.df['low'], + close=i.df['close'], + name=i.name), + row=i.row, col=i.col + ) + + + + ans=fig + if self.needShow: + plotly.offline.iplot(fig) + return ans + + + + diff --git a/Core/CoreTraidMath.py b/Core/CoreTraidMath.py new file mode 100644 index 0000000..e77ff96 --- /dev/null +++ b/Core/CoreTraidMath.py @@ -0,0 +1,124 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +class CoreMath: + + def __init__(self, base_df, params={ + 'dataType':'ohcl', + 'colName':{ + 'open':'open', + 'close':'close', + 'high':'high', + 'low':'low', + 'date':'date' + }, + 'action': None, + 'actionOptions':{} + } + ): + + self.base_df=base_df.reset_index(drop=True) + self.params=params + if self.params['dataType']=='ohcl': + self.col=self.base_df[self.params['colName'][self.params['actionOptions']['valueType']]] + elif self.params['dataType']=='series': + self.col=self.base_df + self.ans=self.getAns() + + + def getAns(self): + ans=None + + if self.params['action']=='findExt': + ans = self.getExtremumValue() + if self.params['action']=='findMean': + ans = self.getMeanValue() + + + return ans + + + def getExtremumValue(self): + ans=None + ''' + actionOptions: + 'extremumtype': + 'min' + 'max' + 'valueType': + 'open' + 'close' + 'high' + 'low' + ''' + 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: + 'MeanType': + 'MA' + 'SMA' + 'EMA' + 'WMA' + --'SMMA' + 'valueType': + 'open' + 'close' + 'high' + 'low' + 'window' + 'span' + 'weights' + ''' + 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() + if self.params['actionOptions']['MeanType']=='EMA': + ans=self.col.ewm(span=elf.params['actionOptions']['span'], adjust=False).mean() + if self.params['actionOptions']['MeanType']=='WMA': + try: + weights=self.params['actionOptions']['weights'] + except KeyError: + 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) + + + + return(ans) + \ No newline at end of file From fabc61302afa1003063d7d5d773722fbbefcc0d7 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 15:37:21 +0300 Subject: [PATCH 06/37] Add files via upload --- Core/Ind_Ishimoku.py | 189 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Core/Ind_Ishimoku.py diff --git a/Core/Ind_Ishimoku.py b/Core/Ind_Ishimoku.py new file mode 100644 index 0000000..4e3476e --- /dev/null +++ b/Core/Ind_Ishimoku.py @@ -0,0 +1,189 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +import CoreDraw +init_notebook_mode() +import CoreTraidMath +import plotly.express as px + + +class Ishimoku: + + def __init__(self, base_df, options={ + 'dataType':'ohcl', + 'short':9, + 'middle':26, + 'long':52, + 'backstep':26, + 'forwardstep':26 + }, + needShow=False, + showOnlyIndex=True + ): + + self.base_df=base_df.reset_index(drop=True) + self.options=options + + self.ans=self.getAns() + if needShow==True: + self.fig=self.pltShow(showOnlyIndex) + + + def getTankenSen(self): + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['short'],self.base_df.shape[0]): + maxValue=max(self.base_df['high'][i-self.options['short']:i]) + minValue=min(self.base_df['low'][i-self.options['short']:i]) + y=np.append(y,(maxValue+minValue)*0.5) + x=np.append(x,self.base_df['date'][i]) + #ts.append(max(self.base_df[self.options['colName']['high']][i-self.options['short']:i])) + ans={'y':y,'x':x} + return(ans) + + def getKijunSen(self): + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['middle'],self.base_df.shape[0]): + maxValue=max(self.base_df['high'][i-self.options['middle']:i]) + minValue=min(self.base_df['low'][i-self.options['middle']:i]) + y=np.append(y,(maxValue+minValue)*0.5) + x=np.append(x,self.base_df['date'][i]) + #ts.append(max(self.base_df[self.options['colName']['high']][i-self.options['short']:i])) + ans={'y':y,'x':x} + return(ans) + + def getChinkoSpan(self): + y=np.asarray(self.base_df['close'][self.options['backstep']:]) + x=np.asarray(self.base_df['date'][:self.base_df.shape[0]-self.options['backstep']]) + ans={'y':y,'x':x} + return(ans) + + def getSenkouSpanA(self, data): + y=np.asarray([]) + x=np.asarray([]) + shift=len(data['TankenSen']['y'])-len(data['KijunSen']['y']) + for i in range(len(data['KijunSen']['x'])-self.options['forwardstep']): + y=np.append(y,(data['KijunSen']['y'][i]+data['TankenSen']['y'][i+shift])*0.5) + x=np.append(x,data['KijunSen']['x'][i+self.options['forwardstep']]) + + ans={'y':y,'x':x} + return(ans) + + def getSenkouSpanB(self): + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['long'],self.base_df.shape[0]-self.options['forwardstep']): + maxValue=max(self.base_df['high'][i-self.options['long']:i]) + minValue=min(self.base_df['low'][i-self.options['long']:i]) + y=np.append(y,(maxValue+minValue)*0.5) + x=np.append(x,self.base_df['date'][i+self.options['forwardstep']]) + #ts.append(max(self.base_df[self.options['colName']['high']][i-sel + + ans={'y':y,'x':x} + return(ans) + + + + + + + def getAns(self): + ans={} + ans['TankenSen']=self.getTankenSen() + ans['KijunSen']=self.getKijunSen() + ans['ChinkoSpan']=self.getChinkoSpan() + ans['SenkouSpanA']=self.getSenkouSpanA(ans) + ans['SenkouSpanB']=self.getSenkouSpanB() + #print(ans) + return(ans) + + + def pltShow(self,showOnlyIndex): + ans=None + req=[] + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['TankenSen']['y'],'date':self.ans['TankenSen']['x']}) , + 'row':1, + 'col':1, + 'name':'TankenSen' + + }) + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['KijunSen']['y'],'date':self.ans['KijunSen']['x']}) , + 'row':1, + 'col':1, + 'name':'KijunSen' + + }) + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['ChinkoSpan']['y'],'date':self.ans['ChinkoSpan']['x']}) , + 'row':1, + 'col':1, + 'name':'ChinkoSpan' + + }) + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['SenkouSpanA']['y'],'date':self.ans['SenkouSpanA']['x']}) , + 'row':1, + 'col':1, + 'name':'SenkouSpanA' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['SenkouSpanB']['y'],'date':self.ans['SenkouSpanB']['x']}) , + 'row':1, + 'col':1, + 'name':'SenkouSpanB' + + }) + + + if not showOnlyIndex: + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + ans = CoreDraw.coreDraw(req,True) + #print(ans) + return ans \ No newline at end of file From 13232c07ca7e1b367ec37cb5b28866fe1879b3e7 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 16:21:28 +0300 Subject: [PATCH 07/37] Update CoreTraidMath.py --- Core/CoreTraidMath.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Core/CoreTraidMath.py b/Core/CoreTraidMath.py index e77ff96..71e5e7b 100644 --- a/Core/CoreTraidMath.py +++ b/Core/CoreTraidMath.py @@ -29,13 +29,6 @@ class CoreMath: def __init__(self, base_df, params={ 'dataType':'ohcl', - 'colName':{ - 'open':'open', - 'close':'close', - 'high':'high', - 'low':'low', - 'date':'date' - }, 'action': None, 'actionOptions':{} } @@ -44,7 +37,7 @@ class CoreMath: self.base_df=base_df.reset_index(drop=True) self.params=params if self.params['dataType']=='ohcl': - self.col=self.base_df[self.params['colName'][self.params['actionOptions']['valueType']]] + self.col=self.base_df[[self.params['actionOptions']['valueType']]] elif self.params['dataType']=='series': self.col=self.base_df self.ans=self.getAns() @@ -121,4 +114,5 @@ class CoreMath: return(ans) - \ No newline at end of file + + From 785daedb36340240f2cb8e5c56c59cf41ab20ebd Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 16:37:47 +0300 Subject: [PATCH 08/37] Update CoreTraidMath.py --- Core/CoreTraidMath.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Core/CoreTraidMath.py b/Core/CoreTraidMath.py index 71e5e7b..24a0e60 100644 --- a/Core/CoreTraidMath.py +++ b/Core/CoreTraidMath.py @@ -37,7 +37,7 @@ class CoreMath: self.base_df=base_df.reset_index(drop=True) self.params=params if self.params['dataType']=='ohcl': - self.col=self.base_df[[self.params['actionOptions']['valueType']]] + self.col=self.base_df[self.params['actionOptions']['valueType']] elif self.params['dataType']=='series': self.col=self.base_df self.ans=self.getAns() @@ -101,18 +101,17 @@ class CoreMath: 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() + ans=self.col.rolling(window=self.params['actionOptions']['window']).mean().to_list() if self.params['actionOptions']['MeanType']=='EMA': - ans=self.col.ewm(span=elf.params['actionOptions']['span'], adjust=False).mean() + ans=self.col.ewm(span=self.params['actionOptions']['span'], adjust=False).mean().to_list() if self.params['actionOptions']['MeanType']=='WMA': try: weights=self.params['actionOptions']['weights'] except KeyError: 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) + ans=self.col.rolling(window=self.params['actionOptions']['window']).apply(lambda x: np.sum(weights*x) / weights.sum(), raw=False).to_list() return(ans) - From f4860ff952856dd32cf9659818a8737ee6f9096b Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 20:53:31 +0300 Subject: [PATCH 09/37] Add files via upload --- Core/ADX.py | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 Core/ADX.py diff --git a/Core/ADX.py b/Core/ADX.py new file mode 100644 index 0000000..0ac72cd --- /dev/null +++ b/Core/ADX.py @@ -0,0 +1,180 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots + + +import CoreTraidMath +import CoreDraw +init_notebook_mode() + +class ADXI: + + def __init__(self, base_df, options={ + 'dataType':'ohcl', + + }, needShow=False,showOnlyIndex=True): + self.base_df=base_df.reset_index(drop=True) + self.options=options + #self.norm_df=self.nornalize() + #self.col=col + #self.npCol=np.asarray(self.norm_df[self.col], dtype=np.float32) + #self.options=options + self.ans=self.getAns() + if needShow: + self.fig=self.pltShow(showOnlyIndex) + + + def getDM(self): + + #m,p=self.getMP() + dm_m=np.asarray([]) + dm_p=np.asarray([]) + tr=np.asarray([]) + + + for i in range(1,self.base_df.shape[0]): + if (self.base_df['open'][i]>= + self.base_df['open'][i-1]): + dm_p=np.append(dm_p,self.base_df['open'][i]-self.base_df['open'][i-1]) + else: + dm_p=np.append(dm_p,0) + if (self.base_df['close'][i]<=self.base_df['close'][i-1]): + dm_m=np.append(dm_m,self.base_df['close'][i-1]-self.base_df['close'][i]) + else: + dm_m=np.append(dm_m,0) + + tr=np.append(tr, + max(self.base_df['close'][i-1],self.base_df['high'][i])- + min(self.base_df['close'][i-1],self.base_df['low'][i])) + + + setattr(self,'dm_m',dm_m) + setattr(self,'dm_p',dm_p) + setattr(self,'tr',tr) + + return dm_m,dm_p + + def getEMA(self,Col): + ser = pd.Series(Col, copy=False) + op={'dataType':'series', + 'action':'findMean', + 'actionOptions':{'MeanType':'EMA','span':10} + } + ans=np.asarray(CoreTraidMath.CoreMath(ser,op).ans) + #print(ans) + #ans = np.asarray(ser.ewm(span=40,adjust=False).mean().to_list()) + #print(ans) + #return(np.asarray(ser.ewm(span=40,adjust=False).mean().to_list())) + return ans + + def getDI(self): + dm,dp=self.getDM() + + dip=self.getEMA(dp/self.tr) + dim=self.getEMA(dm/self.tr) + + return dim,dip + + def getAns(self): + + dim,dip=self.getDI() + np.seterr(invalid='ignore') + col=abs(np.true_divide((dim-dip),(dim+dip))) + setattr(self,'col',col) + + adx=self.getEMA(col) + + ans={ + 'DIM':dim*100, + 'DIP':dip*100, + 'ADX':adx*100 + } + + + + return ans + + def pltShow(self,showOnlyIndex): + ans=None + req=[] + + row=1 + if not showOnlyIndex: + + row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['ADX'],'date':self.base_df['date'].to_list()[1:]}) , + 'row':row, + 'col':1, + 'name':'SenkouSpanB' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['DIP'],'date':self.base_df['date'].to_list()[1:]}) , + 'row':row, + 'col':1, + 'name':'+DI' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['DIM'],'date':self.base_df['date'].to_list()[1:]}) , + 'row':row, + 'col':1, + 'name':'-DI' + + }) + + + + ans = CoreDraw.coreDraw(req,True) + + + return ans + + + + + + + + + + + \ No newline at end of file From 704b4e2c39b8136caab8b74dc236b93625fd8078 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 20:54:18 +0300 Subject: [PATCH 10/37] Rename ADX.py to Ind_ADX.py --- Core/{ADX.py => Ind_ADX.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Core/{ADX.py => Ind_ADX.py} (99%) diff --git a/Core/ADX.py b/Core/Ind_ADX.py similarity index 99% rename from Core/ADX.py rename to Core/Ind_ADX.py index 0ac72cd..b9226fc 100644 --- a/Core/ADX.py +++ b/Core/Ind_ADX.py @@ -177,4 +177,4 @@ class ADXI: - \ No newline at end of file + From dee6205ab64ad5cd01c7a95c63376d0c3760ddbf Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 23:20:25 +0300 Subject: [PATCH 11/37] Update CoreTraidMath.py --- Core/CoreTraidMath.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/CoreTraidMath.py b/Core/CoreTraidMath.py index 24a0e60..dda9770 100644 --- a/Core/CoreTraidMath.py +++ b/Core/CoreTraidMath.py @@ -100,8 +100,8 @@ class CoreMath: 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() + 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': From 33848db97226bb2fe8bc2473b055875b7b4f54da Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 4 Mar 2022 23:25:03 +0300 Subject: [PATCH 12/37] Add files via upload --- Core/Ind_Stochastic.py | 145 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Core/Ind_Stochastic.py diff --git a/Core/Ind_Stochastic.py b/Core/Ind_Stochastic.py new file mode 100644 index 0000000..f9ddea1 --- /dev/null +++ b/Core/Ind_Stochastic.py @@ -0,0 +1,145 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + +class Stochastic: + + def __init__(self, base_df, options={ + 'dataType':'ohcl', + 'window':14, + 'windowSMA':5 + }, needShow=False,showOnlyIndex=True + ): + + self.base_df=base_df.reset_index(drop=True) + self.options=options + + self.ans=self.getAns() + if needShow: + self.fig=self.pltShow(showOnlyIndex) + + def getKn(self): + ans={} + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['window'],self.base_df.shape[0]): + minValue=min(self.base_df['low'][i-self.options['window']:i]) + maxValue=max(self.base_df['high'][i-self.options['window']:i]) + + y=np.append(y,(self.base_df['close'][i-1]-minValue)/(maxValue-minValue)) + x=np.append(x,self.base_df['date'][i-1]) + #print(i,minValue,maxValue,self.base_df[self.options['colName']['close']][i],y[-1]) + ans['y'],ans['x']=y,x + + + + return ans + + + def getSMA(self,col): + ans=None + ser = pd.Series(col, copy=False) + op={'dataType':'series', + 'action':'findMean', + 'actionOptions':{'MeanType':'SMA','window':self.options['windowSMA']} + } + ans=np.asarray(CoreTraidMath.CoreMath(ser,op).ans) + return ans + #return np.convolve(col, np.ones(self.options['windowSMA']), 'valid') /self.options['windowSMA'] + + + + + def getDn(self,col): + ans={} + y=np.asarray([]) + x=np.asarray([]) + for i in range(self.options['windowSMA'],len(col['y'])): + y=np.append(y, self.getSMA(col['y'][i-self.options['windowSMA']:i])) + x=np.append(x,col['x'][i]) + + ans['y'],ans['x']=y,x + return ans + + def getAns(self): + ans={} + ans['Kn']=self.getKn() + ans['Dn']=self.getDn(ans['Kn']) + + #print(ans) + return(ans) + + + + def pltShow(self,showOnlyIndex): + ans=None + + + + req=[] + + row=1 + if not showOnlyIndex: + + row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Kn']['y'],'date':self.ans['Kn']['x']}) , + 'row':row, + 'col':1, + 'name':'Kn' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Dn']['y'],'date':self.ans['Dn']['x']}) , + 'row':row, + 'col':1, + 'name':'Dn' + + }) + + + + + ans = CoreDraw.coreDraw(req,True) + + return ans + From ca55e55aed8faaf631c173276d1b1b586d503121 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 5 Mar 2022 23:49:17 +0300 Subject: [PATCH 13/37] Update CoreDraw.py --- Core/CoreDraw.py | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/Core/CoreDraw.py b/Core/CoreDraw.py index 8c4669a..1140851 100644 --- a/Core/CoreDraw.py +++ b/Core/CoreDraw.py @@ -28,6 +28,36 @@ init_notebook_mode() import CoreTraidMath import plotly.express as px + + + +class agrigateFig(): + + def __init__(self,data=[],needDraw=False ,subplot_titles=None): + self.data=data + self.ans=self.getAgrPlt() + if needDraw: + self.subplot_titles=subplot_titles + self.fig=coreDraw(self.ans,True,self.subplot_titles) + + + def getAgrPlt(self): + count=0 + ans=[] + for i in self.data: + count=count+1 + if type(i)==list: + for g in i: + for j in g.figDict: + ans.append(j) + ans[-1]['row']=count + else: + for j in i.figDict: + ans.append(j) + ans[-1]['row']=count + return ans + + class corePlt(): def __init__(self, params={ 'vtype':'', @@ -47,9 +77,10 @@ class corePlt(): class coreDraw(): - def __init__(self, data=[],needShow=False): + def __init__(self, data=[], needShow=False,subplot_titles={}): self.data=self.getPlts(data) self.needShow=needShow + self.subplot_titles=subplot_titles self.ans=self.getAns() @@ -101,10 +132,11 @@ class coreDraw(): rows=maxRow, cols=maxCol, shared_xaxes=True, - vertical_spacing=0.02, + #vertical_spacing=0.2, shared_yaxes=True, - horizontal_spacing=0.02, + #horizontal_spacing=0.2, #column_widths=[] + subplot_titles=self.subplot_titles ) From 81a827d2a2c627e970dffc1b896718b8f1028146 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 5 Mar 2022 23:52:45 +0300 Subject: [PATCH 14/37] Update Ind_ADX.py --- Core/Ind_ADX.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Core/Ind_ADX.py b/Core/Ind_ADX.py index b9226fc..40eb089 100644 --- a/Core/Ind_ADX.py +++ b/Core/Ind_ADX.py @@ -34,7 +34,7 @@ class ADXI: def __init__(self, base_df, options={ 'dataType':'ohcl', - }, needShow=False,showOnlyIndex=True): + }, needFig=False,showOnlyIndex=True,drawFig=False): self.base_df=base_df.reset_index(drop=True) self.options=options #self.norm_df=self.nornalize() @@ -42,8 +42,8 @@ class ADXI: #self.npCol=np.asarray(self.norm_df[self.col], dtype=np.float32) #self.options=options self.ans=self.getAns() - if needShow: - self.fig=self.pltShow(showOnlyIndex) + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) def getDM(self): @@ -116,7 +116,7 @@ class ADXI: return ans - def pltShow(self,showOnlyIndex): + def pltShow(self,showOnlyIndex,drawFig): ans=None req=[] @@ -161,9 +161,11 @@ class ADXI: }) + self.figDict=req + - ans = CoreDraw.coreDraw(req,True) + ans = CoreDraw.coreDraw(req,drawFig) return ans From 1ef906dced1c9d83f4376f885c555857add08d68 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 5 Mar 2022 23:55:33 +0300 Subject: [PATCH 15/37] Update Ind_Ishimoku.py --- Core/Ind_Ishimoku.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Core/Ind_Ishimoku.py b/Core/Ind_Ishimoku.py index 4e3476e..381f734 100644 --- a/Core/Ind_Ishimoku.py +++ b/Core/Ind_Ishimoku.py @@ -38,17 +38,15 @@ class Ishimoku: 'long':52, 'backstep':26, 'forwardstep':26 - }, - needShow=False, - showOnlyIndex=True + },needFig=False,showOnlyIndex=True,drawFig=False ): self.base_df=base_df.reset_index(drop=True) self.options=options self.ans=self.getAns() - if needShow==True: - self.fig=self.pltShow(showOnlyIndex) + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) def getTankenSen(self): @@ -121,7 +119,7 @@ class Ishimoku: return(ans) - def pltShow(self,showOnlyIndex): + def pltShow(self,showOnlyIndex,drawFig): ans=None req=[] @@ -183,7 +181,8 @@ class Ishimoku: 'col':1, 'name':'OHCL' - }) - ans = CoreDraw.coreDraw(req,True) + }) + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) #print(ans) - return ans \ No newline at end of file + return ans From 07f2c83557820dbcf86c1a93d95e60657fe023af Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 5 Mar 2022 23:57:24 +0300 Subject: [PATCH 16/37] Update Ind_Stochastic.py --- Core/Ind_Stochastic.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Core/Ind_Stochastic.py b/Core/Ind_Stochastic.py index f9ddea1..b3eb5b1 100644 --- a/Core/Ind_Stochastic.py +++ b/Core/Ind_Stochastic.py @@ -34,15 +34,15 @@ class Stochastic: 'dataType':'ohcl', 'window':14, 'windowSMA':5 - }, needShow=False,showOnlyIndex=True + }, needFig=False,showOnlyIndex=True,drawFig=False ): self.base_df=base_df.reset_index(drop=True) self.options=options self.ans=self.getAns() - if needShow: - self.fig=self.pltShow(showOnlyIndex) + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) def getKn(self): ans={} @@ -97,7 +97,7 @@ class Stochastic: - def pltShow(self,showOnlyIndex): + def pltShow(self,showOnlyIndex,drawFig): ans=None @@ -135,11 +135,13 @@ class Stochastic: 'name':'Dn' }) + + self.figDict=req - ans = CoreDraw.coreDraw(req,True) + ans = CoreDraw.coreDraw(req,drawFig) return ans From cf05ce0eb9ee5b7532db0b691c8546cc7f6f3d7b Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Thu, 10 Mar 2022 23:48:57 +0300 Subject: [PATCH 17/37] Update CoreTraidMath.py --- Core/CoreTraidMath.py | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/Core/CoreTraidMath.py b/Core/CoreTraidMath.py index dda9770..523a80e 100644 --- a/Core/CoreTraidMath.py +++ b/Core/CoreTraidMath.py @@ -12,18 +12,10 @@ import statistics import datetime -import matplotlib.dates as mdates -import matplotlib.pyplot as plt -import mplfinance as mpf -import plotly -#import plotly.plotly as py -import plotly.graph_objs as go -# these two lines allow your code to show up in a notebook -from plotly.offline import init_notebook_mode, iplot -from plotly.subplots import make_subplots -init_notebook_mode() + + class CoreMath: @@ -48,8 +40,10 @@ class CoreMath: if self.params['action']=='findExt': ans = self.getExtremumValue() - if self.params['action']=='findMean': + elif self.params['action']=='findMean': ans = self.getMeanValue() + elif self.params['action']=='findSTD': + ans=self.getSTD() return ans @@ -102,6 +96,7 @@ class CoreMath: 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': @@ -114,4 +109,30 @@ class CoreMath: return(ans) + + def getSTD(self): + ''' + actionOptions: + window + + + + + + ''' + + ans=None + + + try: + window=self.params['actionOptions']['window'] + 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 From 632d5961beb5d87141a0eded963996aad7dcdb8c Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Thu, 10 Mar 2022 23:49:26 +0300 Subject: [PATCH 18/37] Add files via upload --- Core/Ind_STD.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Core/Ind_STD.py diff --git a/Core/Ind_STD.py b/Core/Ind_STD.py new file mode 100644 index 0000000..a7f6489 --- /dev/null +++ b/Core/Ind_STD.py @@ -0,0 +1,88 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + +class ISTD: + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + def getAns(self): + ans=None + try: + op={'dataType':'ohcl', + 'action':'findSTD', + 'actionOptions':{ + 'valueType':self.options['valueType'], + 'window':self.options['window'] + } + } + x=self.base_df['date'][self.options['window']-1:].to_list() + except: + op={'dataType':'ohcl', + 'action':'findSTD', + 'actionOptions':{'valueType':self.options['valueType']} + } + x=self.base_df['date'].to_list() + y= CoreTraidMath.CoreMath(self.base_df,op).ans + ans={'y':y,'x':x} + + + + return ans + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['y'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'ISTD' + + }) + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From c33e65cd8308ed7869289158628e467d71a976a7 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Fri, 11 Mar 2022 23:58:33 +0300 Subject: [PATCH 19/37] Add files via upload --- Core/Ind_DonchianChannel.py | 108 ++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Core/Ind_DonchianChannel.py diff --git a/Core/Ind_DonchianChannel.py b/Core/Ind_DonchianChannel.py new file mode 100644 index 0000000..7a6748b --- /dev/null +++ b/Core/Ind_DonchianChannel.py @@ -0,0 +1,108 @@ +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + + + +class IDC: + + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + def getSMA(self,windowSMA): + return np.convolve(self.npCol, np.ones(int(windowSMA)), 'valid') / int(windowSMA) + + + + + + def getAns(self): + ans={ + 'MaxExt':[], + 'MinExt':[], + 'x':[] + + } + opMin={'dataType':'ohcl', + 'action':'findExt', + 'actionOptions':{'extremumtype':'min','valueType':'low'} + } + opMax={'dataType':'ohcl', + 'action':'findExt', + 'actionOptions':{'extremumtype':'max','valueType':'high'} + } + + for i in range(self.options['window'],len(self.base_df)-self.options['shift']+1): + ans['MaxExt'].append(CoreTraidMath.CoreMath(self.base_df[i-self.options['window']:i],opMax).ans) + ans['x'].append(self.base_df['date'][i-1+self.options['shift']]) + ans['MinExt'].append(CoreTraidMath.CoreMath(self.base_df[i-self.options['window']:i],opMin).ans) + return ans + + + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + #row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['MaxExt'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'MaxExt' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['MinExt'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'MinExt' + + }) + + + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From cc7f347dd34b0bf6a6bb06c5ef526071c60d8e46 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sun, 13 Mar 2022 23:07:18 +0300 Subject: [PATCH 20/37] Add files via upload SMA only --- Core/Ind_Envelopes.py | 124 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 Core/Ind_Envelopes.py diff --git a/Core/Ind_Envelopes.py b/Core/Ind_Envelopes.py new file mode 100644 index 0000000..6fec035 --- /dev/null +++ b/Core/Ind_Envelopes.py @@ -0,0 +1,124 @@ +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + +class Envelopes: + + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + + + def getAns(self): + ans={ + 'MainEnv':[], + 'PlusEnv':[], + 'MinusEnv':[], + 'x':[] + } + dictResp={} + dictResp['MeanType']=self.options['MeanType'] + dictResp['valueType']=self.options['valueType'] + + try: + dictResp['window'] = self.options['window'] + dictResp['span'] = self.options['window'] + except: + pass + + + + + op={'dataType':'ohcl', + 'action':'findMean', + 'actionOptions':dictResp + } + if dictResp['MeanType']=='SMA': + + y=CoreTraidMath.CoreMath(self.base_df,op).ans + ans['MainEnv']=y[:len(y)-self.options['shift']] + ans['PlusEnv']=ans['MainEnv']*(1+self.options['kProc']/100) + ans['MinusEnv']=ans['MainEnv']*(1-self.options['kProc']/100) + ans['x']=self.base_df['date'][self.options['window']-1+self.options['shift']:] + + + + + + return ans + + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + #row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['MainEnv'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'MainEnv' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['PlusEnv'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'PlusEnv' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['MinusEnv'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'MinusEnv' + + }) + + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From 6f7b36d2620ef519b01383850518a7770decf81f Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Mon, 14 Mar 2022 22:49:44 +0300 Subject: [PATCH 21/37] Update readme.txt --- Core/readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Core/readme.txt b/Core/readme.txt index 8b13789..0d8a959 100644 --- a/Core/readme.txt +++ b/Core/readme.txt @@ -1 +1,2 @@ +Ind_Envelopes - SMA only From a2a47f664cf500bcbb427c67b7eb3d04b3c3fbb8 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:05:42 +0300 Subject: [PATCH 22/37] Add files via upload --- Core/Ind_bollingerBands.py | 109 +++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Core/Ind_bollingerBands.py diff --git a/Core/Ind_bollingerBands.py b/Core/Ind_bollingerBands.py new file mode 100644 index 0000000..da9ef81 --- /dev/null +++ b/Core/Ind_bollingerBands.py @@ -0,0 +1,109 @@ +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + + +class BB: + + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + + + def getAns(self): + ans={} + + opMA={'dataType':'ohcl', + 'action':'findMean', + 'actionOptions':{ + 'MeanType':self.options['MeanType'], + 'valueType':self.options['valueType'], + 'window':self.options['window'] + } + } + ans['BB']=CoreTraidMath.CoreMath(self.base_df,opMA).ans + opSTD={'dataType':'ohcl', + 'action':'findSTD', + 'actionOptions':{'valueType':self.options['valueType'],'window':self.options['window']} + } + ans['STD']=CoreTraidMath.CoreMath(self.base_df,opSTD).ans + ans['pSTD']=ans['BB']+ans['STD']*self.options['kDev'] + ans['mSTD']=ans['BB']-ans['STD']*self.options['kDev'] + ans['x']=np.array(self.base_df['date'][self.options['window']-1:].to_list()) + return ans + + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + #row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['BB'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'BB' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['pSTD'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'pSTD' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['mSTD'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'mSTD' + + }) + + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From 542ac33f4539ab5ffb4b5f4eda7af8d3db057858 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Tue, 15 Mar 2022 00:06:17 +0300 Subject: [PATCH 23/37] Add files via upload --- Ind_bollingerBands.py | 109 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Ind_bollingerBands.py diff --git a/Ind_bollingerBands.py b/Ind_bollingerBands.py new file mode 100644 index 0000000..da9ef81 --- /dev/null +++ b/Ind_bollingerBands.py @@ -0,0 +1,109 @@ +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + + +class BB: + + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + + + def getAns(self): + ans={} + + opMA={'dataType':'ohcl', + 'action':'findMean', + 'actionOptions':{ + 'MeanType':self.options['MeanType'], + 'valueType':self.options['valueType'], + 'window':self.options['window'] + } + } + ans['BB']=CoreTraidMath.CoreMath(self.base_df,opMA).ans + opSTD={'dataType':'ohcl', + 'action':'findSTD', + 'actionOptions':{'valueType':self.options['valueType'],'window':self.options['window']} + } + ans['STD']=CoreTraidMath.CoreMath(self.base_df,opSTD).ans + ans['pSTD']=ans['BB']+ans['STD']*self.options['kDev'] + ans['mSTD']=ans['BB']-ans['STD']*self.options['kDev'] + ans['x']=np.array(self.base_df['date'][self.options['window']-1:].to_list()) + return ans + + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + #row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['BB'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'BB' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['pSTD'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'pSTD' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['mSTD'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'mSTD' + + }) + + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From 4c7e3e296c770b51e60fc9c788a38af7358e314e Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Wed, 16 Mar 2022 22:54:24 +0300 Subject: [PATCH 24/37] Add files via upload --- Core/Ind_Alligator.py | 114 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Core/Ind_Alligator.py diff --git a/Core/Ind_Alligator.py b/Core/Ind_Alligator.py new file mode 100644 index 0000000..c3e9cf1 --- /dev/null +++ b/Core/Ind_Alligator.py @@ -0,0 +1,114 @@ +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + + +class Alligator: + + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + + def getMA(self,keyAns): + ans=None + op={'dataType':'ohcl', + 'action':'findMean', + 'actionOptions':{'MeanType':self.options[keyAns]['MeanType'], + 'valueType':self.options['valueType'], + 'window':self.options[keyAns]['window']} + } + ans=CoreTraidMath.CoreMath(self.base_df,op).ans + + return ans + + def getAns(self): + ans={'Jaw':{}, + 'Teeth':{}, + 'Lips':{} + } + + + for i in ans.keys(): + ma=self.getMA(i) + ans[i]['y']=ma[:len(ma)-self.options[i]['shift']] + ans[i]['x']=self.base_df['date'][self.options[i]['window']+self.options[i]['shift']-1:] + + + return ans + + + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + #row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Jaw']['y'],'date':self.ans['Jaw']['x']}) , + 'row':row, + 'col':1, + 'name':'Jaw' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Teeth']['y'],'date':self.ans['Teeth']['x']}) , + 'row':row, + 'col':1, + 'name':'Teeth' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['Lips']['y'],'date':self.ans['Lips']['x']}) , + 'row':row, + 'col':1, + 'name':'Lips' + + }) + + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From 4438bcd4aede075c94125e9e34cc3e8b8d55b500 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Thu, 17 Mar 2022 00:36:05 +0300 Subject: [PATCH 25/37] Update CoreDraw.py --- Core/CoreDraw.py | 49 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/Core/CoreDraw.py b/Core/CoreDraw.py index 1140851..eac5811 100644 --- a/Core/CoreDraw.py +++ b/Core/CoreDraw.py @@ -71,22 +71,46 @@ class corePlt(): self.row=params['row'] self.col=params['col'] self.name=params['name'] + if 'colorType' in params.keys(): + self.colorType=params['colorType'] class coreDraw(): - def __init__(self, data=[], needShow=False,subplot_titles={}): + def __init__(self, data=[],needShow=False): self.data=self.getPlts(data) self.needShow=needShow - self.subplot_titles=subplot_titles self.ans=self.getAns() + + + def getBarColorList(self,l,colorType): + if colorType=='diffAbs': + ans=['green'] + for i in range(1,len(l)): + if abs(l[i])>abs(l[i-1]): + ans.append('green') + else: + ans.append('red') + elif colorType=='diff': + ans=['green'] + for i in range(1,len(l)): + if (l[i])>(l[i-1]): + ans.append('green') + else: + ans.append('red') + elif colorType=='normal': + ans=[] + for i in range(len(l)): + ans.append('gray') + return ans + def getPlts(self, data): ans=None @@ -132,17 +156,16 @@ class coreDraw(): rows=maxRow, cols=maxCol, shared_xaxes=True, - #vertical_spacing=0.2, + vertical_spacing=0.02, shared_yaxes=True, - #horizontal_spacing=0.2, + horizontal_spacing=0.02, #column_widths=[] - subplot_titles=self.subplot_titles ) fig.update_layout(xaxis_rangeslider_visible=False) - + fig.update_layout(barmode='relative') for i in self.data: if i.vtype=='Scatter': @@ -157,6 +180,16 @@ class coreDraw(): name=i.name), row=i.row, col=i.col ) + elif i.vtype=='Bars': + for j in i.df.keys(): + if j!='date': + try: + colorType=i.colorType + except: + colorType='normal' + colors=self.getBarColorList(i.df[j],colorType) + fig.add_trace(go.Bar(x=i.df['date'], y=i.df[j],name=j,marker_color=colors)) + @@ -164,7 +197,3 @@ class coreDraw(): if self.needShow: plotly.offline.iplot(fig) return ans - - - - From b16d92e224b6a46a881719f7a0c7af0641d086ce Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Thu, 17 Mar 2022 18:29:47 +0300 Subject: [PATCH 26/37] Update CoreTraidMath.py --- Core/CoreTraidMath.py | 284 +++++++++++++++++++++++++----------------- 1 file changed, 173 insertions(+), 111 deletions(-) diff --git a/Core/CoreTraidMath.py b/Core/CoreTraidMath.py index 523a80e..6f7c050 100644 --- a/Core/CoreTraidMath.py +++ b/Core/CoreTraidMath.py @@ -12,127 +12,189 @@ import statistics import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import plotly.express as px - -class CoreMath: +class agrigateFig(): - def __init__(self, base_df, params={ - 'dataType':'ohcl', - 'action': None, - 'actionOptions':{} - } - ): - - self.base_df=base_df.reset_index(drop=True) - self.params=params - if self.params['dataType']=='ohcl': - self.col=self.base_df[self.params['actionOptions']['valueType']] - elif self.params['dataType']=='series': - self.col=self.base_df + def __init__(self,data=[],needDraw=False ,subplot_titles=None): + self.data=data + self.ans=self.getAgrPlt() + if needDraw: + self.subplot_titles=subplot_titles + self.fig=coreDraw(self.ans,True,self.subplot_titles) + + + def getAgrPlt(self): + count=0 + ans=[] + for i in self.data: + count=count+1 + if type(i)==list: + for g in i: + for j in g.figDict: + ans.append(j) + ans[-1]['row']=count + else: + for j in i.figDict: + ans.append(j) + ans[-1]['row']=count + return ans + + +class corePlt(): + def __init__(self, params={ + 'vtype':'', + 'df':pd.DataFrame(), + 'row':1, + 'col':1, + 'name':'' + }): + self.vtype=params['vtype'] + self.df=params['df'] + self.row=params['row'] + self.col=params['col'] + self.name=params['name'] + if 'colorType' in params.keys(): + self.colorType=params['colorType'] + + + + + +class coreDraw(): + def __init__(self, data=[],needShow=False,subplot_titles={}): + self.data=self.getPlts(data) + self.needShow=needShow + self.subplot_titles=subplot_titles self.ans=self.getAns() + + + + + + + def getBarColorList(self,l,colorType): + if colorType=='diffAbs': + ans=['green'] + for i in range(1,len(l)): + if abs(l[i])>abs(l[i-1]): + ans.append('green') + else: + ans.append('red') + elif colorType=='diff': + ans=['green'] + for i in range(1,len(l)): + if (l[i])>(l[i-1]): + ans.append('green') + else: + ans.append('red') + elif colorType=='normal': + ans=[] + for i in range(len(l)): + ans.append('gray') + return ans + + def getPlts(self, data): + ans=None + + if type(data)==list: + ans=[] + for i in data: + ans.append(corePlt(i)) + else: + ans=[corePlt(data)] + + + + + return ans def getAns(self): + ''' + data list + vtype + df + row=1 + col=1 + name + + + + ''' + ans=None - if self.params['action']=='findExt': - ans = self.getExtremumValue() - elif self.params['action']=='findMean': - ans = self.getMeanValue() - elif self.params['action']=='findSTD': - ans=self.getSTD() - + + + maxRow=1 + maxCol=1 + for i in self.data: + if i.row > maxRow: + maxRow =i.row + if i.col > maxCol: + maxCol =i.col + + fig = make_subplots( + rows=maxRow, + cols=maxCol, + shared_xaxes=True, + vertical_spacing=0.1, + shared_yaxes=True, + #horizontal_spacing=0.02, + #column_widths=[] + subplot_titles=self.subplot_titles + ) + + + fig.update_layout(xaxis_rangeslider_visible=False) + fig.update_layout(barmode='relative') + + for i in self.data: + if i.vtype=='Scatter': + fig.add_trace(go.Scatter(x=i.df['date'],y=i.df['value'],name=i.name), row=i.row, col=i.col) + elif i.vtype=='OCHL': + fig.add_trace(go.Candlestick( + x=i.df['date'], + open=i.df['open'], + high=i.df['high'], + low=i.df['low'], + close=i.df['close'], + name=i.name), + row=i.row, col=i.col + ) + elif i.vtype=='Bars': + for j in i.df.keys(): + if j!='date': + try: + colorType=i.colorType + except: + colorType='normal' + colors=self.getBarColorList(i.df[j],colorType) + fig.add_trace(go.Bar(x=i.df['date'], y=i.df[j],name=j,marker_color=colors),row=i.row, col=i.col) + + + + + ans=fig + if self.needShow: + plotly.offline.iplot(fig) return ans - - - def getExtremumValue(self): - ans=None - ''' - actionOptions: - 'extremumtype': - 'min' - 'max' - 'valueType': - 'open' - 'close' - 'high' - 'low' - ''' - 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: - 'MeanType': - 'MA' - 'SMA' - 'EMA' - 'WMA' - --'SMMA' - 'valueType': - 'open' - 'close' - 'high' - 'low' - 'window' - 'span' - 'weights' - ''' - 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': - try: - weights=self.params['actionOptions']['weights'] - except KeyError: - 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) - - def getSTD(self): - ''' - actionOptions: - window - - - - - - ''' - - ans=None - - - try: - window=self.params['actionOptions']['window'] - 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 - From 7541420312b56b751dd8410ed210f3d5d7f2d338 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Thu, 17 Mar 2022 18:38:39 +0300 Subject: [PATCH 27/37] Add files via upload --- Core/Ind_Gator.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Core/Ind_Gator.py diff --git a/Core/Ind_Gator.py b/Core/Ind_Gator.py new file mode 100644 index 0000000..f831824 --- /dev/null +++ b/Core/Ind_Gator.py @@ -0,0 +1,108 @@ +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw +import Ind_Alligator + +class Gator: + + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + + def getAns(self): + + req=Ind_Alligator.Alligator(self.base_df,self.options).ans + #self.req=req + ''' + ans={'Jaw-Teeth':{'y':[],'x':[]}, + 'Teeth-Lips':{'y':[],'x':[]}, + } + JawTeethIter=self.options['Jaw']['window']+self.options['Jaw']['shift']-self.options['Teeth']['window']-self.options['Teeth']['shift'] + TeethLipsIter=self.options['Teeth']['window']+self.options['Teeth']['shift']-self.options['Lips']['window']-self.options['Lips']['shift'] + + #print(TeethLipsIter) + for i in range(len(req['Jaw']['y'])): + ans['Jaw-Teeth']['y'].append(abs(req['Jaw']['y'][i]-req['Teeth']['y'][JawTeethIter+i])) + ans['Jaw-Teeth']['x']=req['Jaw']['x'] + for i in range(len(req['Teeth']['y'])): + ans['Teeth-Lips']['y'].append(-abs(req['Teeth']['y'][i]-req['Lips']['y'][TeethLipsIter+i])) + ans['Teeth-Lips']['x']=req['Teeth']['x'] + ''' + ans={'Jaw-Teeth':[], + 'Teeth-Lips':[], + 'x':[] + } + JawTeethIter=self.options['Jaw']['window']+self.options['Jaw']['shift']-self.options['Teeth']['window']-self.options['Teeth']['shift'] + TeethLipsIter=self.options['Teeth']['window']+self.options['Teeth']['shift']-self.options['Lips']['window']-self.options['Lips']['shift'] + for i in range(len(req['Jaw']['y'])): + ans['Jaw-Teeth'].append(abs(req['Jaw']['y'][i]-req['Teeth']['y'][JawTeethIter+i])) + ans['Teeth-Lips'].append(-abs(req['Teeth']['y'][JawTeethIter+i]-req['Lips']['y'][JawTeethIter+TeethLipsIter+i])) + ans['x']=req['Jaw']['x'] + + return ans + + + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + + + req.append({ + 'vtype':'Bars', + 'df':pd.DataFrame( + {'Jaw-Teeth':self.ans['Jaw-Teeth'], + 'Teeth-Lips':self.ans['Teeth-Lips'], + 'date':self.ans['x'].to_list()} + ) , + 'row':row, + 'col':1, + 'name':'Gator', + 'colorType':'diffAbs' + + }) + + + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From f63e57e140dba94ff0e22d75fe4cc5e35534b358 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sun, 20 Mar 2022 03:01:14 +0300 Subject: [PATCH 28/37] Add files via upload --- Core/Ind_LRI.py | 104 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Core/Ind_LRI.py diff --git a/Core/Ind_LRI.py b/Core/Ind_LRI.py new file mode 100644 index 0000000..d518592 --- /dev/null +++ b/Core/Ind_LRI.py @@ -0,0 +1,104 @@ + +import pandas as pd +import datetime +import numpy as np +import plotly as pl +import plotly.graph_objs as go +import matplotlib.pyplot as plt +import math +import scipy +import random +import statistics + + +import datetime +import matplotlib.dates as mdates +import matplotlib.pyplot as plt + +import mplfinance as mpf + +import plotly +#import plotly.plotly as py +import plotly.graph_objs as go +# these two lines allow your code to show up in a notebook +from plotly.offline import init_notebook_mode, iplot +from plotly.subplots import make_subplots +init_notebook_mode() + +import CoreTraidMath +import CoreDraw + + +class LRI: + def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): + self.base_df=base_df.reset_index(drop=True) + self.options=options + self.col=self.base_df[self.options['valueType']] + self.ans=self.getAns() + if needFig: + self.fig=self.pltShow(showOnlyIndex,drawFig) + + def getAns(self): + ans=None + + l=np.asarray(list(range(len(self.col)))) + k,b=np.polyfit(l,self.col,1) + setattr(self,'k',k) + setattr(self,'b',b) + b1=b+self.options['k']*pow(1-k*k,0.5) + b2=b-self.options['k']*pow(1-k*k,0.5) + ans={ + 'LRI':l*k+b, + 'LRI+':l*k+b1, + 'LRI-':l*k+b2, + 'x':self.base_df['date'] + } + + + + return ans + def pltShow(self,showOnlyIndex,drawFig): + ans=None + req=[] + row=1 + if not showOnlyIndex: + + #row=2 + req.append({ + 'vtype':'OCHL', + 'df':self.base_df, + 'row':1, + 'col':1, + 'name':'OHCL' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['LRI'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'LRI' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['LRI+'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'LRI+' + + }) + req.append({ + 'vtype':'Scatter', + 'df':pd.DataFrame( + {'value':self.ans['LRI-'],'date':self.ans['x']}) , + 'row':row, + 'col':1, + 'name':'LRI-' + + }) + self.figDict=req + ans = CoreDraw.coreDraw(req,drawFig) + return ans \ No newline at end of file From 00ee8ba9395b224245d6a60a625d6fd1ad3c64d6 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Mon, 4 Apr 2022 12:06:32 +0300 Subject: [PATCH 29/37] Create InvestCal.py --- News/InvestCal.py | 120 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 News/InvestCal.py diff --git a/News/InvestCal.py b/News/InvestCal.py new file mode 100644 index 0000000..64aea5f --- /dev/null +++ b/News/InvestCal.py @@ -0,0 +1,120 @@ +from selenium import webdriver +import time +import pandas as pd +import requests +from bs4 import BeautifulSoup +import nest_asyncio +import asyncio +import requests_html as rh +import datetime +import pandas as pd +import json + + +def f_write(driver): + with open(r'C:\\BinOptions\\exemple_pars_tomorrow.txt', 'w',encoding="utf-8") as f: + f.write(driver.page_source) + + + +def investingPars(path_file=None,dateDict=None): + ans=None + op=webdriver.FirefoxOptions() + #op.add_argument("--headless") + url='https://ru.investing.com/economic-calendar/' + #driver = webdriver.Firefox(executable_path='C:\\Users\\Redsandy\\Downloads\\geckodriver.exe') + EXE_PATH = r'C:\\Users\\Redsandy\\Downloads\\geckodriver.exe' + driver = webdriver.Firefox(executable_path=EXE_PATH,options=op) + try: + driver.get(url=url) + + #time.sleep(5) + #driver.find_element_by_id('timeFrame_tomorrow').click() + #time.sleep(5) + #f_write(driver) + if dateDict!=None: + driver.find_element_by_id('datePickerToggleBtn').click() + driver.find_element_by_id("startDate").clear() + driver.find_element_by_id("startDate").send_keys(dateDict['startDate']) + driver.find_element_by_id("endDate").clear() + driver.find_element_by_id("endDate").send_keys(dateDict['endDate']) + #driver.find_element_by_id("startDate").send_keys("31/03/2022") + driver.find_element_by_id('applyBtn').click() + time.sleep(2) + driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") + time.sleep(2) + #f_write(driver) + page_source=driver.page_source + + except Exception as ex: + print(ex) + finally: + driver.close() + driver.quit() + + + path_file_csv=path_file + ans=getDF(page_source,path_file_csv) + return ans + + + +def getTime(strok): + ans=None + if len(strok.text.split())==2: + ans = strok['title'].split()[-1] + else: + ans = strok.text + return ans +def getValat(strok): + ans=None + inc=0 + for i in strok.find_all('i'): + if i['class'][0]=='grayFullBullishIcon': + inc=inc+1 + ans= str(inc)+"/3" + return(ans) +def getUrl(strok): + ans=None + baseUrl='https://ru.investing.com' + ans=baseUrl+strok.find_all('a', href=True)[0]['href'] + return ans +def getDF(doc,path_file): + ans=None + + soup = BeautifulSoup(doc, 'html.parser') + tabl=soup.find("table", {"id": "economicCalendarData"}).find('tbody') + tdList=[] + buff=[] + for stats in tabl.find_all('tr'): + for row in stats.find_all('td'): + buff.append(row) + tdList.append(buff) + buff=[] + col_names=['Время', 'Валюта', 'Важность','Событие','URL', 'Факт.','Прогноз','Пред.','Date'] + df= pd.DataFrame(columns=col_names) + + + for i in range(0, len(tdList)): + if tdList[i][0]["class"][0]=='theDay': + colDate = tdList[i][0].text[:-3] + else: + newRow={ + col_names[0]:tdList[i][0].text, + col_names[1]:tdList[i][1].text.strip(), + col_names[2]:getValat(tdList[i][2]), + col_names[3]:tdList[i][3].text.strip(), + col_names[4]:getUrl(tdList[i][3]), + col_names[5]:tdList[i][4].text.strip(), + col_names[6]:tdList[i][5].text.strip(), + col_names[7]:tdList[i][6].text.strip(), + col_names[8]:colDate + } + df=df.append(newRow, ignore_index=True) + if path_file!=None: + df.to_csv(path_file, index=False, encoding='utf-8-sig') + + + + return df + From 0a39254c1c26e399b5d08b1177f717f6495aa1c4 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Mon, 4 Apr 2022 13:15:25 +0300 Subject: [PATCH 30/37] Create readme.txt --- News/readme.txt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 News/readme.txt diff --git a/News/readme.txt b/News/readme.txt new file mode 100644 index 0000000..80a4de9 --- /dev/null +++ b/News/readme.txt @@ -0,0 +1,8 @@ +dateDict={ + 'startDate':'30/03/2022', + 'endDate':'01/04/2022' + +} + +p='C:\\BinOptions\\df_tomorrow.csv' +InvestCal.investingPars(p,dateDict) From 807f51c6633cbc3974db12f686fd7508aff079ad Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Mon, 4 Apr 2022 13:16:08 +0300 Subject: [PATCH 31/37] Update InvestCal.py --- News/InvestCal.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/News/InvestCal.py b/News/InvestCal.py index 64aea5f..a8f72e8 100644 --- a/News/InvestCal.py +++ b/News/InvestCal.py @@ -20,7 +20,7 @@ def f_write(driver): def investingPars(path_file=None,dateDict=None): ans=None op=webdriver.FirefoxOptions() - #op.add_argument("--headless") + op.add_argument("--headless") url='https://ru.investing.com/economic-calendar/' #driver = webdriver.Firefox(executable_path='C:\\Users\\Redsandy\\Downloads\\geckodriver.exe') EXE_PATH = r'C:\\Users\\Redsandy\\Downloads\\geckodriver.exe' From 93c15bc4e090ef7dbd635346ccbc129277e71aee Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Wed, 6 Apr 2022 15:31:15 +0300 Subject: [PATCH 32/37] Update readme.txt --- News/readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/News/readme.txt b/News/readme.txt index 80a4de9..02d39d3 100644 --- a/News/readme.txt +++ b/News/readme.txt @@ -6,3 +6,4 @@ dateDict={ p='C:\\BinOptions\\df_tomorrow.csv' InvestCal.investingPars(p,dateDict) +or InvestCal.investingPars() From d3ea17481e05ddf11b9ad8fe1a0283d657f32c58 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Wed, 6 Apr 2022 15:31:37 +0300 Subject: [PATCH 33/37] Update InvestCal.py --- News/InvestCal.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/News/InvestCal.py b/News/InvestCal.py index a8f72e8..17f63c7 100644 --- a/News/InvestCal.py +++ b/News/InvestCal.py @@ -43,7 +43,7 @@ def investingPars(path_file=None,dateDict=None): time.sleep(2) driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") time.sleep(2) - #f_write(driver) + f_write(driver) page_source=driver.page_source except Exception as ex: @@ -100,7 +100,7 @@ def getDF(doc,path_file): colDate = tdList[i][0].text[:-3] else: newRow={ - col_names[0]:tdList[i][0].text, + col_names[0]:getTime(tdList[i][0]), col_names[1]:tdList[i][1].text.strip(), col_names[2]:getValat(tdList[i][2]), col_names[3]:tdList[i][3].text.strip(), From cf10ab13ca57690ed52ad0ec39ac3ca76cc1155b Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sun, 17 Apr 2022 19:01:06 +0300 Subject: [PATCH 34/37] Update InvestCal.py --- News/InvestCal.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/News/InvestCal.py b/News/InvestCal.py index 17f63c7..4e86f9e 100644 --- a/News/InvestCal.py +++ b/News/InvestCal.py @@ -20,7 +20,7 @@ def f_write(driver): def investingPars(path_file=None,dateDict=None): ans=None op=webdriver.FirefoxOptions() - op.add_argument("--headless") + #op.add_argument("--headless") url='https://ru.investing.com/economic-calendar/' #driver = webdriver.Firefox(executable_path='C:\\Users\\Redsandy\\Downloads\\geckodriver.exe') EXE_PATH = r'C:\\Users\\Redsandy\\Downloads\\geckodriver.exe' @@ -96,21 +96,24 @@ def getDF(doc,path_file): for i in range(0, len(tdList)): - if tdList[i][0]["class"][0]=='theDay': - colDate = tdList[i][0].text[:-3] - else: - newRow={ - col_names[0]:getTime(tdList[i][0]), - col_names[1]:tdList[i][1].text.strip(), - col_names[2]:getValat(tdList[i][2]), - col_names[3]:tdList[i][3].text.strip(), - col_names[4]:getUrl(tdList[i][3]), - col_names[5]:tdList[i][4].text.strip(), - col_names[6]:tdList[i][5].text.strip(), - col_names[7]:tdList[i][6].text.strip(), - col_names[8]:colDate - } - df=df.append(newRow, ignore_index=True) + try: + if tdList[i][0]["class"][0]=='theDay': + colDate = tdList[i][0].text[:-3] + else: + newRow={ + col_names[0]:getTime(tdList[i][0]), + col_names[1]:tdList[i][1].text.strip(), + col_names[2]:getValat(tdList[i][2]), + col_names[3]:tdList[i][3].text.strip(), + col_names[4]:getUrl(tdList[i][3]), + col_names[5]:tdList[i][4].text.strip(), + col_names[6]:tdList[i][5].text.strip(), + col_names[7]:tdList[i][6].text.strip(), + col_names[8]:colDate + } + df=df.append(newRow, ignore_index=True) + except: + pass if path_file!=None: df.to_csv(path_file, index=False, encoding='utf-8-sig') From 627e06df571522bd0393124132a9a9aed422b184 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 23 Apr 2022 20:27:56 +0300 Subject: [PATCH 35/37] Add files via upload --- Docs/с4.drawio | 1 + 1 file changed, 1 insertion(+) create mode 100644 Docs/с4.drawio diff --git a/Docs/с4.drawio b/Docs/с4.drawio new file mode 100644 index 0000000..187856e --- /dev/null +++ b/Docs/с4.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file From 9a515878a7231334c4d596f438a96a1fd437b626 Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 23 Apr 2022 20:28:23 +0300 Subject: [PATCH 36/37] Delete ClassDiogram.drawio --- Docs/ClassDiogram.drawio | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 Docs/ClassDiogram.drawio diff --git a/Docs/ClassDiogram.drawio b/Docs/ClassDiogram.drawio deleted file mode 100644 index fc4d271..0000000 --- a/Docs/ClassDiogram.drawio +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - From 87dd53c9220ebb7a8eedc68d13967dd5d1fe44cd Mon Sep 17 00:00:00 2001 From: Redsandy <34872843+Redsandyg@users.noreply.github.com> Date: Sat, 23 Apr 2022 20:28:33 +0300 Subject: [PATCH 37/37] Delete Ind_bollingerBands.py --- Ind_bollingerBands.py | 109 ------------------------------------------ 1 file changed, 109 deletions(-) delete mode 100644 Ind_bollingerBands.py diff --git a/Ind_bollingerBands.py b/Ind_bollingerBands.py deleted file mode 100644 index da9ef81..0000000 --- a/Ind_bollingerBands.py +++ /dev/null @@ -1,109 +0,0 @@ -import pandas as pd -import datetime -import numpy as np -import plotly as pl -import plotly.graph_objs as go -import matplotlib.pyplot as plt -import math -import scipy -import random -import statistics - - -import datetime -import matplotlib.dates as mdates -import matplotlib.pyplot as plt - -import mplfinance as mpf - -import plotly -#import plotly.plotly as py -import plotly.graph_objs as go -# these two lines allow your code to show up in a notebook -from plotly.offline import init_notebook_mode, iplot -from plotly.subplots import make_subplots -init_notebook_mode() - -import CoreTraidMath -import CoreDraw - - -class BB: - - def __init__(self, base_df,options={}, needFig=False,showOnlyIndex=True,drawFig=False): - self.base_df=base_df.reset_index(drop=True) - self.options=options - self.ans=self.getAns() - if needFig: - self.fig=self.pltShow(showOnlyIndex,drawFig) - - - - def getAns(self): - ans={} - - opMA={'dataType':'ohcl', - 'action':'findMean', - 'actionOptions':{ - 'MeanType':self.options['MeanType'], - 'valueType':self.options['valueType'], - 'window':self.options['window'] - } - } - ans['BB']=CoreTraidMath.CoreMath(self.base_df,opMA).ans - opSTD={'dataType':'ohcl', - 'action':'findSTD', - 'actionOptions':{'valueType':self.options['valueType'],'window':self.options['window']} - } - ans['STD']=CoreTraidMath.CoreMath(self.base_df,opSTD).ans - ans['pSTD']=ans['BB']+ans['STD']*self.options['kDev'] - ans['mSTD']=ans['BB']-ans['STD']*self.options['kDev'] - ans['x']=np.array(self.base_df['date'][self.options['window']-1:].to_list()) - return ans - - def pltShow(self,showOnlyIndex,drawFig): - ans=None - req=[] - row=1 - if not showOnlyIndex: - - #row=2 - req.append({ - 'vtype':'OCHL', - 'df':self.base_df, - 'row':1, - 'col':1, - 'name':'OHCL' - - }) - req.append({ - 'vtype':'Scatter', - 'df':pd.DataFrame( - {'value':self.ans['BB'],'date':self.ans['x']}) , - 'row':row, - 'col':1, - 'name':'BB' - - }) - req.append({ - 'vtype':'Scatter', - 'df':pd.DataFrame( - {'value':self.ans['pSTD'],'date':self.ans['x']}) , - 'row':row, - 'col':1, - 'name':'pSTD' - - }) - req.append({ - 'vtype':'Scatter', - 'df':pd.DataFrame( - {'value':self.ans['mSTD'],'date':self.ans['x']}) , - 'row':row, - 'col':1, - 'name':'mSTD' - - }) - - self.figDict=req - ans = CoreDraw.coreDraw(req,drawFig) - return ans \ No newline at end of file