初次接触 PyQT, 鸣谢 散漫 童鞋 - Jacky Liu's Blog

初次接触 PyQT, 鸣谢 散漫 童鞋

Jacky Liu posted @ 2013年5月18日 22:59 in Python with tags python pyqt Matplotlib , 7479 阅读

    ---- 这是 散漫 童鞋昨天发给我的 PyQT4 演示脚本画出来的图片。他只发了绘图脚本却没发数据文件给我,所以我生造了一个数据文件。因为错拿日线数据当成日内数据作为输入,所以图里的内容看起来很无稽,但只要能把图画出来就可以了:

 

    ---- 发给我的脚本是跑在 windows 上面的,我在 ubuntu 下面改了一个 py2 版和一个 py3 版:

py2 版:

# -*- coding: utf-8 -*-



#!/usr/bin/python

import sys
import random
from PyQt4 import QtGui, QtCore,Qt

class report_painter:
    '''绘制行情类'''
    def __init__(self,parent):
        
        #初始化
        self.parent = parent
        self.paint = QtGui.QPainter()
        self.paint.begin(self.parent)

        #设置抗锯齿
        #self.paint.setRenderHint(QtGui.QPainter.Antialiasing)
        #度量尺对象
        self.metrics = self.paint.fontMetrics()
        
        #设置字体库
        self.fonts = dict()
        self.fonts['default'] = QtGui.QFont('Serif', 9, QtGui.QFont.Light)
        self.fonts['yahei_14_bold']= QtGui.QFont('Serif',12,QtGui.QFont.Bold)
        self.fonts['yahei_14']= QtGui.QFont('Serif',12,QtGui.QFont.Light)
        self.setFont('default')

        #设置笔刷样式库
        self.pens = dict()
        
        #红色 1px粗  1px点 2px距 线条
        self.pens['red_1px_dashline'] =  QtGui.QPen( QtCore.Qt.red, 1, QtCore.Qt.DashLine) 
        self.pens['red_1px_dashline'].setDashPattern([1,2])

        #红色 1px粗 实线条
        self.pens['red'] = QtGui.QPen( QtCore.Qt.red, 1, QtCore.Qt.SolidLine)
        #红色 3px粗 实线条
        self.pens['red_2px'] = QtGui.QPen( QtCore.Qt.red, 2, QtCore.Qt.SolidLine)
        #红色 2px粗 实线条
        self.pens['red_3px'] = QtGui.QPen( QtCore.Qt.red, 3, QtCore.Qt.SolidLine)
        #黄色 1px粗 实线条
        self.pens['yellow'] = QtGui.QPen( QtCore.Qt.yellow, 1, QtCore.Qt.SolidLine)
        #白色 1px粗 实线条
        self.pens['white']  = QtGui.QPen( QtCore.Qt.white , 1, QtCore.Qt.SolidLine)
        #灰色 1px粗 实线条
        self.pens['gray']   = QtGui.QPen( QtCore.Qt.gray, 1, QtCore.Qt.SolidLine)
        #绿色 1px粗 实线条
        self.pens['green']   = QtGui.QPen( QtCore.Qt.green, 1, QtCore.Qt.SolidLine)
        #绿色 3px粗 实线条
        self.pens['green_2px']   = QtGui.QPen( QtCore.Qt.green, 2, QtCore.Qt.SolidLine)
        #亮蓝 1px粗  1px点 2px距 线条
        self.pens['cyan_1px_dashline'] =  QtGui.QPen( QtCore.Qt.cyan, 1, QtCore.Qt.DashLine) 
        self.pens['cyan_1px_dashline'].setDashPattern([3,2])
        #获得窗口的长和宽
        size      = self.parent.size()
        self.w    = size.width()
        self.h    = size.height()

        #设置grid的上下左右补丁边距
        self.grid_padding_left   = 45  #左侧补丁边距
        self.grid_padding_right  = 245 #右侧补丁边距
        self.grid_padding_top    = 25  #顶部补丁边距
        self.grid_padding_bottom = 17  #底部补丁边距
            
        #开始绘制
        self.start_paint()


        self.paint.end()   #结束
    '''绘制流程步骤'''
    def start_paint(self):
        self.PriceGridPaint()
        self.rightGridPaint()
        self.timelinePaint()
        self.topInfoPaint()
        self.rulerPaint()
        self.VolumeGridPaint()
        self.volumePaint()
        self.pricePaint()
        self.xyPaint()
    '''设置使用的字体'''
    def setFont(self,code='default'):
        self.paint.setFont(self.fonts[code])
        
    '''设置使用的笔刷'''
    def setPen(self,code='default'):
        self.paint.setPen(self.pens[code])
        
    '''绘制股价走势表格'''
    def PriceGridPaint(self):
        self.setPen('red')
        self.paint.setBrush(QtCore.Qt.NoBrush)
        
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom

        grid_height = self.h-sum_height

        #画边框
        self.paint.drawRect(self.grid_padding_left,self.grid_padding_top,
                            self.w-sum_width,self.h-sum_height)
        #成交量和走势的分界线
        self.paint.drawLine(self.grid_padding_left,grid_height*0.7+self.grid_padding_top,
                            self.w-self.grid_padding_right,grid_height*0.7+self.grid_padding_top)

        #股票昨收中间线
        self.paint.drawLine(self.grid_padding_left+1,
                            grid_height*0.35+self.grid_padding_top,
                            self.w-self.grid_padding_right
                            ,grid_height*0.35+self.grid_padding_top)

        #其他线条
        self.paint.drawLine(0,self.h-self.grid_padding_bottom,self.w-self.grid_padding_right+44,self.h-self.grid_padding_bottom)
        self.paint.drawLine(0,self.h-self.grid_padding_bottom+16,self.w,self.h-self.grid_padding_bottom+16)

        self.paint.drawLine(self.w-self.grid_padding_right,0,
                            self.w-self.grid_padding_right,self.h-self.grid_padding_bottom+16)
        self.paint.drawLine(self.w-self.grid_padding_right+44,0,
                            self.w-self.grid_padding_right+44,self.h-self.grid_padding_bottom+16)
        self.setPen('yellow')
        self.paint.drawText(self.w-self.grid_padding_right+5,self.h-self.grid_padding_bottom-4,QtCore.QString(u'成交量'))
        self.setPen('white')
        #右下角文字
        self.paint.drawText(self.w-self.grid_padding_right+12,self.h-self.grid_padding_bottom+12,QtCore.QString(u'实时'))
    '''绘制成交量走势表格'''
    def VolumeGridPaint(self):
        sum_width  = self.grid_padding_left + self.grid_padding_right
        sum_height = self.grid_padding_top  + self.grid_padding_bottom
        
        grid_height = self.h-sum_height
        max_volume = self.parent.stk_data['max_vol']
        
        px_h_radio = max_volume/(grid_height*0.3)
        
        self.setPen('red_1px_dashline')
        
        
        grid_num = 6
        x = grid_num
        cnt = grid_height*0.3/grid_num
        for i in range(0,grid_num):
            self.setPen('red_1px_dashline')
            #计算坐标
            y1 = self.grid_padding_top+(grid_height*0.7)+i*cnt
            x1 = self.grid_padding_left
            x2 = self.grid_padding_left+self.w-sum_width
            
            self.paint.drawLine(x1,y1,x2,y1) #画价位虚线
            
            vol_int = int(cnt*x*px_h_radio)
            vol_str = str(vol_int)
            fw = self.metrics.width(vol_str) #获得文字宽度
            fh = self.metrics.height()/2   #获得文字高度
            self.setPen('yellow')
            self.paint.drawText(x2+40-fw,y1+fh,vol_str) #写入文字
            self.setPen('white')
            self.paint.drawText(x1-2-self.metrics.width(str(x)),y1+fh,str(x))    #写入文字
            x-=1
            
        
    '''绘制左侧信息栏和盘口等内容'''
    def rightGridPaint(self):
        self.setPen('red')
        #绘制信息内容之间的分割线
        _h = 0
        _x = self.w-self.grid_padding_right+44
        self.paint.drawLine(self.w-1,0,self.w-1,self.h-self.grid_padding_bottom+16)
        self.paint.drawLine(0,0,0,self.h-self.grid_padding_bottom+16)
        self.paint.drawLine(0,_h,self.w,_h)
        _h+=23
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=24
        self.paint.drawLine(_x,_h,self.w,_h)

        _h+=93
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=20
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=93
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=123
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=23
        self.paint.drawLine(_x,_h,self.w,_h)
        #股票名称和代码
        self.setFont('yahei_14_bold')
        self.setPen('yellow')
        name_str = QtCore.QString(u'%s %s'%(self.parent.stk_info['code'],self.parent.stk_info['name']))
        self.paint.drawText(_x+35,18,name_str)
        #委比和委差
        self.setFont('yahei_14')
        zx_str = QtCore.QString(u'最新')
        self.paint.drawText(_x+3  ,156,zx_str)
        self.setPen('gray')
        wb_str = QtCore.QString(u'委比')
        wc_str = QtCore.QString(u'委差')
        xs_str = QtCore.QString(u'现手')
        self.paint.drawText(_x+3  ,39,wb_str)
        self.paint.drawText(_x+100,39,wc_str)
        self.paint.drawText(_x+100,156,xs_str)
        fh = self.metrics.height()
        
        left_field_list = [u'涨跌',u'涨幅',u'振幅',u'总手',u'总额',u'换手',u'分笔']
        i = 1
        for field in left_field_list:
            field_str = QtCore.QString(field)
            self.paint.drawText(_x+3,253+(i*17),field_str)
            i+=1

        right_field_list = [u'均价',u'前收',u'今开',u'最高',u'最低',u'量比',u'均量']
        
        i = 1
        for field in right_field_list:
            field_str = QtCore.QString(field)
            self.paint.drawText(_x+100,253+(i*17),field_str)
            i+=1

        wp_str = QtCore.QString(u'外盘')
        np_str = QtCore.QString(u'内盘')
        self.paint.drawText(_x+3,395,wp_str)
        self.paint.drawText(_x+100,395,np_str)
        #卖①②③④⑤
        
        i = 0
        sell_queue = [u'卖⑤',u'卖④',u'卖③',u'卖②',u'卖①']
        for sell in sell_queue:
            sell_str = QtCore.QString(sell)
            self.paint.drawText(_x+3,62+(i*18),sell_str)
            i+=1
        #买①②③④⑤
        buy_queue = [u'买①',u'买②',u'买③',u'买④',u'买⑤']
        for buy in buy_queue:
            buy_str = QtCore.QString(buy)
            self.paint.drawText(_x+3,87+(i*18),buy_str)
            i+=1

        self.setPen('red_2px')
        self.paint.drawLine(_x+1,377,_x+99,377)
        self.paint.drawLine(_x+1,46,_x+65,46)
        self.setPen('green_2px')
        self.paint.drawLine(_x+102,377,_x+199,377)
        self.paint.drawLine(_x+67,46,_x+199,46)
        self.setFont('default')
        
    '''绘制左右侧的价格刻度'''
    def rulerPaint(self):
        
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom

        grid_height = self.h-sum_height
        
        high = self.parent.stk_data['high']
        low  = self.parent.stk_data['low']
        lastclose = self.parent.stk_data['lastclose']

        top = high-lastclose
        bottom = lastclose-low
        if top>bottom:
            padding = top
        else:
            padding = bottom
            
        limit_top = lastclose+padding
        limit_low = lastclose-padding


        px_h_radio = (grid_height*0.7)/((limit_top-limit_low)*100)

        
        self.setPen('red_1px_dashline')

        grid_num = 16 
        cnt = grid_height*0.7/grid_num
        
        for i in range(0,grid_num):
            self.setPen('red_1px_dashline')
            #计算坐标
            y1 = self.grid_padding_top+i*cnt
            x1 = self.grid_padding_left
            x2 = self.grid_padding_left+self.w-sum_width
            
            self.paint.drawLine(x1,y1,x2,y1) #画价位虚线
            
            price_float = (limit_top - ((i*cnt)/px_h_radio/100)) #计算价格
            price = '%4.2f'%(price_float) #格式化价格成str
            
            fw = self.metrics.width(price) #获得文字宽度
            fh = self.metrics.height()/2   #获得文字高度

            radio_float = (price_float/lastclose-1)*100 #计算波动百分比
            radio_str   = "%2.2f%%"%(radio_float)      #格式化百分比成str

            r_fw = self.metrics.width(radio_str)
            r_fh = self.metrics.height()/2
            #判断文字使用的颜色
            if price_float == lastclose:
                self.setPen('white')
            if price_float < lastclose:
                self.setPen('green')
                
            self.paint.drawText(x1-fw-2,y1+fh,price) #写入文字
            self.paint.drawText(x2+40-r_fw,y1+r_fh,radio_str) #写入文字
    '''绘制x,y准星'''
    def xyPaint(self):
        if self.parent.m_x >= self.grid_padding_left and self.parent.m_x<=self.w-self.grid_padding_right and self.parent.m_y>=self.grid_padding_top and self.parent.m_y<=self.h-self.grid_padding_bottom:
            self.setPen('gray')
            x1 = self.grid_padding_left
            x2 = self.w-self.grid_padding_right
            y1 = self.grid_padding_top
            y2 = self.h-self.grid_padding_bottom
            self.paint.drawLine(x1+1,self.parent.m_y,x2-1,self.parent.m_y)
            self.paint.drawLine(self.parent.m_x,y1+1,self.parent.m_x,y2-1)
            
            
    
    '''绘制时间轴刻度'''
    def timelinePaint(self):
        
        fw = self.metrics.width(u'00:00') #计算文字的宽度
        
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom
        
        grid_width = self.w-sum_width-2
        
        
        y1 = self.grid_padding_top
        y2 = y1+(self.h-sum_height)

        #时间轴中线
        self.setPen('red')
        x_pos = grid_width/2+self.grid_padding_left
        
        self.paint.drawLine(x_pos,y1,x_pos,y2)
        self.paint.drawText(x_pos-fw/2,y2+12,QtCore.QString(u'13:00'))
        
        #时间轴09点30分
        x_pos = self.grid_padding_left
        self.paint.drawText(x_pos,y2+12,QtCore.QString(u'09:30'))
        
        #时间轴10点30分
        x_pos = grid_width*0.25+self.grid_padding_left
        self.paint.drawLine(x_pos,y1,x_pos,y2)
        self.paint.drawText(x_pos-fw/2,y2+12,QtCore.QString(u'10:30'))

        #时间轴14点00分
        x_pos = grid_width*0.75+self.grid_padding_left
        self.paint.drawLine(x_pos,y1,x_pos,y2)
        self.paint.drawText(x_pos-fw/2,y2+12,QtCore.QString(u'14:00'))

        #时间轴15点00分
        x_pos = grid_width+self.grid_padding_left
        self.paint.drawText(x_pos-fw,y2+12,QtCore.QString(u'15:00'))

        #时间虚线 by 30min
        self.setPen('red_1px_dashline')
        x_pos_array = [0.125,0.375,0.625,0.875]
        for i in x_pos_array:
            x_pos = grid_width*i+self.grid_padding_left
            self.paint.drawLine(x_pos,y1,x_pos,y2)

        
    '''绘制表格上方的股票信息'''
    def topInfoPaint(self):
        self.setPen('yellow')
        self.paint.drawText(4+self.grid_padding_left,self.grid_padding_top-4
                            ,QtCore.QString(self.parent.stk_info['name'])) #股票名称
        self.paint.drawText(4+self.grid_padding_left+120,self.grid_padding_top-4
                            ,QtCore.QString(u'均价线:')) #均价线
        lastclose = self.parent.stk_data['lastclose']
        close     = self.parent.stk_data['close']
        mma       = self.parent.stk_data['list']['mma'][-1]
        
        if lastclose>close:
            self.setPen('green')
            str_1 = '%.2f -%.2f'%(close,lastclose-close)
        if lastclose==close:
            self.setPen('white')
            str_1 = '%.2f +%.2f'%(close,0.00)
        if lastclose<close:
            self.setPen('red')
            str_1 = '%.2f +%.2f'%(close,close-lastclose)
        
        if mma>close:
            self.setPen('green')
        if mma==close:
            self.setPen('white')
        if mma<close:
            self.setPen('red')
        
        self.paint.drawText(4+self.grid_padding_left+55,self.grid_padding_top-4,QtCore.QString(str_1))
        self.paint.drawText(4+self.grid_padding_left+165,self.grid_padding_top-4,QtCore.QString('%.2f'%mma)) #均价
        
        #涨停价
        self.setPen('red')
        self.paint.drawText(4+self.grid_padding_left+200,self.grid_padding_top-4,QtCore.QString(u'涨停价:%.2f'%(lastclose*1.1))) #均价
        #跌停价
        self.setPen('green')
        self.paint.drawText(4+self.grid_padding_left+280,self.grid_padding_top-4,QtCore.QString(u'跌停价:%.2f'%(lastclose*0.9))) #均价
    '''绘制股价走势'''
    def pricePaint(self):
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom

        grid_height = self.h-sum_height-2
        
        high = self.parent.stk_data['high']
        low  = self.parent.stk_data['low']
        lastclose = self.parent.stk_data['lastclose']

        top = high-lastclose
        bottom = lastclose-low
        if top>bottom:
            padding = top
        else:
            padding = bottom
            
        limit_top = lastclose+padding
        limit_low = lastclose-padding
        
        h_radio = (grid_height*0.7)/((limit_top-limit_low)*100)

        w_radio = (self.w-sum_width-2)/240.00
        w = self.grid_padding_left
        
        self.setPen('white')
        path = QtGui.QPainterPath()
        path.moveTo(w,(limit_top-self.parent.stk_data['open'])*100*h_radio+self.grid_padding_top)
        i  = 1
        for price in self.parent.stk_data['list']['close']:
            w = i*w_radio+self.grid_padding_left
            y = (limit_top-price)*100*h_radio+self.grid_padding_top
            path.lineTo(w,y)
            i+=1
        self.paint.drawPath(path)
        self.setPen('cyan_1px_dashline')
        self.paint.drawLine(self.grid_padding_left+1,y,w-1,y)
        self.setPen('yellow')
        path = QtGui.QPainterPath()
        w = self.grid_padding_left
        path.moveTo(w,(limit_top-self.parent.stk_data['open'])*100*h_radio+self.grid_padding_top)
        i  = 1
        for price in self.parent.stk_data['list']['mma']:
            w = i*w_radio+self.grid_padding_left
            y = (limit_top-price)*100*h_radio+self.grid_padding_top
            path.lineTo(w,y)
            i+=1
        self.paint.drawPath(path)
        
        
    '''绘制成交量'''
    def volumePaint(self):
        sum_width  = self.grid_padding_left + self.grid_padding_right
        sum_height = self.grid_padding_top  + self.grid_padding_bottom

        max_volume = self.parent.stk_data['max_vol'] #最大分钟成交量
        
        w_radio = (self.w-sum_width-2)/240.00
        h_radio = ((self.h-sum_height-2)*0.3)/max_volume

        y = (self.h-sum_height)+self.grid_padding_top
        
        self.setPen('yellow')


            
        for i in range(1,len(self.parent.stk_data['list']['vol'])+1):
            x = i*w_radio+self.grid_padding_left
            y2 = h_radio*self.parent.stk_data['list']['vol'][i-1]
            self.paint.drawLine(x,y-1,x,y-y2)

