def CEOIDataAvailable(self, ceData):
        try:
            strike   = ceData['Strike']
            time_x   = ceData['Time']
            ce_oi_y  = ceData['OI']
            niftyPrc = ceData['Nifty']
            totVolume= ceData['Volume']

            if [] == strike or [] == time_x or [] == ce_oi_y or [] == niftyPrc:
                return

            #Update existing CE data & Nifty graphs with SetData interface 
            for plot in self.graphs:
                if plot.objectName() == str(strike):
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = ce_oi_y, pen='r')
                    self.UpdateVolumeChart(time_x, totVolume, str(strike)+"CE"+"Volume" )
                elif plot.objectName() == str(strike)+"Nifty":
                    if True == self.ShowNiftyOnOI:
                        pen = pg.mkPen(color=(0, 255, 0), width=1, style=QtCore.Qt.DotLine)
                        plot.setData(x = [self.TimeStamp(time) for time in time_x], y = niftyPrc, pen=pen)
                    else: 
                        plot.setData(x = [h.getTime()], y = [0])
                        plot.hide()
        except:
            log.logException("Exception in CEOIDataAvailable")
    def activeContactDataAvailable(self, tableData):
        self.activeContactsWidget.clear()

        try:
            hLabels = ["STRIKE", "TYPE", "%Chng", "OI", "LTP"]
            rowCnt = len(tableData)
            colCnt = len(hLabels)
            self.activeContactsWidget.setRowCount(rowCnt)
            self.activeContactsWidget.setColumnCount(colCnt)
            self.activeContactsWidget.verticalHeader().setVisible(False)
            self.activeContactsWidget.horizontalHeader().setVisible(True)
            self.activeContactsWidget.horizontalHeader().setStyleSheet("font-weight:bold;border:1px")
            self.activeContactsWidget.setHorizontalHeaderLabels(hLabels)
            self.activeContactsWidget.setSortingEnabled(False)

            for r in range(rowCnt):
                for c in range(colCnt): 
                    self.activeContactsWidget.setItem(r,c, QtGui.QTableWidgetItem(str(tableData[r][c])))   
            
            self.activeContactsWidget.resizeColumnsToContents()
            self.activeContactsWidget.setSortingEnabled(True)
            self.activeContactsWidget.horizontalHeader().setStretchLastSection(True)
            self.activeContactsWidget.sortItems(1, QtCore.Qt.AscendingOrder)
        except:
            log.logException("Exception in activeContactDataAvailable")
