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