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