Esempio n. 3
0
    def InsertData(self, data, contractType):
        try:
            time        = str(h.getTime())
            strkPrice   = str(data['strikePrice'])
            expiryDate  = str(data['expiryDate'])
            oi          = data[contractType]['openInterest']
            oiChg       = data[contractType]['changeinOpenInterest']
            pOiChg      = data[contractType]['pchangeinOpenInterest']
            totVol      = data[contractType]['totalTradedVolume']
            iv          = data[contractType]['impliedVolatility']
            ltp         = data[contractType]['lastPrice']
            totBuyQty   = data[contractType]['totalBuyQuantity']
            totSellQty  = data[contractType]['totalSellQuantity']
            undelying   = data[contractType]['underlyingValue']
            ContractType= contractType

            self.conn = sqlite3.connect("OptionChain.db")
            self.c = self.conn.cursor()
            self.c.execute("INSERT INTO OptionChain (Date, Time, Strike, Expiry, ContractType, OpenInterest, ChangeInOI, pChangeInOI, TotVol, IV, LTP, TotBuyQty, TotSellQty, Underlying) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?, ?)", (self.todaydate, time, strkPrice, expiryDate, ContractType, oi, oiChg, pOiChg, totVol, iv, ltp, totBuyQty, totSellQty, undelying))
            self.conn.commit()
            self.c.close()
            self.conn.close()
        except:
            log.log("Strike = " + str(data['strikePrice']) + "   expiry date = " + str(data['expiryDate']))
            log.logException('OIDataWriterThread - Exception while inserting CE/PE data')
    def WriteData(self):
        nifty50Stocks = h.GetNifty50Data()
        try:
            if [] != nifty50Stocks:
                time = str(h.getTime())
                date = str(h.getDate())
                for record in nifty50Stocks:
                    if record['symbol'] in self.stockList:
                        symbol = record['symbol']
                        ltp = record['lastPrice']
                        TotVol = record['totalTradedVolume']
                        dOpen = record['open']
                        dHigh = record['dayHigh']
                        dLow = record['dayLow']
                        pChg = record['pChange']

                        self.conn = sqlite3.connect("OptionChain.db")
                        self.c = self.conn.cursor()
                        self.c.execute(
                            "INSERT INTO " + self.table +
                            " (Date, Time, Symbol, LTP, TotVol, Open, DayHigh, DayLow, pChange) VALUES (?,?,?,?,?,?,?,?,?)",
                            (date, time, symbol, ltp, TotVol, dOpen, dHigh,
                             dLow, pChg))
                        self.conn.commit()
                        self.c.close()
                        self.conn.close()
                return True
        except:
            log.logException(
                "NiftyHeavyWeightsWriterThread - exception during write data")

        return False
    def OIChangeDataAvailable(self, oiData):
        try:
            if oiData.empty == True:
                log.log('OIChangeDataAvailable - empty dataframe')
                return

            maxOI = max(oiData['OI'])

            for item in self.gScene.items():
                if(item.strike == "Strike"):
                    continue

                ceData = oiData.loc[item.strike + "-CE"]
                peData = oiData.loc[item.strike + "-PE"]                
                item.setValues(maxOI, ceData['OI'], peData['OI'], ceData['PChange'], peData['PChange'], ceData['LTP'], peData['LTP'])
            
            self.gScene.update()        

            '''
            smin = self.gView.verticalScrollBar().minimum()
            smax = self.gView.verticalScrollBar().maximum()
            self.gView.verticalScrollBar().setValue((smax-smin)/2)
            '''
        except:
            log.logException("Exception in OIChangeDataAvailable")
    def run(self):
        while True:
            activeContactsByVolume = h.GetActiveContractsByVolume()
            try:
                allRecords = []
                if [] != activeContactsByVolume:
                    for record in activeContactsByVolume:
                        if "NIFTY" == record['underlying']:
                            row = [
                                record['strikePrice'], record['optionType'],
                                ("%.2f" % record['pChange']),
                                record['openInterest'], record['lastPrice']
                            ]
                            allRecords.append(row)

                    allRecords = allRecords[:5]
                    self.activeContractsSgnl.emit(allRecords)
                else:
                    log.log(
                        "ActiveContractsReaderThread - active contacts by volume empty"
                    )
                    t.sleep(10)
                    continue
            except:
                log.logException(
                    "ActiveContractsReaderThread - Exception while getting active contacts"
                )
                t.sleep(10)
                continue

            t.sleep(self.timer)
