#!/usr/bin/env python # coding: utf-8 # In[1]: 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 random import datetime import matplotlib.dates as mdates import matplotlib.pyplot as plt import plotly import plotly.graph_objs as go from plotly.offline import init_notebook_mode, iplot from plotly.subplots import make_subplots init_notebook_mode() #import CoreTraidMath import plotly.express as px # In[ ]: # In[2]: 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 # In[3]: 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 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 # In[ ]: