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
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)
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)
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)
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
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
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
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
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
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
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!')
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()))