Esempio n. 7
0
    def drawHeader(self, painter):
        try:
            bgBrush = QtGui.QBrush(QtGui.QColor(255, 255, 153))
            painter.setBrush(bgBrush)

            adjustWidth = 60
            painter.drawRect(
                QtCore.QRectF(self.rect.x(), self.rect.y(),
                              (self.rect.width() / 2) - adjustWidth,
                              self.rect.height()))
            painter.drawText(
                QtCore.QRectF(self.rect.x() + 5,
                              self.rect.y() + 5,
                              (self.rect.width() / 2) - adjustWidth,
                              self.rect.height()), "CE OI")
            ceLtpX = (self.rect.width() / 2) - adjustWidth
            ceLtpW = 35
            painter.drawRect(
                QtCore.QRectF(ceLtpX, self.rect.y(), ceLtpW,
                              self.rect.height()))
            painter.drawText(
                QtCore.QRectF(ceLtpX + 5,
                              self.rect.y() + 5, ceLtpW, self.rect.height()),
                "LTP")
            strikeX = ceLtpX + ceLtpW
            strikeW = 50
            painter.drawRect(
                QtCore.QRectF(strikeX, self.rect.y(), strikeW + 3,
                              self.rect.height()))
            painter.drawText(
                QtCore.QRectF(strikeX + 5,
                              self.rect.y() + 5, strikeW, self.rect.height()),
                "Strike")
            peLtpX = strikeX + strikeW
            peLtpW = 35
            painter.drawRect(
                QtCore.QRectF(peLtpX + 3, self.rect.y(), peLtpW,
                              self.rect.height()))
            painter.drawText(
                QtCore.QRectF(peLtpX + 5,
                              self.rect.y() + 5, peLtpW, self.rect.height()),
                "LTP")
            painter.drawRect(
                QtCore.QRectF((self.rect.width() / 2) + adjustWidth,
                              self.rect.y(),
                              (self.rect.width() / 2) - adjustWidth,
                              self.rect.height()))
            painter.drawText(
                QtCore.QRectF((self.rect.width() / 2) + adjustWidth + 5,
                              self.rect.y() + 5,
                              (self.rect.width() / 2) - adjustWidth,
                              self.rect.height()), "PE OI")
        except:
            log.logException("Exception in OpenInterestChangeItem while paint")
 def createDB(self):
     try:
         self.conn = sqlite3.connect("OptionChain.db")
         self.c = self.conn.cursor()
         query = "create table if not exists " + self.table + " (id integer primary key AUTOINCREMENT, Date Date not null, Time Time not null, Symbol varchar(20), LTP real, TotVol integer, Open real, DayHigh real, DayLow real, pChange real)"
         self.c.execute(query)
         self.c.close()
     except:
         log.logException('Exception during Create NiftyHeavyWeights table')
         log.log('Aborting process...')
         exit()
 def createDB(self):
     try:
         self.conn = sqlite3.connect("OptionChain.db")
         self.c = self.conn.cursor()
         query = "create table if not exists " + self.table + " (id integer primary key AUTOINCREMENT, Date Date not null, Time Time not null, Nifty50 real)"
         self.c.execute(query)
         self.c.close()
     except:
         log.logException('Exception during Create Nifty50 table')
         log.log('Aborting process...')
         exit()
 def DeleteOldData(self):
     try:
         self.conn = sqlite3.connect("OptionChain.db")
         self.c = self.conn.cursor()
         self.c.execute("DELETE from Nifty50 WHERE Date != '"+ self.todaydate + "'")
         self.conn.commit()
         self.c.close()
         self.conn.close()
         log.log('Deleted previous days data of nifty 50')
     except:
         log.logException('Exception : can not delete old data of nifty 50')
