Ejemplo n.º 1
0
    def getDirectory(self):
        '''
        Put together the settings for scheme (realized here), journal and theDate to get the indir
        '''

        scheme = self.settings.value('scheme')
        journal = self.settings.value('journal')
        if not scheme or not journal:
            return ''

        d = self.settings.value('theDate')
        if d is None:
            return ''
        if isinstance(d, (QDate, QDateTime)):
            d = qtime2pd(d)
        Year = d.year
        month = d.strftime('%m')
        MONTH = d.strftime('%B')
        day = d.strftime('%d')
        DAY = d.strftime('%A')
        try:
            schemeFmt = scheme.format(Year=Year,
                                      month=month,
                                      MONTH=MONTH,
                                      day=day,
                                      DAY=DAY)
        except KeyError:
            return None
        inpath = os.path.join(journal, schemeFmt)
        return inpath
Ejemplo n.º 2
0
    def loadit(self):
        '''
        Load saved objects
        '''

        self.sc.doWeSave()
        daDate = self.ui.dateEdit.date()
        daDate = qtime2pd(daDate)
        self.loadedDate = daDate
        self.settings.setValue('theDate', daDate)
        self.initialize()

        if not self.indir:
            logging.info('No file to load?')
            return
        jf = JournalFiles(indir=self.indir,
                          outdir=self.outdir,
                          theDate=self.theDate,
                          infile=self.infile,
                          inputType=self.inputtype,
                          infile2=self.positions,
                          mydevel=True)

        lf = LayoutForms(self.sc, jf, None)

        if not lf.loadTradesFromDB(daDate):
            msg = f'No user data has been saved for {daDate.strftime("%A %B %d")}. Loading trade data.'
            logging.info(msg)
            # msgbx = QMessageBox()
            # msgbx.setIconPixmap(QPixmap("structjour/images/ZSLogo.png"))
            # msgbx.setText(msg)
            # msgbx.exec()
            self.runnit(True)
Ejemplo n.º 3
0
    def setTheScheme(self, scheme):
        '''
        Button, LineEdit and Label used to set and display a directory naming scheme.
        '''
        d = self.settings.value('theDate')
        if not d:
            d = pd.Timestamp.today()
        elif isinstance(d, (QDate, QDateTime)):
            d = qtime2pd(d)

        Year = d.year
        month = d.strftime('%m')
        MONTH = d.strftime('%B')
        day = d.strftime('%d')
        DAY = d.strftime('%A')
        try:
            schemeFmt = scheme.format(Year=Year,
                                      month=month,
                                      MONTH=MONTH,
                                      day=day,
                                      DAY=DAY)
        except (KeyError, ValueError):
            schemeFmt = scheme

        indir = self.fui.journal.text()
        schemeFmt = os.path.join(indir, schemeFmt)
        self.settings.setValue('scheme', scheme)
Ejemplo n.º 4
0
    def initialize(self):
        '''
        Initialize the inputs and outs
        '''
        # Might blitz thes lines if JournalFiles gets an overhaul. For ease of transaiton
        # We keep JournalFiles till its allworks into the Qt run
        self.settings = self.sc.settings
        self.inputtype = self.settings.value('inputType')
        self.indir = self.sc.getDirectory()
        inkey = ''
        if self.inputtype == 'DAS':
            inkey = 'dasInfile'
        elif self.inputtype == 'IB_HTML':
            inkey = 'ibInfileName'
        if self.settings.value('outdirPolicy') == 'default':
            self.outdir = None
        else:
            self.outdir = self.settings.value('outdir')
        theDate = self.settings.value('theDate', pd.Timestamp.today())
        if theDate and isinstance(theDate, (QDate, QDateTime)):
            theDate = qtime2pd(theDate)
        self.theDate = theDate
        self.positions = self.settings.value('dasInfile2')

        # end blitz
        self.infile = self.settings.value(inkey, "")
        self.inpathfile = self.ui.infileEdit.text()
        if os.path.splitext(self.inpathfile)[1].lower() == ".csv":
            self.infile = os.path.split(self.inpathfile)[1]

        self.sc.setWindowTitle(self.sc.baseWindowTitle)
Ejemplo n.º 5
0
def getDirectory(daDate=None):
    '''
    Get the directory in the journal subdirs that represent daDate. Relies on
    the naming scheme saved in ff.settings
    '''
    ff = FindFiles()
    if daDate:
        d = pd.Timestamp(daDate)
    else:
        d = ff.settings.value('theDate')

    scheme = ff.settings.value('scheme')
    journal = ff.settings.value('journal')
    if not scheme or not journal:
        return None
    # scheme = scheme.split('/')[0]

    if isinstance(d, (QDate, QDateTime)):
        d = qtime2pd(d)
    Year = d.year
    month = d.strftime('%m')
    MONTH = d.strftime('%B')
    day = d.strftime('%d')
    DAY = d.strftime('%A')
    try:
        schemeFmt = scheme.format(Year=Year,
                                  month=month,
                                  MONTH=MONTH,
                                  day=day,
                                  DAY=DAY)
    except KeyError:
        return None
    inpath = os.path.join(journal, schemeFmt)
    return inpath
Ejemplo n.º 6
0
 def filter_by_dates(self, query=None):
     if query is None and self.query is None:
         return
     key = 'dates'
     if key in self.cud and self.cud['dates'][0] and self.cud['dates'][1]:
         start, end = qtime2pd(self.cud[key][0]), qtime2pd(self.cud[key][1])
         now = pd.Timestamp.now().date()
         if now >= start:
             if query is None:
                 self.query = self.query.filter(
                     and_(TradeSum.date >= start.strftime("%Y%m%d"),
                          TradeSum.date < end.strftime("%Y%m%d")))
                 return self.query
             else:
                 query = query.filter(
                     and_(TradeSum.date >= start.strftime("%Y%m%d"),
                          TradeSum.date < end.strftime("%Y%m%d")))
                 return query
     return query if query else self.query
