从零学习量化交易56TopQuant函数库21ztools_drawpy

ztools_draw.py

# -*- coding: utf-8 -*- 
'''
Top极宽量化(原zw量化),Python量化第一品牌 

Top极宽·量化开源工具箱 系列软件 
by Top极宽·量化开源团队 2016.12.25 首发
  
文件名:ztools_draw.py
默认缩写:zdr,示例:import ztools_draw as zdr
简介:Top极宽量化软件,matplotlib绘图模块
'''


import sys,os
import numpy as np
import pandas as pd

import matplotlib as mpl
import matplotlib.pyplot as plt
#from PIL import Image,ImageDraw,ImageFont
#
#


import plotly as py
import plotly.graph_objs as pygo
from plotly import tools
from plotly.graph_objs import *
from plotly.graph_objs import Scatter, Layout, Figure
#from plotly.tools import FigureFactory as pyff
import plotly.figure_factory  as pyff
#
from sklearn import metrics
#
import zsys
import ztools as zt
import ztools_data as zdat

'''
var&const
#

misc
#
dr.mul.xxx
dr.fintech
#

'''
#----var&const.pre_def
pyplt=py.offline.plot

#----------dr.xxx
#
     
#----------drm.sub.xxx   
def drm_lay(df,m_title,m_dtick=10,m_tkAng=-20):
    lay = pygo.Layout( 
        title=m_title,
        xaxis=pygo.XAxis(
            gridcolor='rgb(180, 180, 180)',
            mirror='all',
            showgrid=True,
            showline=True,
            ticks='outside',#'inside',
            #
            dtick=m_dtick,
            tickangle=m_tkAng,
            #
            type='category',
            categoryarray=df.index,
        ),
    )
    #
    return lay


def drm_cdlsub(df,hdr='K线图'):
    '''
    根据输入数据df,绘制k线图。
输入参数:
		df,输入数据集变量,数据数据必须包括标准的OHLC数据和volume成交量数据字段。
	hdr,图片标题,默认为“k线图”。
	ftg,输出文件名,默认为:mp/tmp_plotly.html。
返回参数:
	无

    '''
    fig=pyff.create_candlestick(df.open, df.high, df.low, df.close, dates=df.index)
    fig['layout'].update(title=hdr,
        xaxis=pygo.XAxis(
            autorange=True,
            gridcolor='rgb(180, 180, 180)',
            mirror='all',
            showgrid=True,
            showline=True,
            ticks='outside',
            tickangle=-20,
            dtick=10,
            type='category',
            categoryarray=df.index,
            ),
        yaxis=pygo.YAxis(
            autorange=True,
            gridcolor='rgb(180, 180, 180)',
            ),
        yaxis2=pygo.YAxis(
                side='right', 
                overlaying='y',
                range=[0,max(df['volume'])*3],
            ),
    )  # fig.update
    r_vol = pygo.Bar(
            x=df.index,#df['xtim'],
            y=df['volume'],
            name='volume',
            yaxis= 'y2',
            opacity=0.6,
            marker=dict(
                color='rgb(158,202,225)',
                line=dict(color='rgb(8,48,107)',width=1.5,),
            ),
    )   #r_vol
    #
    fig['data'].extend([r_vol])
            
    #
    return fig   
         
def drm_ptsub(df,vsgn,wid=1,cor='',syb='circle'):
    # syb:xxx-open , circle square diamond cross x triangle star octagon hexagram  hexagram2
    rx = pygo.Scatter(
            x=df.index,#df['xtim'],
            y=df[vsgn],
            #name=vsgn,
            name='',
            showlegend=False,
            #connectgaps=True,
            mode = 'markers',
            #if v<0:cor=''.join(['rgb(',str(abs(v)),',0,0)'])
            #if v>0:cor=''.join(['rgb(0,0,',v,')'])
            marker=dict(color=cor, size=wid,symbol=syb)
        )
    #
    return rx   

def drm_lnsub(df,vsgn,wid=2,cor='#FF0000'):
    rx = pygo.Scatter(
            x=df.index,#df['xtim'],
            y=df[vsgn],
            name=vsgn,
            mode = 'lines',
            #mode = 'lines+markers',
            #
            line=dict(width=wid,color=cor),
    )
    #
    return rx
            

#----------------drm.xxxx
def drm_pt(df,hdr='多维数据图',xlst=['avg','high','low'],wid=2,ftg='tmp/tmp_plotly.html'):
    '''
    根据输入数据df,绘制多散点图。
输入参数:
	df,输入数据集变量,数据数据必须包括xlst列表当中的数据字段。
	xlst,需要绘制的数据字段名称。
	wid,点图直径宽度,默认为2。
	ftg,输出文件名,默认为:mp/tmp_plotly.html。
返回参数:
	无

    '''
    xdat = pygo.Data()
    #
    vlst=['circle','square','diamond','x','star','octagon','hexagram','triangle','cross']
    vc=0
    # syb:xxx-open , circle square diamond cross x triangle star octagon hexagram  hexagram2
    for xsgn in xlst:
        rx=drm_ptsub(df,xsgn,wid,syb=vlst[vc])
        vc+=1
        xdat.extend([rx])
    #
    lay=drm_lay(df,hdr,m_dtick=20,m_tkAng=-20)
    fig = pygo.Figure(data=xdat, layout=lay)
    pyplt(fig,filename=ftg,show_link=False)
    
   