Esempio n. 11
0
 def createDB(self):
     try:
         self.conn = sqlite3.connect("OptionChain.db")
         self.c = self.conn.cursor()
         query = "create table if not exists OptionChain(id integer primary key AUTOINCREMENT, Date Date not null, Time Time not null, Strike int not null, Expiry varchar(20) not null, ContractType varchar(2), OpenInterest integer,ChangeInOI integer, pChangeInOI real, TotVol integer, IV real, LTP real, TotBuyQty integer, TotSellQty integer, Underlying real)"
         self.c.execute(query)
         self.c.close()
     except:
         log.logException('OIDataWriterThread - Exception during CreateDB()')
         log.log('Aborting process...')
         exit()
    def InsertNiftyData(self, niftyPrc):        
        try:
            time        = str(h.getTime())
            date        = str(h.getDate())

            self.conn = sqlite3.connect("OptionChain.db")
            self.c = self.conn.cursor()
            self.c.execute("INSERT INTO " + self.table + " (Date, Time, Nifty50) VALUES (?,?,?)", (date, time, niftyPrc))
            self.conn.commit()
            self.c.close()
            self.conn.close()
        except:
            log.logException("NiftyPriceWriterThread - exception during InsertNiftyData")
    def NiftyPriceAvailable(self, niftyData):
        try:
            price   = niftyData['Price']
            time_x  = niftyData['Time']

            if [] == price or [] == time_x:
                return

            for plot in self.graphs:
                if plot.objectName() == "Nifty":
                    pen = pg.mkPen(color=(0, 255, 0), width=1, style=QtCore.Qt.DotLine)
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = price, pen=pen)
        except:
            log.logException("Exception in NiftyPriceAvailable")
 def DeleteOldData(self):
     try:
         self.conn = sqlite3.connect("OptionChain.db")
         self.c = self.conn.cursor()
         self.c.execute("DELETE from NiftyHeavyWeights WHERE Date != '" +
                        self.todaydate + "'")
         self.conn.commit()
         self.c.close()
         self.conn.close()
         log.log(
             'NiftyHeavyWeightsWriterThread - Deleted previous days data')
     except:
         log.logException(
             'Exception : can not delete NiftyHeavyWeightsWriterThread old data'
         )
Esempio n. 15
0
 def ImportNseDataToDatabase(self):
     try:
         oiData = h.GetOIDataList()
         if oiData == []:
             log.log('empty OI data received')
             return
         
         for data in oiData:
             expiryDate = str(data['expiryDate'])
             if expiryDate in self.expiryDateList:
                 if "CE" in data.keys():
                     self.InsertData(data, 'CE')
                 if "PE" in data.keys():
                     self.InsertData(data, 'PE')        
     except:
         log.logException('OIDataWriterThread - Exception while reading nse data or adding record to database')
    def PEOIDataAvailable(self, peData):
        try:
            strike  = peData['Strike']
            time_x  = peData['Time']
            pe_oi_y = peData['OI']
            totVolume= peData['Volume']

            if [] == strike or [] == time_x or [] == pe_oi_y:
                return

            #Update PE graphs with SetData
            for plot in self.graphs:
                if plot.objectName() == str(strike)+"PE":
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = pe_oi_y, pen='b')
                    self.UpdateVolumeChart(time_x, totVolume, str(strike)+"PE"+"Volume" )
        except:
            log.logException("Exception in PEOIDataAvailable")
    def UpdateVolumeChart(self, time_x_axis, VolumeList, uniqueID):
        try:
            time_x = copy.deepcopy(time_x_axis)
            if len(time_x) < 2:
                return

            volume  = [] 
            time_x.pop(0)

            volPrv = None
            for vl in VolumeList:
                if None != volPrv:
                    volume.append(vl-volPrv) 
                volPrv = vl
            
            volume_y = volume

            '''
            volume_y = []
            k = random.sample([1000, 1500], 1)
            if uniqueID.find('CE') != -1:
                volume_y = [ x + k[0] for x in volume  ]
            else:
                volume_y = [ x + k[0] for x in volume  ]
            '''

            '''
            log.log("--------------  " + uniqueID + "  ----------------------")
            log.log(time_x)
            log.log(volume)
            log.log(VolumeList)
            log.log("--------------------------------------------------------------")
            '''

            for plot in self.graphs:
                if plot.objectName() == uniqueID:
                    plot.setOpts(x = [self.TimeStamp(time) for time in time_x], height=volume_y, width=0.5)

                    if uniqueID.find('CE') != -1:
                        plot.setZValue(5)
                    else:
                        plot.setZValue(4)

        except:
            log.logException("Exception while plotting volume cart for : " + uniqueID)
    def HeavyWeightsDataAvailable(self, niftyHeavyWightsData):        
        if [] == self.graphs:
            return
            
        try:
            heavyWeightsTimePrice = {}
            heavyWeightsTimeVol = {}

            for record in niftyHeavyWightsData:
                time = record[0]
                ltp  = record[2]
                vol  = record[3]

                if time in heavyWeightsTimePrice:
                    heavyWeightsTimePrice[time] = heavyWeightsTimePrice[time] + ltp 
                    heavyWeightsTimeVol[time] = heavyWeightsTimeVol[time] + vol
                else:
                    heavyWeightsTimePrice[time] = ltp  
                    heavyWeightsTimeVol[time] = vol    

            #Heavy weights chart
            price   = [] 
            time_x  = []

            for pr in heavyWeightsTimePrice.values():
                price.append(pr)
            for tm in heavyWeightsTimePrice.keys():
                time_x.append(tm)

            for plot in self.graphs:
                if plot.objectName() == "NiftyHeavy":
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = price, pen='y')

            #Heavy weights volume chart
            self.UpdateVolumeChart(time_x, heavyWeightsTimeVol.values(), "HeavyWeightsVolume")   
        except:
            log.logException("Exception in HeavyWeightsDataAvailable")
