Ejemplo n.º 1
0
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)))
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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}