Ejemplo n.º 7
0
    def getImageName(self, key, wloc, uinfo=''):
        '''
        This is an image name for a pasted image. We don't know the interval or time limits beyond
        the trade times. Remove any interval info, add the widget name (e.g. 'chart1') to the
        generic name.
        :params key: The name of the trade from the tradeList
        :params wloc: The name of the clickLabel widget
        :params uinfo: Misc string to add to the name
        '''

        name = self.ts[key][wloc].unique()[0]
        data = self.getChartData(key, wloc)
        if name:
            n, ext = os.path.splitext(name)
            if n.endswith('min'):
                n = n[:-5]
            wwloc = wloc
            if n.find(wwloc) > 0:
                wwloc = ''
            if uinfo and n.find(uinfo) > 0:
                uinfo = ''
            n = n + wwloc + uinfo + ext
        elif data:
            # Just in case the name is missing
            b = data[1]
            e = data[2]

            begin = qtime2pd(b)
            end = qtime2pd(e)
            delt = end - begin
            bstring = begin.strftime('%H%M%S')
            estring = delt.__str__().replace(':', '.')
            n = 'Trade{}_{}_{}_{}_{}.png'.format(key, bstring, estring, wloc,
                                                 uinfo)
            n = n.replace(' ', '_')
        if data[0] != n:
            data[0] = n
            self.setChartData(key, data, wloc)
        return n
Ejemplo n.º 8
0
    def getImageNameX(self, key, wloc):
        '''
        This is a chart name for which we know the candle interval because we gave that parameter
        to the stock api.
        '''
        name = key.replace(' ', '_')
        data = self.getChartData(key, wloc)

        # if not data:
        #     raise ValueError('Raise the error to call attention to programming deficit')

        b = pd.Timestamp(qtime2pd(data[1]))
        e = pd.Timestamp(qtime2pd(data[2]))

        delt = e - b
        bstring = b.strftime('%H%M%S')
        estring = delt.__str__().replace(':', '.')
        istring = str(data[3]) + 'min'
        n = 'Trade{}_{}_{}_{}.png'.format(name, bstring, estring, istring)
        n = n.replace(' ', '_')
        if data[0] != n:
            data[0] = n
            self.setChartData(key, data, wloc)
        return n
Ejemplo n.º 9
0
    def runDBInput(self, daDate, jf):
        '''
        Get the trades from daDate in the DB and process the trades
        '''
        self.statement = StatementDB()

        daDate = qtime2pd(daDate)

        df = self.statement.getStatement(daDate)
        if df.empty:
            return False

        tu = DefineTrades(self.inputtype)
        dframe, ldf = tu.processDBTrades(df)
        lf = LayoutForms(self.sc, jf, dframe)
        lf.pickleitnow()
        lf.runTtoSummaries(ldf)
        self.statement.addTradeSummariesSA(lf.ts, ldf)
        return True
Ejemplo n.º 10
0
 def gotTrades(self):
     '''
     From the text in the infileEdit box, determine if we have
     trades in the db. We can tell because the first token is an
     int showing how many trades are held.
     '''
     if self.sc.ui.useDatabase.isChecked():
         text = self.sc.ui.infileEdit.text()
         if len(text):
             try:
                 num = int(text.split(' ')[0])
                 if num > 0:
                     return True
             except Exception:
                 pass
     if self.statement is not None:
         count, countt = self.statement.getNumTicketsForDaySA(
             qtime2pd(self.sc.ui.dateEdit.date()))
         if count > 0 or countt > 0:
             return True
     return False
Ejemplo n.º 11
0
    def start(self):
        if not self.settings.value('disciplined'):
            self.ui.showResults.setText(
                'Please set your disciplined file location in file->settings')
            return
        fn = self.settings.value('disciplined')
        if not os.path.exists(fn):
            msg = f'Your set file: {fn} does not exist'
            msg += '\nPlease re-set your disciplined file location in file->settings'
            self.ui.showResults.setText(msg)
            return
        if not self.ui.importDateRadio.isChecked(
        ) and not self.ui.importSinceDateRadio.isChecked():
            self.ui.importDateRadio.setChecked(True)
        wb = load_workbook(fn)
        begin = qtime2pd(self.ui.importDateEdit.date())
        self.ui.showResults.setText('')
        if self.ui.importSinceDateRadio.isChecked():
            current = begin
            now = pd.Timestamp.today()
            delt = pd.Timedelta(days=1)
            while now > current:
                msg = registerTrades(wb, current)
                if not msg:
                    msg = f'''Processed date: {current.strftime('%A, %B %d, %Y')}'''
                self.ui.showResults.append(msg)
                # self.ui.showResults.update()
                QApplication.processEvents()  # update gui for pyqt
                current += delt
        else:
            msg = registerTrades(wb, begin)
            if not msg:
                msg = f'''Processed date {begin.strftime('%A, %B %d, %Y')}'''
            self.ui.showResults.append(msg)

        wb.save(fn)
        self.ui.showResults.append('done!')
Ejemplo n.º 12
0
 def ok(self, val):
     print(val.text())
     if val.text() == 'OK':
         # print(qtime2pd(self.ui.dateEdit.date()))
         self.settings.setValue('theDate',
                                qtime2pd(self.ui.dateEdit.date()))