Esempio n. 19
0
    def ReadData(self):
        self.conn = sqlite3.connect("OptionChain.db")
        self.c = self.conn.cursor()
        tPeriod = self.timePeriod

        try:
            for strike in self.otmsToShow:        
                ce_data = {}
                pe_data = {}    
                query = "SELECT Time, OpenInterest, Underlying, TotVol FROM OptionChain WHERE Expiry = '" + self.currentExpiry + "' AND "
                query = query + " ContractType = 'CE' AND "  + " Strike = " + str(strike) + " AND Date = '" + self.todayDate + "'" 
                result = self.c.execute(query)
                ceRecords = result.fetchall()

                niftyPrc = []
                timeLst  = []
                OI       = []
                TotVolume= []
                i        = 0
                sz       = len(ceRecords)
                
                for record in ceRecords:
                    if 1 == tPeriod or 0 == i or i == sz-1 or 0 == (i % tPeriod):
                        timeLst.append(record[0])
                        OI.append(record[1]) 
                        niftyPrc.append(record[2])
                        TotVolume.append(record[3])

                ce_data['Strike'] = strike
                ce_data['Time'] = timeLst
                ce_data['OI'] = OI
                ce_data['Nifty']  = niftyPrc
                ce_data['Volume'] = TotVolume       
                self.ceSignal.emit(ce_data)

                query = "SELECT Time, OpenInterest, TotVol FROM OptionChain WHERE Expiry = '" + self.currentExpiry + "' AND "
                query = query + " ContractType = 'PE' AND "  + " Strike = " + str(strike) + " AND Date = '" + self.todayDate + "'"
                result = self.c.execute(query)
                peRecords = result.fetchall()

                timeLst  = []
                OI       = []
                TotVolume= []
                i  = 0
                sz = len(peRecords)
                for record in peRecords:
                    if 1 == tPeriod or 0 == i or i == sz-1 or 0 == (i % tPeriod):
                        timeLst.append(record[0])
                        OI.append(record[1]) 
                        TotVolume.append(record[2])
                    i = i+1

                pe_data['Strike'] = strike
                pe_data['Time'] = timeLst
                pe_data['OI'] = OI       
                pe_data['Volume'] = TotVolume       
                self.peSignal.emit(pe_data)

            query = "SELECT Time, Nifty50 FROM " + self.NiftyTable + " WHERE Date = '" + self.todayDate + "'" 
            result = self.c.execute(query)
            niftyRecords = result.fetchall()

            timeLst = []
            price   = []
            i  = 0
            sz = len(niftyRecords)
            for record in niftyRecords:
                if 1 == tPeriod or 0 == i or i == sz-1 or 0 == (i % tPeriod):
                    timeLst.append(record[0])
                    price.append(record[1]) 

            nifty_data = {}    
            nifty_data['Time'] = timeLst
            nifty_data['Price'] = price       
            self.niftySignal.emit(nifty_data)

            if [] != self.heavyWeightsList:
                subQry = "("
                for stk in self.heavyWeightsList:
                    subQry = subQry + "'" + stk + "',"
                subQry = subQry[:-1]
                subQry = subQry + ")"

                query = "SELECT Time, Symbol, LTP, TotVol, pChange FROM NiftyHeavyWeights WHERE Date = '" + self.todayDate + "'"
                query = query +  " and Symbol in " + subQry 

                result = self.c.execute(query)
                niftyRecords = result.fetchall()

                if [] != niftyRecords:
                    self.niftyHeavyWeightsSgnl.emit(niftyRecords)
            else:
                self.niftyHeavyWeightsSgnl.emit([])

        except:
            log.logException("OIDataReaderThread - exception during read data")

        self.c.close()
        self.conn.close()
