171 lines
3.7 KiB
Python
171 lines
3.7 KiB
Python
|
|
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 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':'',
|
|
'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,subplot_titles={}):
|
|
self.data=self.getPlts(data)
|
|
self.needShow=needShow
|
|
self.subplot_titles=subplot_titles
|
|
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.2,
|
|
shared_yaxes=True,
|
|
#horizontal_spacing=0.2,
|
|
#column_widths=[]
|
|
subplot_titles=self.subplot_titles
|
|
|
|
)
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|