def datetime_arithmetic(): """ 时间日期的计算 """ now = QDateTime().currentDateTime() print("Today:", now.toString(Qt.ISODate)) print("Adding 12 days: {0}".format(now.addDays(12).toString(Qt.ISODate))) print("Subtracting 22 days: {0}".format( now.addDays(-22).toString(Qt.ISODate))) print("Adding 50 seconds: {0}".format( now.addSecs(50).toString(Qt.ISODate))) print("Adding 3 months: {0}".format(now.addMonths(3).toString(Qt.ISODate))) print("Adding 12 years: {0}".format(now.addYears(12).toString(Qt.ISODate)))
def load_history_data(pair, start_date, finish_date): try: start_date = QDateTime(start_date) finish_date = QDateTime(finish_date) date = start_date.date() year_month_load = [] while not (date.month() == finish_date.date().month() and date.year() == finish_date.date().year()): year_month_load.append(str(date.year()) + "_" + str(date.month())) date = date.addMonths(1) year_month_load.append(str(date.year()) + "_" + str(date.month())) trades = [] for year_month in year_month_load: trades_load = [] if os.path.isfile(SAVE_PATH + '/' + pair + '_' + year_month + '.hst'): while True: try: with open( SAVE_PATH + '/' + pair + '_' + year_month + '.hst', 'rb') as f: trades_load = pickle.loads( zlib.decompress(f.read())) break except: time.sleep(1) trades += trades_load finish_date = finish_date.addDays(1) if len(trades) != 0: trades = trades[find_pos_to_date(trades, start_date): find_pos_to_date(trades, finish_date)] return trades except: print('load_history_data', pair) sys.exit()
def drawChart(self): conn=sqlite3.connect('emaildb.sqlite') cur=conn.cursor() title=self.lineEditProdName.text() mall_url=self.farm_combo.currentText() sql=f"select dt, jjim, sold, review from PROD3 where title='{title}'" cur.execute(sql) conn.commit() rows=cur.fetchall() series=[] # series = QLineSeries(self) series.append(QLineSeries(self)) series.append(QLineSeries(self)) series.append(QLineSeries(self)) tod=datetime.today() nextday=datetime.today()+timedelta(days=1) d=QDate(2020,1,3) dt=QDateTime(d) d2=d.addDays(1) dt2=dt.addDays(1) for i,row in enumerate(rows): for j, serie in enumerate(series): # serie.append((dt.addDays(i)).toMSecsSinceEpoch(),int(row[j+1])) serie.append(i,int(row[j+1])) for serie in series: serie.setPointsVisible(True) self.linechart.removeAllSeries() self.linechart2.removeAllSeries() self.linechart3.removeAllSeries() self.linechart.addSeries(series[0]) self.linechart2.addSeries(series[1]) self.linechart3.addSeries(series[2]) dateAxis=QDateTimeAxis() dateAxis2=QDateTimeAxis() dateAxis3=QDateTimeAxis() self.linechart.addAxis(dateAxis, Qt.AlignBottom) self.linechart2.addAxis(dateAxis2, Qt.AlignBottom) self.linechart3.addAxis(dateAxis3, Qt.AlignBottom) self.linechart.createDefaultAxes() self.linechart2.createDefaultAxes() self.linechart3.createDefaultAxes() self.linechart.setAnimationOptions(QChart.SeriesAnimations) self.linechart.setTitle("찜") self.linechart.legend().setVisible(True) self.linechart2.setAnimationOptions(QChart.SeriesAnimations) self.linechart2.setTitle("구매") self.linechart2.legend().setVisible(True) self.linechart3.setAnimationOptions(QChart.SeriesAnimations) self.linechart3.setTitle("리뷰") self.linechart3.legend().setVisible(True) self.chartview.setRenderHint(QPainter.Antialiasing) self.chartview2.setRenderHint(QPainter.Antialiasing) self.chartview3.setRenderHint(QPainter.Antialiasing) cur.close() conn.close()
class SunMoonWindow(QMainWindow): def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setupGraphicsScene() self.configuration = tombo.configfile.ConfigFile('sunmoon.conf') self.getConfiguration() self.minimum_interval = self.miscellaneous['minimum_interval'] self.setLocation() self.timer = QTimer() self.setupMethods() self.setCurrentDate() self.setConfigurationText() self.displayedDate = QDateTime(self.ui.deDate.date()) self.show() def setLocation(self): self.location = Location((self.astral['name'], self.astral['region'], float(self.astral['latitude']), float(self.astral['longitude']), self.astral['timezone'], self.astral['elevation'])) def getConfiguration(self): self.astral = self.configuration.getItems('ASTRAL') self.miscellaneous = self.configuration.getItems('MISCELLANEOUS') def setConfigurationText(self): config_label_text_color = "#" + self.miscellaneous['config_text_color'] self.ui.leLatitude.setText(self.astral['latitude']) self.ui.lblLatitude.setText("<font color='" + config_label_text_color + "'>" + self.astral['latitude'] + "</font>") self.ui.leLongitude.setText(self.astral['longitude']) self.ui.lblLongitude.setText("<font color='" + config_label_text_color + "'>" + self.astral['longitude'] + "</font>") self.ui.leElevation.setText(self.astral['elevation']) self.ui.lblElevation.setText("<font color='" + config_label_text_color + "'>" + self.astral['elevation'] + "</font>") self.ui.leLocation.setText(self.astral['name']) self.ui.lblLocation.setText("<font color='" + config_label_text_color + "'>" + self.astral['name'] + "</font>") self.ui.leCountry.setText(self.astral['region']) self.ui.lblRegion.setText("<font color='" + config_label_text_color + "'>" + self.astral['region'] + "</font>") self.ui.leTimeZone.setText(self.astral['timezone']) self.ui.lblTimeZone.setText("<font color='" + config_label_text_color + "'>" + self.astral['timezone'] + "</font>") self.ui.leMinimumInterval.setText(self.miscellaneous['minimum_interval']) self.ui.leTextColor.setText(self.miscellaneous['config_text_color']) def setCurrentDate(self): self.ui.deDate.setDate(QDate.currentDate()) self.displayedDate = QDateTime(self.ui.deDate.date()) def setupGraphicsScene(self): self.scene = QGraphicsScene() self.scene.setBackgroundBrush(Qt.black) self.scene.setSceneRect(0, 0, 209, 169) self.ui.gvMoon.setScene(self.scene) self.brushWhite = QBrush(QColor(Qt.white)) self.brushBlack = QBrush(QColor(Qt.black)) self.pen = QPen(Qt.NoPen) self.ellipseWhite = self.scene.addEllipse(50, 30, 100, 100, self.pen, self.brushWhite) self.ellipseBlack = self.scene.addEllipse(50, 30, 100, 100, self.pen, self.brushBlack) def setupMethods(self): self.ui.deDate.dateChanged.connect(self.setTimes) self.ui.pbStart.clicked.connect(lambda: self.autoStartStop("start")) self.ui.pbStop.clicked.connect(lambda: self.autoStartStop("stop")) self.ui.pbSave.clicked.connect(lambda: self.configActions("save")) self.ui.pbDiscard.clicked.connect(lambda: self.configActions("discard")) self.ui.pbClear.clicked.connect(lambda: self.configActions("clear")) self.timer.timeout.connect(self.advanceDate) self.ui.pbSetCurrentDate.clicked.connect(self.setCurrentDate) #---------------------------------------------------------------------- def configActions(self, action): """Some pushbutton actions route here.""" #print(action) if action == 'clear': self.clearConfigFields() elif action == 'discard': self.clearConfigFields() self.setConfigurationText() elif action == 'save': self.saveConfiguration() #---------------------------------------------------------------------- def saveConfiguration(self): """Save info from config fields.""" self.configuration.setValue('MISCELLANEOUS', 'minimum_interval', self.ui.leMinimumInterval.text()) self.configuration.setValue('MISCELLANEOUS', 'config_text_color', self.ui.leTextColor.text()) self.configuration.setValue('ASTRAL', 'latitude', self.ui.leLatitude.text()) self.configuration.setValue('ASTRAL', 'longitude', self.ui.leLongitude.text()) self.configuration.setValue('ASTRAL', 'elevation', self.ui.leElevation.text()) self.configuration.setValue('ASTRAL', 'timezone', self.ui.leTimeZone.text()) self.configuration.setValue('ASTRAL', 'name', self.ui.leLocation.text()) self.configuration.setValue('ASTRAL', 'region', self.ui.leCountry.text()) self.getConfiguration() self.setConfigurationText() #---------------------------------------------------------------------- def clearConfigFields(self): """Clear text from all config tab fields.""" self.ui.leLatitude.setText('') self.ui.leLongitude.setText('') self.ui.leElevation.setText('') self.ui.leLocation.setText('') self.ui.leCountry.setText('') self.ui.leTimeZone.setText('') self.ui.leMinimumInterval.setText('') self.ui.leTextColor.setText('') #---------------------------------------------------------------------- def discardConfigFields(self): """Clear all config fields and repopulate with original text.""" self.clearConfigFields() self.setConfigurationText() def autoStartStop(self, action): if action == 'start': if self.ui.sbInterval.value() == 0: self.timer.setInterval(int(self.miscellaneous['minimum_interval'])) else: self.timer.setInterval(self.ui.sbInterval.value() * 1000) self.timer.start() elif action == 'stop': self.timer.stop() def advanceDate(self): self.displayedDate = self.displayedDate.addDays(1) self.ui.deDate.setDate(self.displayedDate.date()) def setTimes(self): date_displayed = self.ui.deDate.date().toPyDate() astral_info = self.location.sun(date_displayed) self.ui.leSunrise.setText(astral_info['sunrise'].strftime('%I:%M %p')) self.ui.leSunset.setText(astral_info['sunset'].strftime('%I:%M %p')) self.ui.leDaylight.setText(self.calcDaylight(astral_info['sunset'] - astral_info['sunrise'])) self.ui.leMoonPhase.setText('Day ' + str(self.location.moon_phase(date_displayed, type(float)))) self.setMoonPhase(self.location.moon_phase(date_displayed, type(float))) #print(self.location.moon_phase(date=None, rtype=type(float))) def calcDaylight(self, timedelta): return '{} hours, {} minutes'.format(timedelta.seconds // 3600, (timedelta.seconds // 60) % 60) def setMoonPhase(self, moon_phase): #print(moon_phase) increment = 100 / 14 self.scene.removeItem(self.ellipseBlack) if moon_phase < 15: self.ellipseBlack = self.scene.addEllipse((moon_phase * -increment) + 50, 30, 100, 100, self.pen, self.brushBlack) else: self.ellipseBlack = self.scene.addEllipse(((moon_phase - 28) * -increment) + 50, 30, 100, 100, self.pen, self.brushBlack)
def extremum(pair, profit_buy_to_sell, profit_sell_to_buy): date = QDateTime(2000, 1, 1, 0, 0, 0) list_extremum = load_from_file(SAVE_PATH_EXTREMUM + '/' + pair + '_' + str(profit_buy_to_sell) + '_' + str(profit_sell_to_buy) + '.data') old_list_extremum = [] while True: if len(list_extremum) % 2 == 1: list_extremum = list_extremum[:-1] list_extremum = list_extremum[:-2] old_buy, old_sell = [], [] if list_extremum: date = unixdate_to_qdate(list_extremum[-1]['date']) while date.date() <= QDate.currentDate(): all_trades = load_history_data(pair, date, date) if all_trades: last_trade = all_trades[-1] if date.date() == QDate.currentDate(): all_trades += DownLoadTrades().load_data_in_Exmo( pair, [last_trade]) for item in all_trades: if list_extremum: if item['trade_id'] > list_extremum[-1]['trade_id']: if item['type'] == "buy": # buy if len(list_extremum) % 2 == 1: if float(list_extremum[-1]['price']) > float( item['price']): list_extremum[-1] = item.copy() # print('B_ED', float(item['price'])) else: if (1 - float(item['price']) / float(list_extremum[-1]['price']) ) * 100 >= profit_sell_to_buy: if (old_buy and float(old_buy['price']) > float( item['price'])) or not old_buy: # print('B_AD', float(item['price'])) list_extremum.append(item) old_buy, old_sell = [], [] else: # sell if len(list_extremum) % 2 == 1: if (float(item['price']) / float(list_extremum[-1]['price']) - 1) * 100 >= profit_buy_to_sell: # print('S_AD', float(item['price'])) list_extremum.append(item) elif len(list_extremum) > 2 and float( item['price']) > float( list_extremum[-2]['price']): # print('S_Del_B', float(item['price'])) old_buy = list_extremum[-1].copy() old_sell = list_extremum[-2].copy() list_extremum[-2] = item.copy() list_extremum = list_extremum[:-1] else: if old_buy and (float(item['price']) / float(old_buy['price']) - 1) * 100 >= profit_buy_to_sell: # print('S_Add_B', float(item['price'])) list_extremum[-1] = old_sell.copy() list_extremum.append(old_buy) list_extremum.append(item) old_buy, old_sell = [], [] elif float(list_extremum[-1]['price']) < float( item['price']): # print('S_ED', float(item['price'])) list_extremum[-1] = item.copy() else: if item['type'] == "buy": list_extremum.append(item) date = date.addDays(1) try: result = old_list_extremum[-1] == list_extremum[-1] except: result = False if not result: if not os.path.exists(SAVE_PATH_EXTREMUM): os.makedirs(SAVE_PATH_EXTREMUM) save_to_file( SAVE_PATH_EXTREMUM + '/' + pair + '_' + str(profit_buy_to_sell) + '_' + str(profit_sell_to_buy) + '.data', list_extremum) return {'change_data': not result, 'data': list_extremum}