Esempio n. 20
0
    def ReadData(self):
        self.conn = sqlite3.connect("OptionChain.db")
        self.c = self.conn.cursor()

        try:
            if [] == self.strikesToRead:
                log.log("OIChangeReaderThread - strikes to read in null")
                return

            indexList = []
            strikeList = []
            ExpiryList = []
            ContractTypeList = []
            OIList = []
            pChgList = []
            ltpList = []

            for stk in self.strikesToRead:
                query = "SELECT Strike, Expiry, ContractType, OpenInterest, pChangeInOI, LTP FROM OptionChain WHERE Expiry = '" + self.currentExpiry + "' AND "
                query = query + " Strike = " + str(
                    stk
                ) + " AND ContractType = 'CE' AND Date = '" + self.todayDate + "' order by Time desc limit 1"
                result = self.c.execute(query)
                allRecords = result.fetchall()

                if len(allRecords) == 1:
                    lastRedord = allRecords[0]
                    #dataFrame[str(stk)+"-CE"] = lastRedord
                    #print(lastRedord)
                    indexList.append(str(lastRedord[0]) + "-CE")
                    strikeList.append(lastRedord[0])
                    ExpiryList.append(lastRedord[1])
                    ContractTypeList.append(lastRedord[2])
                    OIList.append(lastRedord[3])
                    pChgList.append(lastRedord[4])
                    ltpList.append(lastRedord[5])

                query = "SELECT Strike, Expiry, ContractType, OpenInterest, pChangeInOI, LTP FROM OptionChain WHERE Expiry = '" + self.currentExpiry + "' AND "
                query = query + " Strike = " + str(
                    stk
                ) + " AND ContractType = 'PE' AND Date = '" + self.todayDate + "' order by Time desc limit 1"
                result = self.c.execute(query)
                allRecords = result.fetchall()

                if len(allRecords) == 1:
                    lastRedord = allRecords[0]
                    #dataFrame[str(stk)+"-PE"] = lastRedord
                    #print(lastRedord)
                    indexList.append(str(lastRedord[0]) + "-PE")
                    strikeList.append(lastRedord[0])
                    ExpiryList.append(lastRedord[1])
                    ContractTypeList.append(lastRedord[2])
                    OIList.append(lastRedord[3])
                    pChgList.append(lastRedord[4])
                    ltpList.append(lastRedord[5])

            dataFrame = pd.DataFrame({
                "index": indexList,
                "Strike": strikeList,
                "Expiry": ExpiryList,
                "ContractType": ContractTypeList,
                "OI": OIList,
                "PChange": pChgList,
                "LTP": ltpList
            })

            dataFrame.set_index('index', inplace=True)
            self.olChgSignal.emit(dataFrame)

        except:
            log.logException(
                "OIChangeReaderThread - exception while reading data")

        self.c.close()
        self.conn.close()
Esempio n. 21
0
    def paint(self, painter, option, widget):
        try:
            if ("Strike" == self.strike):
                self.drawHeader(painter)
                return

            ceOIColor = QtGui.QBrush(QtGui.QColor(255, 127, 80))
            peOIColor = QtGui.QBrush(QtGui.QColor(144, 238, 144))
            grayBrush = QtGui.QBrush(QtGui.QColor(192, 192, 192))

            #draw outer rect & strike
            defBrush = painter.brush()
            painter.setBackground(grayBrush)
            adjustWidth = 60
            adjustHeightForText = 5
            adjustWidthForText = 5
            adjustWidthForText_sm = 2
            painter.drawRect(
                QtCore.QRectF(self.rect.x(), self.rect.y(),
                              (self.rect.width() / 2) - adjustWidth,
                              self.rect.height()))
            painter.setBackground(defBrush)
            ceLtpX = (self.rect.width() / 2) - adjustWidth
            ceLtpW = 35
            painter.drawText(
                QtCore.QRectF(ceLtpX + adjustWidthForText_sm,
                              self.rect.y() + adjustHeightForText, ceLtpW,
                              self.rect.height()), str(round(self.ceLtp, 1)))
            painter.drawLine(ceLtpX + adjustWidthForText_sm + ceLtpW - 1, 0,
                             ceLtpX + adjustWidthForText_sm + ceLtpW - 2,
                             self.rect.height())
            painter.setBackground(grayBrush)
            strikeX = ceLtpX + ceLtpW
            strikeW = 50
            painter.drawText(
                QtCore.QRectF(strikeX + adjustWidthForText,
                              self.rect.y() + adjustHeightForText, strikeW,
                              self.rect.height()), self.strike)
            painter.drawLine(strikeX + adjustWidthForText + strikeW - 1, 0,
                             strikeX + adjustWidthForText + strikeW,
                             self.rect.height())
            painter.setBackground(grayBrush)
            peLtpX = strikeX + strikeW
            peLtpW = 35
            painter.drawText(
                QtCore.QRectF(peLtpX + adjustWidthForText,
                              self.rect.y() + adjustHeightForText, peLtpW,
                              self.rect.height()), str(round(self.peLtp, 1)))
            painter.setBackground(grayBrush)
            painter.drawRect(
                QtCore.QRectF((self.rect.width() / 2) + adjustWidth,
                              self.rect.y(),
                              (self.rect.width() / 2) - adjustWidth,
                              self.rect.height()))
            painter.setBackground(defBrush)

            #update the OI change
            painter.setBrush(ceOIColor)
            cePercentWidth = (((self.ceOI / self.maxOI) * 100.0) *
                              ((self.rect.width() / 2) - adjustWidth)) / 100
            painter.drawRoundedRect(
                QtCore.QRectF(self.rect.x(),
                              self.rect.y() + 5, cePercentWidth,
                              self.rect.height() - 10), 5, 0)
            ceChg = str(round(self.ceOI / 1000.0, 1)) + "k (" + str(
                round(self.cePercent, 1)) + "%)"
            painter.drawText(
                QtCore.QRectF(self.rect.x() + adjustWidthForText,
                              self.rect.y() + adjustHeightForText,
                              (self.rect.width() / 2), self.rect.height()),
                ceChg)

            painter.setBrush(peOIColor)
            pePercentWidth = (((self.peOI / self.maxOI) * 100.0) *
                              ((self.rect.width() / 2) - adjustWidth)) / 100
            painter.drawRoundedRect(
                QtCore.QRectF(self.rect.width() - pePercentWidth,
                              self.rect.y() + 5, pePercentWidth,
                              self.rect.height() - 10), 0, 5)
            peChg = str(round(self.peOI / 1000.0, 1)) + "k (" + str(
                round(self.pePercent, 1)) + "%)"
            painter.drawText(
                QtCore.QRectF(
                    (self.rect.width() / 2) + adjustWidth + adjustWidthForText,
                    self.rect.y() + adjustHeightForText,
                    (self.rect.width() / 2) - adjustWidth, self.rect.height()),
                peChg)

            painter.setBrush(defBrush)
        except:
            log.logException(
                "Exception in OpenInterestChangeItem during paint")