def drm_line(df,hdr='多维数据图',xlst=['avg','high','low'],p0wid=3,wid=1,ftg='tmp/tmp_plotly.html'):
    '''
    根据输入数据df,绘制多条曲线图。
输入参数:
	df,输入数据集变量,数据数据必须包括xlst列表当中的数据字段。
	xlst,需要绘制的数据字段名称。
	wid,曲线宽度,默认为2。
	ftg,输出文件名,默认为:mp/tmp_plotly.html。
返回参数:
	无
'''
    xdat = pygo.Data()
    #
    xc=0
    for xsgn in xlst:
        if xc==0:
            rx=drm_lnsub(df,xsgn,p0wid)
        else:
            rx=drm_lnsub(df,xsgn,wid)
        #    
        xc+=1
        xdat.extend([rx])
    #
    lay=drm_lay(df,hdr,m_dtick=20,m_tkAng=-20)
    fig = pygo.Figure(data=xdat, layout=lay)
    pyplt(fig,filename=ftg,show_link=False)
    
#-----------



def drm_cdl(df,hdr='K线图',ftg='tmp/tmp_plotly.html'):
    '''
    根据输入数据df,绘制k线图。
输入参数:
		df,输入数据集变量,数据数据必须包括标准的OHLC数据和volume成交量数据字段。
	hdr,图片标题,默认为“k线图”。
	ftg,输出文件名,默认为:mp/tmp_plotly.html。
返回参数:
	无

    '''
    fig=drm_cdlsub(df,hdr)
    #
    pyplt(fig,filename=ftg,show_link=False)   
    
def drm_xcdl(df,hdr='K线图',xlst=[],ftg='tmp/tmp_plotly.html'):
    '''
    根据输入数据df,绘制k线图。
输入参数:
		df,输入数据集变量,数据数据必须包括标准的OHLC数据和volume成交量数据字段。
	hdr,图片标题,默认为“k线图”。
	ftg,输出文件名,默认为:mp/tmp_plotly.html。
返回参数:
	无

    '''
    fig=drm_cdlsub(df,hdr)
    #
    for xsgn in xlst:
        rx=drm_lnsub(df,xsgn,1)
        #xdat.extend([rx])
        fig['data'].extend([rx])
    #
    pyplt(fig,filename=ftg,show_link=False)   
        
#---------drm.x.xxx    
    
def drm_xline(df,hdr='多维数据图',xlst=['t1','t5','t15'],p9df=None,p1df=None,psgn='avg',p9syb='star',p1syb='x',ftg='tmp/tmp_plotly.html'):
    xdat = pygo.Data()
    #
    for xsgn in xlst:
        rx=drm_lnsub(df,xsgn,2)
        xdat.extend([rx])
    #
    # -open , circle square diamond cross x triangle star octagon hexagram  hexagram2
    #
    if isinstance(p9df, pd.DataFrame):
        rx=drm_ptsub(p9df,psgn,10,cor='rgb(250,0,0)',syb=p9syb)
        xdat.extend([rx])
    #
    if isinstance(p1df, pd.DataFrame):
        rx=drm_ptsub(p1df,psgn,10,cor='rgb(0,0,250)',syb=p1syb)
        xdat.extend([rx])
    #
    
    lay=drm_lay(df,hdr,m_dtick=20,m_tkAng=-20)
    fig = pygo.Figure(data=xdat, layout=lay)
    #
    pyplt(fig,filename=ftg,show_link=False)
            

"""
    The 'color' property is a color and may be specified as:
      - A hex string (e.g. '#ff0000')
      - An rgb/rgba string (e.g. 'rgb(255,0,0)')
      - An hsl/hsla string (e.g. 'hsl(0,100%,50%)')
      - An hsv/hsva string (e.g. 'hsv(0,100%,100%)')
      - A named CSS color:
            aliceblue, antiquewhite, aqua, aquamarine, azure,
            beige, bisque, black, blanchedalmond, blue,
            blueviolet, brown, burlywood, cadetblue,
            chartreuse, chocolate, coral, cornflowerblue,
            cornsilk, crimson, cyan, darkblue, darkcyan,
            darkgoldenrod, darkgray, darkgrey, darkgreen,
            darkkhaki, darkmagenta, darkolivegreen, darkorange,
            darkorchid, darkred, darksalmon, darkseagreen,
            darkslateblue, darkslategray, darkslategrey,
            darkturquoise, darkviolet, deeppink, deepskyblue,
            dimgray, dimgrey, dodgerblue, firebrick,
            floralwhite, forestgreen, fuchsia, gainsboro,
            ghostwhite, gold, goldenrod, gray, grey, green,
            greenyellow, honeydew, hotpink, indianred, indigo,
            ivory, khaki, lavender, lavenderblush, lawngreen,
            lemonchiffon, lightblue, lightcoral, lightcyan,
            lightgoldenrodyellow, lightgray, lightgrey,
            lightgreen, lightpink, lightsalmon, lightseagreen,
            lightskyblue, lightslategray, lightslategrey,
            lightsteelblue, lightyellow, lime, limegreen,
            linen, magenta, maroon, mediumaquamarine,
            mediumblue, mediumorchid, mediumpurple,
            mediumseagreen, mediumslateblue, mediumspringgreen,
            mediumturquoise, mediumvioletred, midnightblue,
            mintcream, mistyrose, moccasin, navajowhite, navy,
            oldlace, olive, olivedrab, orange, orangered,
            orchid, palegoldenrod, palegreen, paleturquoise,
            palevioletred, papayawhip, peachpuff, peru, pink,
            plum, powderblue, purple, red, rosybrown,
            royalblue, rebeccapurple, saddlebrown, salmon,
            sandybrown, seagreen, seashell, sienna, silver,
            skyblue, slateblue, slategray, slategrey, snow,
            springgreen, steelblue, tan, teal, thistle, tomato,
            turquoise, violet, wheat, white, whitesmoke,
            yellow, yellowgreen

"""            

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/913358
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 3小时前
下一篇 3小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注