class Test(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setMinimumSize(640, 430) #设置窗口最小尺寸
        self.setGeometry(300, 300, 960, 650)
        self.setWindowTitle(QtCore.QString(u'超级狙击手[内部开发测试版]-行情实时走势'))
        self.setStyleSheet("QWidget { background-color: black }")
        self.setWindowIcon(QtGui.QIcon('ruby.png'))
        self.setMouseTracking(True)
        self.m_x = 0 #光标x轴位置
        self.m_y = 0 #光标y轴位置
        
        self.stk_info = {}
        
        self.stk_info['name'] = u'浙江东方'
        self.stk_info['code'] = u'600120'
        self.stk_info['market'] = 'SH'
        
        self.stk_data = {}
        self.stk_data['list'] = {} #股价序列
        self.stk_data['list']['time']  = [] #时间
        self.stk_data['list']['open']  = [] #开盘价
        self.stk_data['list']['high']  = [] #最高价
        self.stk_data['list']['low']   = [] #最低价
        self.stk_data['list']['close'] = [] #收盘价
        self.stk_data['list']['vol']   = [] #成交量
        self.stk_data['list']['amount']= [] #成交额
        self.stk_data['list']['mma']= []   #分时均价
        
        self.stk_data['list']['buy_port'] = [(0.00,0),(0.00,0),(0.00,0),(0.00,0),(0.00,0)]  #买盘前五
        self.stk_data['list']['sell_port'] = [(0.00,0),(0.00,0),(0.00,0),(0.00,0),(0.00,0)] #卖盘前五
        
        #读取数据
        f = open('SH600120.txt','r')
        data = f.readlines()
        f.close()
        
        for row in data:
            vars = row.split(' ')
            self.stk_data['list']['time'].append(vars[1])
            self.stk_data['list']['open'].append(float(vars[2]))
            self.stk_data['list']['high'].append(float(vars[3]))
            self.stk_data['list']['low'].append(float(vars[4]))
            self.stk_data['list']['close'].append(float(vars[5]))
            self.stk_data['list']['vol'].append(int(float(vars[6])))
            self.stk_data['list']['amount'].append(int(float(vars[7])))
            
            sum_vol = sum(self.stk_data['list']['vol'])
            sum_amt = sum(self.stk_data['list']['amount'])

            self.stk_data['list']['mma'].append(float(sum_amt)/(sum_vol*100.00))
            
        self.stk_data['lastclose'] = 10.12 #上一个交易日收盘价
        self.stk_data['open'] = self.stk_data['list']['open'][0]       #开盘价
        self.stk_data['high'] = max(self.stk_data['list']['high'])     #最高价
        self.stk_data['low']  = min(self.stk_data['list']['low'])      #最低价
        self.stk_data['close']= self.stk_data['list']['close'][-1]     #收盘价
        self.stk_data['max_vol']  = max(self.stk_data['list']['vol'])  #当日最高成交量
        
            
    def mouseMoveEvent(self, event):
        self.m_x =  int(event.x())
        self.m_y =  int(event.y())
        self.repaint()
    def paintEvent(self, event):
        report_painter(self)

app = QtGui.QApplication(sys.argv)
dt = Test()
dt.show()
app.exec_()

 

py3 版:

# -*- coding: utf-8 -*-



#!/usr/bin/python

import sys
import random
from PyQt4 import QtGui, QtCore,Qt

class report_painter:
    '''绘制行情类'''
    def __init__(self,parent):
        
        #初始化
        self.parent = parent
        self.paint = QtGui.QPainter()
        self.paint.begin(self.parent)

        #设置抗锯齿
        #self.paint.setRenderHint(QtGui.QPainter.Antialiasing)
        #度量尺对象
        self.metrics = self.paint.fontMetrics()
        
        #设置字体库
        self.fonts = dict()
        self.fonts['default'] = QtGui.QFont('Serif', 9, QtGui.QFont.Light)
        self.fonts['yahei_14_bold']= QtGui.QFont('Serif',12,QtGui.QFont.Bold)
        self.fonts['yahei_14']= QtGui.QFont('Serif',12,QtGui.QFont.Light)
        self.setFont('default')

        #设置笔刷样式库
        self.pens = dict()
        
        #红色 1px粗  1px点 2px距 线条
        self.pens['red_1px_dashline'] =  QtGui.QPen( QtCore.Qt.red, 1, QtCore.Qt.DashLine) 
        self.pens['red_1px_dashline'].setDashPattern([1,2])

        #红色 1px粗 实线条
        self.pens['red'] = QtGui.QPen( QtCore.Qt.red, 1, QtCore.Qt.SolidLine)
        #红色 3px粗 实线条
        self.pens['red_2px'] = QtGui.QPen( QtCore.Qt.red, 2, QtCore.Qt.SolidLine)
        #红色 2px粗 实线条
        self.pens['red_3px'] = QtGui.QPen( QtCore.Qt.red, 3, QtCore.Qt.SolidLine)
        #黄色 1px粗 实线条
        self.pens['yellow'] = QtGui.QPen( QtCore.Qt.yellow, 1, QtCore.Qt.SolidLine)
        #白色 1px粗 实线条
        self.pens['white']  = QtGui.QPen( QtCore.Qt.white , 1, QtCore.Qt.SolidLine)
        #灰色 1px粗 实线条
        self.pens['gray']   = QtGui.QPen( QtCore.Qt.gray, 1, QtCore.Qt.SolidLine)
        #绿色 1px粗 实线条
        self.pens['green']   = QtGui.QPen( QtCore.Qt.green, 1, QtCore.Qt.SolidLine)
        #绿色 3px粗 实线条
        self.pens['green_2px']   = QtGui.QPen( QtCore.Qt.green, 2, QtCore.Qt.SolidLine)
        #亮蓝 1px粗  1px点 2px距 线条
        self.pens['cyan_1px_dashline'] =  QtGui.QPen( QtCore.Qt.cyan, 1, QtCore.Qt.DashLine) 
        self.pens['cyan_1px_dashline'].setDashPattern([3,2])
        #获得窗口的长和宽
        size      = self.parent.size()
        self.w    = size.width()
        self.h    = size.height()

        #设置grid的上下左右补丁边距
        self.grid_padding_left   = 45  #左侧补丁边距
        self.grid_padding_right  = 245 #右侧补丁边距
        self.grid_padding_top    = 25  #顶部补丁边距
        self.grid_padding_bottom = 17  #底部补丁边距
            
        #开始绘制
        self.start_paint()


        self.paint.end()   #结束
    '''绘制流程步骤'''
    def start_paint(self):
        self.PriceGridPaint()
        self.rightGridPaint()
        self.timelinePaint()
        self.topInfoPaint()
        self.rulerPaint()
        self.VolumeGridPaint()
        self.volumePaint()
        self.pricePaint()
        self.xyPaint()
    '''设置使用的字体'''
    def setFont(self,code='default'):
        self.paint.setFont(self.fonts[code])
        
    '''设置使用的笔刷'''
    def setPen(self,code='default'):
        self.paint.setPen(self.pens[code])
        
    '''绘制股价走势表格'''
    def PriceGridPaint(self):
        self.setPen('red')
        self.paint.setBrush(QtCore.Qt.NoBrush)
        
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom

        grid_height = self.h-sum_height

        #画边框
        self.paint.drawRect(self.grid_padding_left,self.grid_padding_top,
                            self.w-sum_width,self.h-sum_height)
        #成交量和走势的分界线
        self.paint.drawLine(self.grid_padding_left,grid_height*0.7+self.grid_padding_top,
                            self.w-self.grid_padding_right,grid_height*0.7+self.grid_padding_top)

        #股票昨收中间线
        self.paint.drawLine(self.grid_padding_left+1,
                            grid_height*0.35+self.grid_padding_top,
                            self.w-self.grid_padding_right
                            ,grid_height*0.35+self.grid_padding_top)

        #其他线条
        self.paint.drawLine(0,self.h-self.grid_padding_bottom,self.w-self.grid_padding_right+44,self.h-self.grid_padding_bottom)
        self.paint.drawLine(0,self.h-self.grid_padding_bottom+16,self.w,self.h-self.grid_padding_bottom+16)

        self.paint.drawLine(self.w-self.grid_padding_right,0,
                            self.w-self.grid_padding_right,self.h-self.grid_padding_bottom+16)
        self.paint.drawLine(self.w-self.grid_padding_right+44,0,
                            self.w-self.grid_padding_right+44,self.h-self.grid_padding_bottom+16)
        self.setPen('yellow')
        self.paint.drawText(self.w-self.grid_padding_right+5,self.h-self.grid_padding_bottom-4,str('成交量'))
        self.setPen('white')
        #右下角文字
        self.paint.drawText(self.w-self.grid_padding_right+12,self.h-self.grid_padding_bottom+12,str('实时'))
    '''绘制成交量走势表格'''
    def VolumeGridPaint(self):
        sum_width  = self.grid_padding_left + self.grid_padding_right
        sum_height = self.grid_padding_top  + self.grid_padding_bottom
        
        grid_height = self.h-sum_height
        max_volume = self.parent.stk_data['max_vol']
        
        px_h_radio = max_volume/(grid_height*0.3)
        
        self.setPen('red_1px_dashline')
        
        
        grid_num = 6
        x = grid_num
        cnt = grid_height*0.3/grid_num
        for i in range(0,grid_num):
            self.setPen('red_1px_dashline')
            #计算坐标
            y1 = self.grid_padding_top+(grid_height*0.7)+i*cnt
            x1 = self.grid_padding_left
            x2 = self.grid_padding_left+self.w-sum_width
            
            self.paint.drawLine(x1,y1,x2,y1) #画价位虚线
            
            vol_int = int(cnt*x*px_h_radio)
            vol_str = str(vol_int)
            fw = self.metrics.width(vol_str) #获得文字宽度
            fh = self.metrics.height()/2   #获得文字高度
            self.setPen('yellow')
            self.paint.drawText(x2+40-fw,y1+fh,vol_str) #写入文字
            self.setPen('white')
            self.paint.drawText(x1-2-self.metrics.width(str(x)),y1+fh,str(x))    #写入文字
            x-=1
            
        
    '''绘制左侧信息栏和盘口等内容'''
    def rightGridPaint(self):
        self.setPen('red')
        #绘制信息内容之间的分割线
        _h = 0
        _x = self.w-self.grid_padding_right+44
        self.paint.drawLine(self.w-1,0,self.w-1,self.h-self.grid_padding_bottom+16)
        self.paint.drawLine(0,0,0,self.h-self.grid_padding_bottom+16)
        self.paint.drawLine(0,_h,self.w,_h)
        _h+=23
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=24
        self.paint.drawLine(_x,_h,self.w,_h)

        _h+=93
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=20
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=93
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=123
        self.paint.drawLine(_x,_h,self.w,_h)
        _h+=23
        self.paint.drawLine(_x,_h,self.w,_h)
        #股票名称和代码
        self.setFont('yahei_14_bold')
        self.setPen('yellow')
        name_str = str('%s %s'%(self.parent.stk_info['code'],self.parent.stk_info['name']))
        self.paint.drawText(_x+35,18,name_str)
        #委比和委差
        self.setFont('yahei_14')
        zx_str = str('最新')
        self.paint.drawText(_x+3  ,156,zx_str)
        self.setPen('gray')
        wb_str = str('委比')
        wc_str = str('委差')
        xs_str = str('现手')
        self.paint.drawText(_x+3  ,39,wb_str)
        self.paint.drawText(_x+100,39,wc_str)
        self.paint.drawText(_x+100,156,xs_str)
        fh = self.metrics.height()
        
        left_field_list = ['涨跌','涨幅','振幅','总手','总额','换手','分笔']
        i = 1
        for field in left_field_list:
            field_str = str(field)
            self.paint.drawText(_x+3,253+(i*17),field_str)
            i+=1

        right_field_list = ['均价','前收','今开','最高','最低','量比','均量']
        
        i = 1
        for field in right_field_list:
            field_str = str(field)
            self.paint.drawText(_x+100,253+(i*17),field_str)
            i+=1

        wp_str = str('外盘')
        np_str = str('内盘')
        self.paint.drawText(_x+3,395,wp_str)
        self.paint.drawText(_x+100,395,np_str)
        #卖①②③④⑤
        
        i = 0
        sell_queue = ['卖⑤','卖④','卖③','卖②','卖①']
        for sell in sell_queue:
            sell_str = str(sell)
            self.paint.drawText(_x+3,62+(i*18),sell_str)
            i+=1
        #买①②③④⑤
        buy_queue = ['买①','买②','买③','买④','买⑤']
        for buy in buy_queue:
            buy_str = str(buy)
            self.paint.drawText(_x+3,87+(i*18),buy_str)
            i+=1

        self.setPen('red_2px')
        self.paint.drawLine(_x+1,377,_x+99,377)
        self.paint.drawLine(_x+1,46,_x+65,46)
        self.setPen('green_2px')
        self.paint.drawLine(_x+102,377,_x+199,377)
        self.paint.drawLine(_x+67,46,_x+199,46)
        self.setFont('default')
        
    '''绘制左右侧的价格刻度'''
    def rulerPaint(self):
        
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom

        grid_height = self.h-sum_height
        
        high = self.parent.stk_data['high']
        low  = self.parent.stk_data['low']
        lastclose = self.parent.stk_data['lastclose']

        top = high-lastclose
        bottom = lastclose-low
        if top>bottom:
            padding = top
        else:
            padding = bottom
            
        limit_top = lastclose+padding
        limit_low = lastclose-padding


        px_h_radio = (grid_height*0.7)/((limit_top-limit_low)*100)

        
        self.setPen('red_1px_dashline')

        grid_num = 16 
        cnt = grid_height*0.7/grid_num
        
        for i in range(0,grid_num):
            self.setPen('red_1px_dashline')
            #计算坐标
            y1 = self.grid_padding_top+i*cnt
            x1 = self.grid_padding_left
            x2 = self.grid_padding_left+self.w-sum_width
            
            self.paint.drawLine(x1,y1,x2,y1) #画价位虚线
            
            price_float = (limit_top - ((i*cnt)/px_h_radio/100)) #计算价格
            price = '%4.2f'%(price_float) #格式化价格成str
            
            fw = self.metrics.width(price) #获得文字宽度
            fh = self.metrics.height()/2   #获得文字高度

            radio_float = (price_float/lastclose-1)*100 #计算波动百分比
            radio_str   = "%2.2f%%"%(radio_float)      #格式化百分比成str

            r_fw = self.metrics.width(radio_str)
            r_fh = self.metrics.height()/2
            #判断文字使用的颜色
            if price_float == lastclose:
                self.setPen('white')
            if price_float < lastclose:
                self.setPen('green')
                
            self.paint.drawText(x1-fw-2,y1+fh,price) #写入文字
            self.paint.drawText(x2+40-r_fw,y1+r_fh,radio_str) #写入文字
    '''绘制x,y准星'''
    def xyPaint(self):
        if self.parent.m_x >= self.grid_padding_left and self.parent.m_x<=self.w-self.grid_padding_right and self.parent.m_y>=self.grid_padding_top and self.parent.m_y<=self.h-self.grid_padding_bottom:
            self.setPen('gray')
            x1 = self.grid_padding_left
            x2 = self.w-self.grid_padding_right
            y1 = self.grid_padding_top
            y2 = self.h-self.grid_padding_bottom
            self.paint.drawLine(x1+1,self.parent.m_y,x2-1,self.parent.m_y)
            self.paint.drawLine(self.parent.m_x,y1+1,self.parent.m_x,y2-1)
            
            
    
    '''绘制时间轴刻度'''
    def timelinePaint(self):
        
        fw = self.metrics.width('00:00') #计算文字的宽度
        
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom
        
        grid_width = self.w-sum_width-2
        
        
        y1 = self.grid_padding_top
        y2 = y1+(self.h-sum_height)

        #时间轴中线
        self.setPen('red')
        x_pos = grid_width/2+self.grid_padding_left
        
        self.paint.drawLine(x_pos,y1,x_pos,y2)
        self.paint.drawText(x_pos-fw/2,y2+12,str('13:00'))
        
        #时间轴09点30分
        x_pos = self.grid_padding_left
        self.paint.drawText(x_pos,y2+12,str('09:30'))
        
        #时间轴10点30分
        x_pos = grid_width*0.25+self.grid_padding_left
        self.paint.drawLine(x_pos,y1,x_pos,y2)
        self.paint.drawText(x_pos-fw/2,y2+12,str('10:30'))

        #时间轴14点00分
        x_pos = grid_width*0.75+self.grid_padding_left
        self.paint.drawLine(x_pos,y1,x_pos,y2)
        self.paint.drawText(x_pos-fw/2,y2+12,str('14:00'))

        #时间轴15点00分
        x_pos = grid_width+self.grid_padding_left
        self.paint.drawText(x_pos-fw,y2+12,str('15:00'))

        #时间虚线 by 30min
        self.setPen('red_1px_dashline')
        x_pos_array = [0.125,0.375,0.625,0.875]
        for i in x_pos_array:
            x_pos = grid_width*i+self.grid_padding_left
            self.paint.drawLine(x_pos,y1,x_pos,y2)

        
    '''绘制表格上方的股票信息'''
    def topInfoPaint(self):
        self.setPen('yellow')
        self.paint.drawText(4+self.grid_padding_left,self.grid_padding_top-4
                            ,str(self.parent.stk_info['name'])) #股票名称
        self.paint.drawText(4+self.grid_padding_left+120,self.grid_padding_top-4
                            ,str('均价线:')) #均价线
        lastclose = self.parent.stk_data['lastclose']
        close     = self.parent.stk_data['close']
        mma       = self.parent.stk_data['list']['mma'][-1]
        
        if lastclose>close:
            self.setPen('green')
            str_1 = '%.2f -%.2f'%(close,lastclose-close)
        if lastclose==close:
            self.setPen('white')
            str_1 = '%.2f +%.2f'%(close,0.00)
        if lastclose<close:
            self.setPen('red')
            str_1 = '%.2f +%.2f'%(close,close-lastclose)
        
        if mma>close:
            self.setPen('green')
        if mma==close:
            self.setPen('white')
        if mma<close:
            self.setPen('red')
        
        self.paint.drawText(4+self.grid_padding_left+55,self.grid_padding_top-4,str(str_1))
        self.paint.drawText(4+self.grid_padding_left+165,self.grid_padding_top-4,str('%.2f'%mma)) #均价
        
        #涨停价
        self.setPen('red')
        self.paint.drawText(4+self.grid_padding_left+200,self.grid_padding_top-4,str('涨停价:%.2f'%(lastclose*1.1))) #均价
        #跌停价
        self.setPen('green')
        self.paint.drawText(4+self.grid_padding_left+280,self.grid_padding_top-4,str('跌停价:%.2f'%(lastclose*0.9))) #均价
    '''绘制股价走势'''
    def pricePaint(self):
        sum_width  = self.grid_padding_left+self.grid_padding_right
        sum_height = self.grid_padding_top+self.grid_padding_bottom

        grid_height = self.h-sum_height-2
        
        high = self.parent.stk_data['high']
        low  = self.parent.stk_data['low']
        lastclose = self.parent.stk_data['lastclose']

        top = high-lastclose
        bottom = lastclose-low
        if top>bottom:
            padding = top
        else:
            padding = bottom
            
        limit_top = lastclose+padding
        limit_low = lastclose-padding
        
        h_radio = (grid_height*0.7)/((limit_top-limit_low)*100)

        w_radio = (self.w-sum_width-2)/240.00
        w = self.grid_padding_left
        
        self.setPen('white')
        path = QtGui.QPainterPath()
        path.moveTo(w,(limit_top-self.parent.stk_data['open'])*100*h_radio+self.grid_padding_top)
        i  = 1
        for price in self.parent.stk_data['list']['close']:
            w = i*w_radio+self.grid_padding_left
            y = (limit_top-price)*100*h_radio+self.grid_padding_top
            path.lineTo(w,y)
            i+=1
        self.paint.drawPath(path)
        self.setPen('cyan_1px_dashline')
        self.paint.drawLine(self.grid_padding_left+1,y,w-1,y)
        self.setPen('yellow')
        path = QtGui.QPainterPath()
        w = self.grid_padding_left
        path.moveTo(w,(limit_top-self.parent.stk_data['open'])*100*h_radio+self.grid_padding_top)
        i  = 1
        for price in self.parent.stk_data['list']['mma']:
            w = i*w_radio+self.grid_padding_left
            y = (limit_top-price)*100*h_radio+self.grid_padding_top
            path.lineTo(w,y)
            i+=1
        self.paint.drawPath(path)
        
        
    '''绘制成交量'''
    def volumePaint(self):
        sum_width  = self.grid_padding_left + self.grid_padding_right
        sum_height = self.grid_padding_top  + self.grid_padding_bottom

        max_volume = self.parent.stk_data['max_vol'] #最大分钟成交量
        
        w_radio = (self.w-sum_width-2)/240.00
        h_radio = ((self.h-sum_height-2)*0.3)/max_volume

        y = (self.h-sum_height)+self.grid_padding_top
        
        self.setPen('yellow')


            
        for i in range(1,len(self.parent.stk_data['list']['vol'])+1):
            x = i*w_radio+self.grid_padding_left
            y2 = h_radio*self.parent.stk_data['list']['vol'][i-1]
            self.paint.drawLine(x,y-1,x,y-y2)

class Test(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setMinimumSize(640, 430) #设置窗口最小尺寸
        self.setGeometry(300, 300, 960, 650)
        self.setWindowTitle(str('超级狙击手[内部开发测试版]-行情实时走势'))
        self.setStyleSheet("QWidget { background-color: black }")
        self.setWindowIcon(QtGui.QIcon('ruby.png'))
        self.setMouseTracking(True)
        self.m_x = 0 #光标x轴位置
        self.m_y = 0 #光标y轴位置
        
        self.stk_info = {}
        
        self.stk_info['name'] = '浙江东方'
        self.stk_info['code'] = '600120'
        self.stk_info['market'] = 'SH'
        
        self.stk_data = {}
        self.stk_data['list'] = {} #股价序列
        self.stk_data['list']['time']  = [] #时间
        self.stk_data['list']['open']  = [] #开盘价
        self.stk_data['list']['high']  = [] #最高价
        self.stk_data['list']['low']   = [] #最低价
        self.stk_data['list']['close'] = [] #收盘价
        self.stk_data['list']['vol']   = [] #成交量
        self.stk_data['list']['amount']= [] #成交额
        self.stk_data['list']['mma']= []   #分时均价
        
        self.stk_data['list']['buy_port'] = [(0.00,0),(0.00,0),(0.00,0),(0.00,0),(0.00,0)]  #买盘前五
        self.stk_data['list']['sell_port'] = [(0.00,0),(0.00,0),(0.00,0),(0.00,0),(0.00,0)] #卖盘前五
        
        #读取数据
        f = open('SH600120.txt','r')
        data = f.readlines()
        f.close()
        
        for row in data:
            vars = row.split(' ')
            self.stk_data['list']['time'].append(vars[1])
            self.stk_data['list']['open'].append(float(vars[2]))
            self.stk_data['list']['high'].append(float(vars[3]))
            self.stk_data['list']['low'].append(float(vars[4]))
            self.stk_data['list']['close'].append(float(vars[5]))
            self.stk_data['list']['vol'].append(int(float(vars[6])))
            self.stk_data['list']['amount'].append(int(float(vars[7])))
            
            sum_vol = sum(self.stk_data['list']['vol'])
            sum_amt = sum(self.stk_data['list']['amount'])

            self.stk_data['list']['mma'].append(float(sum_amt)/(sum_vol*100.00))
            
        self.stk_data['lastclose'] = 10.12 #上一个交易日收盘价
        self.stk_data['open'] = self.stk_data['list']['open'][0]       #开盘价
        self.stk_data['high'] = max(self.stk_data['list']['high'])     #最高价
        self.stk_data['low']  = min(self.stk_data['list']['low'])      #最低价
        self.stk_data['close']= self.stk_data['list']['close'][-1]     #收盘价
        self.stk_data['max_vol']  = max(self.stk_data['list']['vol'])  #当日最高成交量
        
            
    def mouseMoveEvent(self, event):
        self.m_x =  int(event.x())
        self.m_y =  int(event.y())
        self.repaint()
    def paintEvent(self, event):
        report_painter(self)

app = QtGui.QApplication(sys.argv)
dt = Test()
dt.show()
app.exec_()

 

还有这个是生造的数据文件:

600120 2011-07-01 8.430 8.480 8.340 8.360 3149769 26493056
600120 2011-07-04 8.410 8.520 8.340 8.510 4516001 38210836
600120 2011-07-05 8.540 8.560 8.410 8.480 7777481 65878192
600120 2011-07-06 8.490 8.490 8.300 8.420 5242033 43893128
600120 2011-07-07 8.440 8.460 8.300 8.400 6127618 51328900
600120 2011-07-08 8.350 8.650 8.310 8.600 9963714 84713360
600120 2011-07-11 8.560 8.740 8.520 8.580 10380010 89564168
600120 2011-07-12 8.500 8.560 8.380 8.410 5574160 46996364
600120 2011-07-13 8.400 8.520 8.390 8.470 4701829 39824976
600120 2011-07-14 8.500 8.690 8.460 8.630 7504610 64556320
600120 2011-07-15 8.630 8.660 8.530 8.620 5705629 48998892
600120 2011-07-18 8.610 8.730 8.560 8.630 5320452 46000688
600120 2011-07-19 8.580 8.600 8.420 8.450 4248058 36036192
600120 2011-07-20 8.510 8.550 8.340 8.420 4750361 40079624
600120 2011-07-21 8.420 8.460 8.320 8.330 3736405 31312912
600120 2011-07-22 8.320 8.390 8.270 8.310 3932585 32756464
600120 2011-07-25 8.290 8.290 7.830 7.850 6353668 51000860
600120 2011-07-26 7.880 8.010 7.860 7.970 3276690 25987310
600120 2011-07-27 8.010 8.330 8.010 8.230 6893659 56675756
600120 2011-07-28 8.140 8.200 7.900 8.080 4816761 38835260
600120 2011-07-29 8.100 8.110 7.900 7.960 3186438 25420588
600120 2011-08-01 7.990 8.070 7.980 8.020 2529614 20283316
600120 2011-08-02 8.000 8.000 7.660 7.740 8525883 66058452
600120 2011-08-03 7.610 7.790 7.590 7.750 3920131 30255948
600120 2011-08-04 7.760 7.900 7.710 7.870 4260037 33309532
600120 2011-08-05 7.550 7.670 7.540 7.600 4065619 31001802
600120 2011-08-08 7.550 7.590 6.840 7.010 5930435 42265528
600120 2011-08-09 6.780 6.900 6.400 6.850 6868576 45893344
600120 2011-08-10 7.000 7.060 6.900 6.950 4487516 31282836
600120 2011-08-11 6.720 7.350 6.690 7.300 6402779 44976020
600120 2011-08-12 7.260 7.820 7.250 7.810 15766826 120297096
600120 2011-08-15 7.810 8.080 7.700 7.850 12323882 97571784
600120 2011-08-16 7.810 8.230 7.800 8.130 10745946 86445416
600120 2011-08-17 8.100 8.380 8.030 8.370 11671606 95696840
600120 2011-08-18 8.360 8.590 8.150 8.190 11869045 98933000
600120 2011-08-19 8.100 8.290 7.870 8.260 6530784 52682404
600120 2011-08-22 8.240 8.510 8.130 8.210 7418123 62068352
600120 2011-08-23 8.300 8.300 7.930 8.080 6113382 49369428
600120 2011-08-24 8.080 8.170 7.800 7.950 6902403 54820380
600120 2011-08-25 7.990 8.000 7.800 7.950 8225919 65140832
600120 2011-08-26 7.980 8.580 7.870 8.390 14188172 117105688
600120 2011-08-29 8.280 8.600 8.200 8.420 12552920 105444392
600120 2011-08-30 8.470 8.650 8.290 8.310 9278734 78914264
600120 2011-08-31 8.390 8.600 8.260 8.470 6950031 58692324
600120 2011-09-01 8.460 8.530 8.120 8.150 6783869 56098000
600120 2011-09-02 8.130 8.150 7.800 7.930 5169247 41035356
600120 2011-09-05 7.900 7.900 7.610 7.770 3367080 25931720
600120 2011-09-06 7.650 7.840 7.630 7.780 1994604 15473853
600120 2011-09-07 7.800 7.920 7.710 7.890 4524852 35365940
600120 2011-09-08 8.000 8.000 7.750 7.780 3260041 25597960
600120 2011-09-09 7.790 7.850 7.690 7.720 1670190 12958421
600120 2011-09-13 7.610 7.610 7.220 7.350 2993141 22118428
600120 2011-09-14 7.410 7.490 7.280 7.460 1601320 11858549
600120 2011-09-15 7.460 7.540 7.380 7.450 1813248 13502755
600120 2011-09-16 7.490 7.570 7.380 7.500 1562320 11709203
600120 2011-09-19 7.380 7.490 7.350 7.350 1256729 9314678
600120 2011-09-20 7.390 7.420 7.070 7.160 4164802 30099376
600120 2011-09-21 7.160 7.350 7.030 7.310 4105156 29545046
600120 2011-09-22 7.240 7.420 7.180 7.190 2778893 20283590
600120 2011-09-23 6.990 7.260 6.930 7.080 3005942 21362102
600120 2011-09-26 7.140 7.280 7.000 7.030 2440617 17473004
600120 2011-09-27 7.100 7.140 6.970 7.050 1876199 13234751
600120 2011-09-28 7.110 7.130 6.850 6.850 1999641 13997734
600120 2011-09-29 6.850 6.850 6.620 6.680 2083164 14028082
600120 2011-09-30 6.800 6.850 6.660 6.810 1446665 9784671
600120 2011-10-10 6.800 7.490 6.800 7.340 6157517 44781964
600120 2011-10-11 7.410 7.550 7.180 7.330 5113073 37712548
600120 2011-10-12 7.330 7.850 7.200 7.650 7080724 53702240
600120 2011-10-13 7.650 7.700 7.480 7.570 3228726 24474174
600120 2011-10-14 7.520 7.830 7.510 7.610 5204745 40001128
600120 2011-10-17 7.530 7.640 7.420 7.470 3093406 23189326
600120 2011-10-18 7.470 7.470 7.240 7.250 2355012 17249810
600120 2011-10-19 7.300 7.350 7.150 7.250 2051058 14839307
600120 2011-10-20 7.200 7.260 6.950 7.040 2177500 15435905
600120 2011-10-21 7.050 7.050 6.850 6.920 1479998 10263274
600120 2011-10-24 6.920 7.050 6.820 7.040 2828763 19645222
600120 2011-10-25 7.090 7.150 6.900 7.110 5454243 38421580
600120 2011-10-26 7.080 7.250 6.980 7.090 7561318 53553768
600120 2011-10-27 7.090 7.110 6.990 7.020 4331955 30494264
600120 2011-10-28 7.080 7.160 7.050 7.130 5397767 38375040
600120 2011-10-31 7.130 7.230 7.120 7.230 4416981 31686934
600120 2011-11-01 7.190 7.240 7.080 7.090 6221598 44541308
600120 2011-11-02 6.970 7.090 6.790 7.070 6240368 43274104
600120 2011-11-03 7.060 7.250 7.060 7.210 7434887 53413296
600120 2011-11-04 7.190 7.310 7.160 7.260 5469346 39634672
600120 2011-11-07 7.230 7.330 7.170 7.280 4881876 35415712
600120 2011-11-08 7.280 7.300 7.030 7.090 5152319 36909572
600120 2011-11-09 7.090 7.140 6.990 7.120 4396667 31023112
600120 2011-11-10 7.010 7.060 6.950 6.980 2874227 20162434
600120 2011-11-11 6.980 7.040 6.940 6.980 1971345 13774011
600120 2011-11-14 7.020 7.220 7.000 7.200 5005408 35833604
600120 2011-11-15 7.170 7.260 7.160 7.220 3018996 21752406
600120 2011-11-16 7.220 7.250 7.000 7.020 3599804 25579700
600120 2011-11-17 7.020 7.090 6.980 7.030 1793379 12631356
600120 2011-11-18 7.000 7.100 6.910 6.930 3106221 21753164
600120 2011-11-21 6.910 6.970 6.800 6.910 1656054 11393588
600120 2011-11-22 6.850 6.900 6.800 6.870 1683639 11521032
600120 2011-11-23 6.870 6.910 6.760 6.790 1465450 10027905
600120 2011-11-24 6.720 6.790 6.650 6.700 1649095 11059988
600120 2011-11-25 6.710 6.750 6.660 6.710 1086150 7282331
600120 2011-11-28 6.750 6.820 6.720 6.800 1174999 7964600
600120 2011-11-29 6.910 6.920 6.780 6.860 1269253 8674397
600120 2011-11-30 6.810 6.860 6.520 6.550 2604110 17315016
600120 2011-12-01 6.690 6.750 6.630 6.680 2671312 17883724
600120 2011-12-02 6.680 6.680 6.450 6.510 1473269 9605086
600120 2011-12-05 6.480 6.480 6.110 6.200 1719220 10751089
600120 2011-12-06 6.170 6.240 6.140 6.210 1223995 7571687
600120 2011-12-07 6.220 6.260 6.180 6.200 961999 5985017
600120 2011-12-08 6.190 6.260 6.110 6.250 1161611 7200791
600120 2011-12-09 6.230 6.240 6.180 6.230 653267 4056483
600120 2011-12-12 6.200 6.240 6.130 6.230 652932 4044556
600120 2011-12-13 6.170 6.200 5.850 6.010 2992541 17886124
600120 2011-12-14 5.970 6.010 5.720 5.950 1722800 10140223
600120 2011-12-15 5.900 6.120 5.640 5.760 3439396 19840406
600120 2011-12-16 5.710 5.810 5.470 5.800 1940713 10971714
600120 2011-12-19 5.760 5.760 5.500 5.690 2164208 12149138
600120 2011-12-20 5.600 5.740 5.600 5.620 1237797 7036752
600120 2011-12-21 5.680 5.710 5.400 5.450 1137091 6378653
600120 2011-12-22 5.360 5.400 5.100 5.230 1565667 8225734
600120 2011-12-23 5.180 5.340 5.180 5.270 1033967 5447228
600120 2011-12-26 5.280 5.310 5.200 5.290 1060186 5591960
600120 2011-12-27 5.250 5.270 5.020 5.100 1373900 7103701
600120 2011-12-28 5.060 5.060 4.830 5.020 1516885 7513323
600120 2011-12-29 5.020 5.060 4.910 4.960 1074220 5366675
600120 2012-01-04 5.090 5.140 4.920 4.930 1904790 9586652
600120 2012-01-05 4.860 4.870 4.680 4.690 1409501 6735327
600120 2012-01-06 5.020 5.100 4.800 4.880 2230808 10954823
600120 2012-01-09 4.890 5.290 4.880 5.260 3338809 16978868
600120 2012-01-10 5.200 5.500 5.150 5.460 3648924 19501378
600120 2012-01-11 5.440 5.440 5.300 5.340 2861417 15362869
600120 2012-01-12 5.340 5.440 5.310 5.350 1763741 9495084
600120 2012-01-13 5.380 5.380 5.100 5.140 2438074 12696630
600120 2012-01-16 5.010 5.170 4.960 4.970 1145104 5807568
600120 2012-01-17 5.000 5.290 4.970 5.290 2698856 14019675
600120 2012-01-18 5.260 5.350 5.180 5.280 2634491 13893458
600120 2012-01-19 5.270 5.350 5.200 5.310 1816398 9624942
600120 2012-01-20 5.330 5.460 5.310 5.430 2573601 13906017
600120 2012-01-30 5.400 5.480 5.340 5.360 1832939 9883418
600120 2012-01-31 5.350 5.390 5.290 5.350 1242594 6630515
600120 2012-02-01 5.370 5.450 5.320 5.320 1841967 9919325
600120 2012-02-02 5.330 5.570 5.330 5.550 4581848 25035066
600120 2012-02-03 5.550 5.650 5.470 5.560 4893311 27319804
600120 2012-02-06 5.530 5.880 5.500 5.750 5100686 29265454
600120 2012-02-07 5.640 5.690 5.590 5.610 3227565 18154338
600120 2012-02-08 5.610 5.790 5.560 5.780 3591428 20524218
600120 2012-02-09 5.730 5.830 5.730 5.760 3408817 19736262
600120 2012-05-10 6.340 6.340 6.340 6.340 514959 3264840
600120 2012-05-14 6.970 6.970 6.970 6.970 931840 6494925
600120 2012-05-15 7.670 7.670 6.760 6.910 27411760 201302192
600120 2012-05-16 6.610 6.790 6.580 6.630 9972930 66460172
600120 2012-05-17 6.600 6.670 6.400 6.490 8248599 53690064
600120 2012-05-18 6.400 6.610 6.320 6.400 5609795 36256556
600120 2012-05-21 6.410 6.520 6.210 6.290 4537627 28691816
600120 2012-05-22 6.340 6.410 6.290 6.370 4063683 25810310
600120 2012-05-23 6.370 6.450 6.180 6.250 4498954 28159672
600120 2012-05-24 6.270 6.380 6.200 6.350 4195454 26358802
600120 2012-05-25 6.320 6.480 6.230 6.360 6258612 39857576
600120 2012-05-28 6.320 6.400 6.190 6.400 4998941 31474214
600120 2012-05-29 6.400 6.530 6.360 6.440 5729309 37068284
600120 2012-05-30 6.460 6.460 6.350 6.370 3101571 19816940
600120 2012-05-31 6.300 6.350 6.230 6.240 3738985 23467144
600120 2012-06-01 6.210 6.280 6.080 6.110 4507252 27767424
600120 2012-06-04 6.000 6.010 5.840 5.860 3086545 18299630
600120 2012-06-05 5.870 5.960 5.860 5.930 1942942 11496336
600120 2012-06-06 5.960 5.960 5.600 5.760 2998969 17440282
600120 2012-06-07 5.780 5.960 5.770 5.790 2594537 15175500
600120 2012-06-08 5.830 5.880 5.700 5.750 1808774 10501804
600120 2012-06-11 5.800 5.850 5.730 5.830 1861236 10775968
600120 2012-06-12 5.850 5.930 5.800 5.850 2007190 11774889
600120 2012-06-13 5.860 6.130 5.790 6.100 5304235 31868112
600120 2012-06-14 6.050 6.090 5.910 5.930 3202802 19241666
600120 2012-06-15 5.930 5.970 5.810 5.900 1774010 10459891
600120 2012-06-18 5.900 5.990 5.870 5.880 2001440 11862747
600120 2012-06-19 5.880 5.950 5.820 5.830 1968435 11601531
600120 2012-06-20 5.840 5.980 5.810 5.950 2428144 14288923
600120 2012-06-21 5.910 5.910 5.700 5.760 1990001 11558386
600120 2012-06-26 5.530 5.590 5.400 5.480 2086008 11426576
600120 2012-06-27 5.470 5.580 5.450 5.450 1080842 5962850
600120 2012-06-28 5.510 5.520 5.260 5.280 1549881 8344252
600120 2012-06-29 5.250 5.350 5.180 5.330 1597134 8426737
600120 2012-07-02 5.400 5.410 5.320 5.350 1118989 5986785
600120 2012-07-03 5.370 5.430 5.310 5.400 1379692 7439132
600120 2012-07-04 5.400 5.470 5.380 5.410 1395455 7563382
600120 2012-07-05 5.410 5.410 5.280 5.360 1534313 8190450
600120 2012-07-06 5.400 5.520 5.320 5.400 2657751 14387281
600120 2012-07-09 5.400 5.490 5.320 5.330 2448854 13205528
600120 2012-07-10 5.350 5.860 5.340 5.860 7802024 45076920
600120 2012-07-11 6.110 6.330 6.060 6.240 22276192 137748160
600120 2012-07-12 6.130 6.330 6.030 6.320 16639952 103002552
600120 2012-07-13 6.250 6.890 6.170 6.610 19638960 127671288
600120 2012-07-16 6.500 6.750 6.410 6.490 15513604 102224928
600120 2012-07-17 6.360 6.950 6.260 6.820 18767700 124877352
600120 2012-07-18 6.720 7.000 6.560 6.800 18327382 124799976
600120 2012-07-19 6.700 6.860 6.550 6.680 15164894 101237520
600120 2012-07-20 6.550 6.630 6.380 6.440 9728719 63227360
600120 2012-07-23 6.330 6.370 6.160 6.320 7001618 44002316
600120 2012-07-24 6.270 6.450 6.220 6.340 6881987 43810260
600120 2012-07-25 6.250 6.660 6.210 6.500 12923801 83741672
600120 2012-07-26 6.450 6.550 6.150 6.200 7061937 44964776
600120 2012-07-27 6.410 6.420 6.110 6.230 5700987 35619536
600120 2012-07-30 6.170 6.240 5.610 5.610 8543043 49370452
600120 2012-07-31 5.600 5.940 5.480 5.710 7669121 44260340
600120 2012-08-01 5.620 5.830 5.550 5.720 4405627 25176060
600120 2012-08-02 5.730 5.970 5.680 5.890 7018821 41113080
600120 2012-08-03 5.850 5.940 5.830 5.930 3797656 22333222
600120 2012-08-06 5.930 6.050 5.820 6.010 5291014 31587280
600120 2012-08-07 6.010 6.330 6.000 6.190 8028181 49717732
600120 2012-08-08 6.220 6.220 6.060 6.140 4085520 24994584
600120 2012-08-09 6.100 6.120 5.810 6.120 8067361 48357004
600120 2012-08-10 6.050 6.190 6.010 6.060 4016290 24371520
600120 2012-08-13 6.200 6.670 6.200 6.330 15222520 97680776
600120 2012-08-14 6.500 6.900 6.350 6.680 17682586 117190552
600120 2012-08-15 6.690 6.690 6.330 6.390 10266937 66058708
600120 2012-08-16 6.400 6.660 6.150 6.160 9145371 58658368
600120 2012-08-17 6.120 6.160 5.940 6.100 6471054 39053048
600120 2012-08-20 6.100 6.290 5.980 6.270 5655946 34765680
600120 2012-08-21 6.150 6.300 6.120 6.230 6037340 37561272
600120 2012-08-22 6.230 6.230 6.000 6.050 5329714 32457810
600120 2012-08-23 5.940 6.140 5.940 6.090 3759488 22779714
600120 2012-08-24 6.150 6.290 6.050 6.080 6970082 42997304
600120 2012-08-27 6.050 6.050 5.720 5.850 4477758 26282412
600120 2012-08-28 5.860 5.930 5.770 5.900 2470654 14475564
600120 2012-08-29 5.900 5.900 5.750 5.750 3104898 17997202
600120 2012-08-30 5.690 5.850 5.590 5.670 2875641 16442648
600120 2012-08-31 5.670 5.780 5.600 5.750 1848001 10556758
600120 2012-09-03 5.740 5.930 5.680 5.900 3951762 23129270
600120 2012-09-04 5.920 5.920 5.690 5.700 3707201 21481764
600120 2012-09-05 5.690 5.750 5.620 5.720 2782154 15832339
600120 2012-09-06 5.750 5.780 5.640 5.690 2869553 16314120
600120 2012-09-07 5.760 5.970 5.700 5.890 5783402 33932288
600120 2012-09-10 5.890 6.080 5.860 6.060 6170653 37105776
600120 2012-09-11 6.040 6.060 5.910 6.060 3652909 21851064
600120 2012-09-12 6.100 6.130 6.020 6.060 3930014 23842410
600120 2012-09-13 6.080 6.100 5.910 5.910 2957667 17805100
600120 2012-09-14 5.920 6.000 5.830 5.890 2792995 16490332
600120 2012-09-17 5.820 5.890 5.640 5.640 2734759 15720210
600120 2012-09-18 5.640 5.760 5.610 5.650 1748883 9932194
600120 2012-09-19 5.680 5.780 5.680 5.740 1306841 7485999
600120 2012-09-20 5.740 5.740 5.380 5.450 2683344 14859092
600120 2012-09-21 5.440 5.470 5.300 5.430 1612603 8708786
600120 2012-09-24 5.450 5.510 5.380 5.480 1343010 7340127
600120 2012-09-25 5.480 5.490 5.340 5.380 1247570 6757381
600120 2012-09-26 5.360 5.440 5.130 5.180 1431045 7528501
600120 2012-09-27 5.170 5.330 5.140 5.260 1763023 9279980
600120 2012-09-28 5.200 5.360 5.200 5.340 2006394 10612739
600120 2012-10-08 5.360 5.560 5.350 5.460 3435758 18897262
600120 2012-10-09 5.460 5.550 5.450 5.550 2209764 12187114
600120 2012-10-10 5.540 5.580 5.480 5.570 1898232 10539406
600120 2012-10-11 5.550 5.570 5.410 5.460 1873838 10315861
600120 2012-10-12 5.460 5.490 5.360 5.460 1619960 8811500
600120 2012-10-15 5.480 5.480 5.330 5.360 1355799 7280243
600120 2012-10-16 5.390 5.430 5.330 5.430 1427428 7711129
600120 2012-10-17 5.440 5.500 5.400 5.480 1262048 6901247
600120 2012-10-18 5.450 5.560 5.450 5.540 1938503 10716095
600120 2012-10-19 5.500 5.560 5.500 5.550 1629063 9013752
600120 2012-10-22 5.500 5.540 5.460 5.540 1523985 8396867
600120 2012-10-23 5.520 5.550 5.470 5.470 1517978 8364718
600120 2012-10-24 5.480 5.640 5.480 5.620 4318489 24147084
600120 2012-10-25 5.600 5.620 5.460 5.510 2332800 12935266
600120 2012-10-26 5.500 5.520 5.300 5.320 1968179 10570681
600120 2012-10-29 5.300 5.350 5.240 5.280 1184547 6253799
600120 2012-10-30 5.280 5.370 5.270 5.350 861803 4588509
600120 2012-10-31 5.370 5.370 5.240 5.290 1023519 5407486
600120 2012-11-01 5.300 5.420 5.280 5.410 1483984 7962948
600120 2012-11-02 5.410 5.440 5.360 5.440 1308161 7073081
600120 2012-11-05 5.450 5.530 5.400 5.500 2027746 11118383
600120 2012-11-06 5.500 5.500 5.370 5.450 1314405 7139731
600120 2012-11-07 5.360 5.370 5.160 5.270 4737230 24837488
600120 2012-11-08 5.200 5.240 5.140 5.150 2036601 10567178
600120 2012-11-09 5.130 5.220 5.120 5.200 1307604 6757081
600120 2012-11-12 5.200 5.380 5.070 5.360 4254705 22151888
600120 2012-11-13 5.700 5.900 5.530 5.530 15434146 88320960
600120 2012-11-14 5.390 5.430 5.150 5.210 8091713 42871408
600120 2012-11-15 5.200 5.320 5.150 5.180 3814789 19947090
600120 2012-11-16 5.160 5.180 5.000 5.090 3265990 16524752
600120 2012-11-19 5.090 5.140 5.010 5.100 2257164 11403216
600120 2012-11-20 5.100 5.140 5.030 5.030 1571279 7984035
600120 2012-11-21 5.000 5.060 4.880 5.050 3050816 15147326
600120 2012-11-22 5.000 5.020 4.920 4.950 1788547 8869217
600120 2012-11-23 4.960 5.020 4.940 4.960 1372151 6832961
600120 2012-11-26 4.980 4.990 4.880 4.880 1137756 5597685
600120 2012-11-27 4.860 4.950 4.700 4.740 1689649 8158868
600120 2012-11-28 4.740 4.740 4.520 4.590 1284289 5941912
600120 2012-11-29 4.590 4.640 4.480 4.490 969922 4423860
600120 2012-11-30 4.450 4.560 4.450 4.520 1235100 5569609
600120 2012-12-03 4.520 4.550 4.310 4.320 1379623 6147945
600120 2012-12-04 4.320 4.410 4.230 4.380 1667153 7171231
600120 2012-12-05 4.360 4.580 4.360 4.580 2422869 10954693
600120 2012-12-06 4.580 4.620 4.500 4.540 1407798 6396522
600120 2012-12-07 4.510 4.700 4.510 4.680 2462421 11472038
600120 2012-12-10 4.680 4.880 4.680 4.830 3202908 15354105
600120 2012-12-11 4.830 4.910 4.740 4.740 3257935 15748287
600120 2012-12-12 4.740 4.780 4.650 4.730 2110366 9952871
600120 2012-12-13 4.700 4.800 4.650 4.720 2028066 9630472
600120 2012-12-14 4.680 4.930 4.680 4.890 4415891 21475120
600120 2012-12-17 4.870 5.090 4.870 4.940 5758027 28685946
600120 2012-12-18 4.910 5.030 4.900 4.920 3205939 15937582
600120 2012-12-19 4.950 4.970 4.890 4.940 1970912 9721340
600120 2012-12-20 4.910 4.970 4.860 4.960 2776664 13648103
600120 2012-12-21 5.000 5.020 4.930 4.940 2582680 12835924
600120 2012-12-24 4.900 4.990 4.900 4.950 1395443 6916473
600120 2012-12-25 4.910 5.040 4.910 5.030 3671653 18358908
600120 2012-12-26 5.030 5.080 4.990 5.070 3383588 17015576
600120 2012-12-27 5.050 5.100 5.020 5.030 3100081 15631201
600120 2012-12-28 5.020 5.050 5.000 5.040 3738248 18785418
600120 2012-12-31 5.050 5.210 5.020 5.180 5492425 28178540
600120 2013-01-04 5.180 5.250 5.040 5.160 4505342 23113802
600120 2013-01-07 5.140 5.240 5.100 5.230 3740693 19357138
600120 2013-01-08 5.230 5.250 5.160 5.230 3428131 17831330
600120 2013-01-09 5.750 5.750 5.620 5.750 15137964 86851376
600120 2013-01-10 5.890 5.890 5.590 5.680 19259634 109951720
600120 2013-01-11 5.710 6.190 5.600 5.830 17767632 104686280
600120 2013-01-14 5.700 6.140 5.690 6.080 17128604 103055384
600120 2013-01-15 6.050 6.110 5.950 6.080 11690986 70449808
600120 2013-01-16 6.060 6.060 5.810 5.940 9519043 56312520
600120 2013-01-17 5.940 5.940 5.760 5.820 5490334 31996616
600120 2013-01-18 5.840 5.910 5.800 5.870 4441257 26049472
600120 2013-01-21 5.900 5.950 5.830 5.950 4949409 29187012
600120 2013-01-22 5.920 5.960 5.800 5.890 5524068 32470218
600120 2013-01-23 5.890 5.920 5.670 5.760 5285930 30515522
600120 2013-01-24 5.830 5.990 5.700 5.810 8746975 51253216
600120 2013-01-25 5.710 5.780 5.670 5.690 2938357 16774085
600120 2013-01-28 5.720 5.920 5.720 5.920 5615520 32894768
600120 2013-01-29 5.920 6.030 5.870 5.970 7778448 46530040
600120 2013-01-30 5.970 6.170 5.970 6.050 7974663 48414056
600120 2013-01-31 6.450 6.660 6.250 6.330 20167094 129655856
600120 2013-02-01 6.330 6.850 6.260 6.480 15610902 102880336
600120 2013-02-04 6.330 6.330 6.080 6.130 11360102 70013160
600120 2013-02-05 6.030 6.160 6.020 6.140 4903472 29867632
600120 2013-02-06 6.170 6.230 6.120 6.170 3826076 23581090
600120 2013-02-07 6.140 6.220 6.130 6.180 3255472 20093372
600120 2013-02-08 6.200 6.260 6.180 6.190 4681355 29087642
600120 2013-02-18 6.280 6.310 6.200 6.260 4845549 30340608
600120 2013-02-19 6.250 6.320 6.100 6.130 4727252 29183232
600120 2013-02-20 6.170 6.300 6.130 6.300 5596862 34757520
600120 2013-02-21 6.260 6.490 6.200 6.440 12809449 81299392
600120 2013-02-22 6.410 6.510 6.270 6.290 7584128 48492400
600120 2013-02-25 6.280 6.330 6.160 6.310 5220263 32598266
600120 2013-02-26 6.320 6.420 6.220 6.240 6156654 38917012
600120 2013-02-27 6.210 6.320 6.190 6.240 4068847 25377816
600120 2013-02-28 6.270 6.410 6.220 6.370 7447814 47241996
600120 2013-03-01 6.360 6.610 6.260 6.610 14957895 96688696
600120 2013-03-04 6.520 6.780 6.440 6.550 13564858 89516888
600120 2013-03-05 6.500 6.800 6.500 6.720 11519010 76836992
600120 2013-03-06 6.920 7.390 6.800 7.390 26849848 189968432
600120 2013-03-07 7.780 8.130 7.670 8.030 40965844 322816768
600120 2013-03-08 7.950 8.220 7.730 7.790 28627918 228489488
600120 2013-03-11 7.870 7.870 7.180 7.530 18937636 141743744
600120 2013-03-12 7.450 7.620 7.170 7.480 15535111 115027416
600120 2013-03-13 7.410 7.540 7.230 7.420 10559835 78049992
600120 2013-03-14 7.350 7.630 7.340 7.450 11297736 84727264
600120 2013-03-15 7.490 7.710 7.310 7.540 14645334 110597144
600120 2013-03-18 7.400 7.400 6.900 7.010 13872665 98271352
600120 2013-03-19 6.980 7.150 6.770 6.910 10347213 71593536
600120 2013-03-20 6.940 7.260 6.850 7.200 11781630 83496264
600120 2013-03-21 7.150 7.520 7.150 7.490 12763050 94041384
600120 2013-03-22 7.420 7.670 7.280 7.570 13966066 104551368
600120 2013-03-25 7.750 7.990 7.610 7.630 15983236 124691712
600120 2013-03-26 7.630 8.390 7.600 8.380 26428312 211724464
600120 2013-03-27 8.250 8.540 8.090 8.260 24350716 202126576
600120 2013-03-28 8.170 8.770 7.890 8.500 34068656 286435744
600120 2013-03-29 8.370 8.600 8.240 8.240 14159268 118628944
600120 2013-04-01 8.310 8.740 8.280 8.500 17816092 152612272
600120 2013-04-02 8.690 8.700 7.810 8.000 18838794 156627616
600120 2013-04-03 7.990 8.200 7.800 7.920 11452403 91542184
600120 2013-04-08 7.730 8.550 7.560 8.470 13963396 113644160
600120 2013-04-09 8.540 8.970 8.460 8.840 18834228 165475248
600120 2013-04-10 8.790 8.870 8.630 8.770 10376445 90857848
600120 2013-04-11 8.770 8.850 8.560 8.610 8377727 72409424
600120 2013-04-12 8.720 9.080 8.720 8.890 19480370 173966848
600120 2013-04-15 8.910 8.980 8.620 8.630 10265764 89914552
600120 2013-04-16 8.480 8.930 8.190 8.840 13336577 114974256
600120 2013-04-17 8.790 9.040 8.630 8.940 11676056 103827328
600120 2013-04-18 8.860 9.280 8.800 9.080 11847024 107250600
600120 2013-04-19 9.100 9.990 8.980 9.790 33011634 318405920

 

    ---- 再次鸣谢 散漫 童鞋的热心。

 

    ---- 我在用 matplotlib 的时候有接触过 PyQT 和 wxPython 的概念,另外昨天也稍微股沟了一下。它们之间的关系: matplotlib 是前端,PyQT 或 wxPython 是后端。或者说 matplotlib 相当于 Python,而 PyQT 和 wxPython 相当于 C。

    *. 实际用的时候,可以用 matplotlib 绘图,也可以直接用 PyQT 绘图,也可以用 PyQT 做一个 GUI 然后在后台调用 matplotlib 绘图,取舍的考虑也跟 Python 和 C 很像:PyQT 快些,但都是些底层的特性。matplotlib 用起来方便,但速度就不那么可观,只适合做一些不要求实时性的静态任务。

    *. 用 matplotlib 绘图的时候可以指定使用哪种后台,比如这个:

import matplotlib

# 这个要紧跟在 import matplotlib 之后,而且必须安装了 wxpython 2.8 才行。
matplotlib.use("WXAgg", warn=True)

    这个就是指定后台使用 wxPython,当然必须先安装了这个组件才行。

    *. matplotlib 代码里可以直接使用 PyQT 等后端的特性,比如捕捉鼠标点击事件,等等。

    ---- 另外,有一位 伊莱·班德斯基 童鞋(看文章是个大牛)演示了怎样把 PyQT 和 matplotlib 整合在一起,用 PyQT 写图形界面,在后台调用 matplotlib 绘图:

http://eli.thegreenplace.net/2009/01/20/matplotlib-with-pyqt-guis/

    ---- 最后说明下,PyQT 只有 GPL 授权和商业授权可选。无论屌丝拿它开发了什么唯我独尊的牛B项目,只要还 买不起 不想购买商业许可,那只能门户开放,大家利益均沾。

 

Avatar_small
Jacky Liu 说:
2013年5月19日 00:03

@依云: 矮油,这个好!屌丝救星 ~ :)

Avatar_small
dearsa 说:
2013年5月26日 11:32

看了你用的博客受益匪浅,请教一下,用python画出图后,能查看每根K线的具体价格么?谢了!

Avatar_small
Jacky Liu 说:
2013年5月26日 16:37

@dearsa: matplotlib 和 pyqt 都可以做到,但是我写的代码里不能。

Avatar_small
cleaning services du 说:
2021年8月03日 19:34

Your family-owned clean-up company will likely be happy and pleased to provide the whole range connected with services geared to all your family needs. We have ages of practical knowledge in giving professional every day and company cleaning through out London. Our eager and trusted team will supply you excessive standard services because first stop by. We deliver End connected with Tenancy Clean-up, After General contractors Cleaning, Soon after Party Clean-up, One down deep clean-up, Carpet, Mattresses and Upholstery Clean-up, Office, Classes and Room, Shop Clean-up. cleaning company dubai

Avatar_small
หสนะ989 说:
2021年8月22日 16:25

ฉันได้ประโยชน์มากมายจากการอ่านบล็อกที่คุณใช้ กรุณาถาม ฉันสามารถเช็คราคาเฉพาะของ K-line แต่ละเส้นหลังจากวาดรูปด้วย python ได้หรือไม่? ขอบคุณ!
https://www.superslot.bz here my website

Avatar_small
หสนะ989 说:
2021年8月22日 16:26

<a href="https://superslot.bz">here is my website</a>

Avatar_small
HBSE Question Paper 说:
2022年9月03日 18:05

Haryana Board Model Paper 2023 Class 4 Pdf Download with Answers for English Medium, Hindi Medium, Urdu Medium & Students for Small Answers, Long Answer, Very Long Answer Questions, and Essay Type Questions to Term1 & Term2 Exams at official website. HBSE Question Paper Class 4 New Exam Scheme or Question Pattern for Sammittive Assignment Exams (SA1 & SA2): Very Long Answer (VLA), Long Answer (LA), Small Answer (SA), Very Small Answer (VSA), Single Answer, Multiple Choice and etc.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee