示例#1
0
def convert(i, amount):
    n = i.get_account_id()
    n2 = i.getInputDevice().getClientID()
    stats = db.getData(n)
    try:
        amount = abs(int(amount))
    except:
        pass
    if amount >= 10000:
        bs.screenMessage('You wanna be hella rich or whut?')
        return
    if amount <= stats['s']:
        stats['s'] -= amount
        stats['p'] += int(amount / 10)
        bs.screenMessage(
            u'{} Score Points have been converted to {} \ue01f'.format(
                amount, int(amount / 10)))
        bs.screenMessage(u'New Score: {} | New \ue01f: {}'.format(
            stats['s'], stats['p']))
        db.saveData(n, stats)
    else:
        bs.screenMessage('Not Enough Score Points',
                         clients=[n2],
                         transient=True,
                         color=(1, 0.5, 0.5))
示例#2
0
def me(nick):
    if nick is None:
        return
    if isinstance(nick, bs.Player):
        n = nick.get_account_id()
    elif nick.startswith('pb'):
        n = nick
    else:
        return
    stats = db.getData(n)
    score = stats['s']
    rank = db.getRank(n)
    points = stats['p']
    message = bs.uni(stats['n'])
    message2 = u'\ue01f: ' + str(points)
    message3 = 'Total Score: ' + str(score)
    message4 = 'Rank: ' + str(rank)
    message5 = 'K: ' + str(stats['k'])
    message6 = 'D: ' + str(stats['d'])
    if n in joined:
        message7 = 'Time Spent: ' + str(
            datetime.timedelta(milliseconds=(bs.getRealTime() -
                                             joined[str(n)] +
                                             stats['tp']))).split('.', 2)[0]
    else:
        message7 = 'Time Spent: ' + \
            str(datetime.timedelta(milliseconds=(
                stats['tp']))).split('.', 2)[0]
    bs.screenMessage(u'  |  '.join(
        [message, message2, message3, message4, message5, message6, message7]))
    clear(2500)
示例#3
0
文件: backup.py 项目: 0th/stockhealth
    def get_NaverStock(self, code_stock):

        # 초기화
        for row in code_stock:
            code = row[0]
            DB_Manager.db_control().delDBtable(dir_naver_ks, 'kospi_' + code)
            print('1. 테이블 삭제: ', code)

        # 최초 데이터 가져오기
        for row in code_stock:

            df = pd.DataFrame()
            code = row[0]
            company = row[1]
            url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)

            for page in range(1, 38):
                pg_url = '{url}&page={page}'.format(url=url, page=page)
                df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
                # self.code_df = self.code_df.rename(columns={'회사명': 'name', '종목코드': 'code'})

            df = df.dropna()

            df.to_sql('kospi_' + code, con_naver_ks, chunksize=1000)
            print(df.head())

            self.count = self.count + 1;

            print('count: ',self.count)
            print('///////////////////////////')
示例#4
0
def join(accountid,clientID):
    if accountid is not None and clientID is not None:
        if db.isBanned(accountid):
            data = db.getBanData(accountid)
            bs.screenMessage(
                "You have been banned. Ban Expires on: {} IST".format(
                    data['till'].strftime('%Y/%m/%d %H:%M:%S')),
                color=(1, 0, 0),
                clients=[clientID],
                transient=True)
            bsInternal._disconnectClient(clientID)
            return
        joined.update({accountid: bs.getRealTime()})
        now_time = long(tim.strftime('%Y%m%d%H%M', tim.localtime(tim.time())))
        stats = db.getData(accountid)
        if stats['i'] == []:
            stats['i'] = {}
        for name, exp in stats['i'].items():
            if now_time > exp:
                bs.screenMessage(
                    '%s Expired' % name,
                    clients=[clientID],
                    transient=True)
                stats['i'].pop(name)
        db.saveData(accountid, stats)
        daily(accountid,clientID)
    queue.remove(accountid)
示例#5
0
    def addRealtimeStock(self, code_stock):

        location = 'addRealtimeStock'
        cnt = 0
        start = time.time()
        dropCompany = []
        dropCode = []
        table = '\'Stock_Realtime\''
        value = DB_Manager.db_control().checkDBtable(dir_naver_ks_Realtime,
                                                     table)
        temp_val = value[0]

        if (temp_val[0] == 0):
            column = '(\'종목\' TEXT PRIMARY KEY ,\'코드\' TEXT ,\'체결가\' INTEGER,\'체결시각\' TEXT)'
            DB_Manager.db_control().create(dir_naver_ks_Realtime, table,
                                           column)

        for row in code_stock:

            df = pd.DataFrame()
            cnt += 1
            code = row[0]
            company = row[1]
            now = datetime.datetime.now()
            nowDate = now.strftime('%Y%m%d%H%M%S')
            url = 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format(
                code=code, thistime=nowDate)
            pg_url = '{url}&page={page}'.format(url=url, page=1)

            try:
                df = df.append(pd.read_html(pg_url, header=0)[0],
                               ignore_index=True)
                df = df.dropna()
                data = df.ix[1]
                nowDay = now.strftime('%Y-%m-%d')
                Engagement_time = nowDay + ' ' + data[0]
                data_column = []
                data_column.append(company)
                data_column.append(code)
                data_column.append(data[1])
                data_column.append(Engagement_time)

                table = 'Stock_Realtime'
                column = '(\'종목\',\'코드\',\'체결가\',\'체결시각\') values (?,?,?,?)'
                length = 1
                DB_Manager.db_control().insertOrReplaceDB(
                    dir_naver_ks_Realtime, table, column, length, data_column)
                LogPrint(curr_date(), '#2.AddRealtime:', cnt, company, code,
                         data[1], 'DB 저장완료')

            except Exception as e:
                print('#2, AddRealtime: ', cnt, company, code, '/ 데이터가 없습니다.')
                dropCompany.append(company)
                dropCode.append(code)

        self.timeCheck(start, location)
示例#6
0
def main():

    print 'Start Init DB object'
    db = None
    db = DB_Manager.openDB(db, 'Home.db')
    print 'Start Init COM object'
    objCOM = ClassCOM()
    objCOM.ComOpen()
    objCOM.run(db)
    db = DB_Manager.closeDB(db)
示例#7
0
def receive_pseudo_code():
    try:
        pseudocode = request.form['pcode']
        lines = pseudocode.split('\n')
        DB_Manager.insert_pseudocode_into_db(lines)
        # print(lines)
        # detect_intent_texts(PROJECT_ID, SESSION_ID, lines, 'en-US')

        # return render_template('result1.html')
        return render_template('result1.html', statements=lines)
    except:
        return render_template('input_form1.html')
示例#8
0
def receive_pseudo_code():
    try:
        pseudocode = request.form['pcode']
        lines_raw = pseudocode.split('\n')
        lines = []
        for l in lines_raw:
            if l is not '' and l is not '\r':
                lines.append(l)
        DB_Manager.insert_pseudocode_into_db(lines)
        return render_template('result1.html', statements=lines)
    except:
        return render_template('input_form1.html')
示例#9
0
def daily(n,n2):
    if n is None:
        return
    date = int(datetime.datetime.now().strftime('%d'))
    stats = db.getData(n)
    if stats.get('ed', 0) != date:
        stats['p'] += 50
        stats['ed'] = date
        bs.screenMessage(u"You Got 50 \ue01f Daily Bonus",
                         clients=[n2],
                         transient=True)
        db.saveData(n, stats)
    return
示例#10
0
def generate_intermediate_code():
    lines = DB_Manager.get_pseudocode_from_db()[0]
    # full_pc = ""
    full_pc = line_manipulator(lines, data_set_name)
    # for line in lines:
    #     pc = detect_intent_texts(PROJECT_ID, SESSION_ID, line, 'en-US')
    #     full_pc = full_pc + '\n' + pc

    print(full_pc[0])
    f = open("ipc.txt", "w+")
    f.write(full_pc[0])
    DB_Manager.delete_all_documents("pseudocodes_temp")
    DB_Manager.insert_standard_pc_into_db(full_pc[1])
    return render_template('result1.html', statements=full_pc[1])
示例#11
0
def generate_intermediate_code():
    lines = DB_Manager.get_pseudocode_from_db()[0]
    full_pc = ""
    for line in lines:
        pc = detect_intent_texts(PROJECT_ID, SESSION_ID, [line], 'en-US')
        full_pc = full_pc + '\n' + pc

    print(full_pc)
    # f = open(os.path.join(app.config['DOWNLOAD_FOLDER']) + '/ipc.txt', "w+")
    f = open("ipc.txt", "w+")
    f.write(full_pc)
    DB_Manager.delete_all_documents("pseudocodes_temp")
    # path = "ipc.txt"
    # return send_file(path, as_attachment=True)
    return render_template('result1.html', statements=lines)
示例#12
0
def take(p, nick, amount, reason):
    try:
        amount = abs(int(amount))
    except:
        return
    if not p.get_account_id() in [some.ownerid,some.admin_id]: bs.screenMessage('You are not the host'); return
    taker_player = getPlayerFromNick(nick)
    taker = taker_player.get_account_id()
    t = db.getData(taker)
    t['p'] -= amount
    db.saveData(taker, t)
    reason = reason if reason != '' else 'Penalty'
    bs.screenMessage(u'{} lost {}\ue01f | Reason: {}'.format(
        taker_player.getName(True), amount, reason),
                     transient=True,
                     color=(1, 0.5, 0.5))
示例#13
0
def loadAllCharacters(self):
    account_id = self._player.get_account_id()
    if account_id is None:
        return
    items = db.getData(account_id)['i']
    if items is not None:
        if isinstance(getattr(self, "characterNames", None), list):
            try:
                if 'unlock-chars' in items:
                    self.characterNames.append('Steve')
                    self.characterNames.append('Raphael')
                    # for name,profile in self.profiles.items():
                    #     character = profile.get("character","Spaz")
                    #     if (character not in self.characterNames
                    #             and character in bsSpaz.appearances):
                    #         self.characterNames.append(character)
                    for i, k in bsSpaz.appearances.items():
                        if k.style != 'spaz' and i not in self.characterNames:
                            self.characterNames.append(i)
                    bs.screenMessage(
                        'All Characters Unlocked',
                        color=(0, 1, 0),
                        clients=[self._player.getInputDevice().getClientID()],
                        transient=True)
                elif 'logicon' in items:
                    self.characterNames.append('Logicon')
                    bs.screenMessage(
                        'Logicon Unlocked',
                        color=(0, 1, 0),
                        clients=[self._player.getInputDevice().getClientID()],
                        transient=True)
            except:
                bs.printException()
示例#14
0
文件: backup.py 项目: 0th/stockhealth
    def upload_totalDB(self):

        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result,'STG1_180525')
        for row in rows:

            count = count + 1
            print('회사 카운트: ',count)

            dir = '/Stock/Evaluation/'+row[0]+'/'
            data = {'Name': row[0],
                    'Code': row[1],
                    'Volatility': row[2],
                    'Average': row[3],
                    'Eval1': row[4],
                    'Eval2': row[5],
                    'Eval3': row[6],
                    'StockReturn': row[7],
                    'Stability': row[8],
                    'Result': row[9],
                    'Total': row[10]
                    }

            FB_Manager.FirebaseManager().patch(dir,data)
            print(row[0])

        print("마무리")
示例#15
0
    def add_OnedayStock(self, code_stock):

        count = 0
        check = []

        for rows in code_stock:

            try:
                code = rows[0]
                df = pd.DataFrame()
                url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(
                    code=code)
                pg_url = '{url}&page={page}'.format(url=url, page=1)
                df = df.append(pd.read_html(pg_url, header=0)[0],
                               ignore_index=True)
                df = df.dropna()
                row = df.ix[0]

            except:
                count = count + 1
                check.append(code)
                pass

            else:
                data = []
                index_ks = self.now
                date_ks = row[0]
                close = str(row[1])
                netChange = str(row[2])
                open = str(row[3])
                high = str(row[4])
                low = str(row[5])
                volume = str(row[6])

                value = '?,?,?,?,?,?,?,?'
                data = [
                    index_ks, date_ks, close, netChange, open, high, low,
                    volume
                ]
                DB_Manager.db_control().replaceDBtable(dir_naver_ks,
                                                       'kospi_' + code, value,
                                                       data)
                print('4-1. 추가종목코드: ', code)

        print("4-2. 에러코드:", check)
        print('4-3. 에러총계 ', count)
def __ModifyBs_disconnectClient(clientID, Force=False, banTime=5 * 60):
    accountid = handle.getAccountIDFromClientID(clientID)
    if accountid is not None:
        if db.getAdmin(accountid):
            bs.screenMessage("Admin Detected. Aborting Kick...",
                             transient=True)
            print "%s is in Admin-List! Aborting Kick!" % accountid
            return
    __bsInternal_disconnectClient(clientID, banTime=banTime)
示例#17
0
def beg(i):
    n = i.get_account_id()
    n2 = i.getInputDevice().getClientID()
    stuff = db.getData(n)
    prob = random.random()
    if prob >= 0.2:
        c = random.randint(5, 25)
        stuff['p'] += c
        db.saveData(n, stuff)
        bsInternal._chatMessage(
            random.choice(celeb) + ' Gave ' + i.getName(full=True) + ' ' +
            str(c) + u" \ue01f!")
    else:
        bs.screenMessage(random.choice(celeb) + " flicked " +
                         i.getName(full=True) + ' off!',
                         color=(1, 0, 0),
                         transient=True)
    clear()
示例#18
0
    def run(self, db):

        out = ''
        print 'Start Listen COM...'
        try:
            while 1:
                if self.ser.isOpen():
                    try:
                        while self.ser.inWaiting() > 0:
                            out += self.ser.read(1)
                        if out != '':
                            self.COM_READ = 1
                            print 'COM RX: ' + out
                            #self.COM_BUFF_OUT=self.COM_BUFF_OUT+out
                            self.COM_BUFF_OUT = out
                            self.nrf(db, self.COM_BUFF_OUT)
                            out = ''

                    except Exception as e:
                        self.ser.close()
                        print "Error:", e
                        break

                    time.sleep(1)

                    try:
                        r = DB_Manager.select_last_TB_HTTP_REQ(db)
                        if r != '':
                            if not r[0] == self.LAST_REQ_ID:
                                if not self.LAST_REQ_ID == '':
                                    self.firs_time = 0

                                self.LAST_REQ_ID = r[0]
                                #print r[0],type(r[0]),r[2],type(r[2]),r[3],type(r[3])
                                self.COM_BUFF_IN = "[" + str(r[2]) + str(
                                    r[3]) + "]"
                                self.COM_BUFF_IN = self.COM_BUFF_IN.strip()
                                self.COM_BUFF_IN = self.COM_BUFF_IN.strip('\n')
                                self.COM_BUFF_IN = self.COM_BUFF_IN.strip('\r')
                                self.COM_BUFF_IN = self.COM_BUFF_IN.strip('\t')

                        if self.COM_BUFF_IN != '' and self.COM_READ == 1 and not self.firs_time == 1:
                            print 'COM TX: ' + self.COM_BUFF_IN
                            #self.ser.write(self.COM_BUFF_IN + '\r\n')
                            self.ser.write(self.COM_BUFF_IN)
                            self.COM_BUFF_IN = ''

                    except Exception as e:
                        self.ser.close()
                        print "Error:", e
                        break

        except Exception as e:
            print "Error:", e
示例#19
0
def give(p, nick, amount, reason):
    try:
        amount = abs(int(amount))
    except:
        return
    giver = p.get_account_id()
    taker_player = getPlayerFromNick(nick)
    if taker_player is None:
        return
    taker = taker_player.get_account_id()
    if taker == giver:
        bs.screenMessage(
            'Why would you try to give yourself tickets!\nStoopid Ass')
        return
    g = db.getData(giver)
    t = db.getData(taker)
    if not g['p'] >= amount:
        return
    g['p'] -= amount
    db.saveData(giver, g)
    t['p'] += amount
    db.saveData(taker, t)
    reason = reason if reason != '' else 'Gift :>'
    bs.screenMessage(u'Success | {} > {}\ue01f > {} | Reason: {}'.format(
        p.getName(True), amount, taker_player.getName(True), reason),
                     transient=True,
                     color=(0.5, 1, 0.5))
示例#20
0
def bet(i, amt):
    bs.screenMessage('Dangerous command, turned off for your safety.')
    return
    n = i.get_account_id()
    n2 = i.getInputDevice().getClientID()
    stats = db.getData(n)
    multiplier = 1.7 if 'multiplier' in stats['i'] else 1.3
    try:
        amt = abs(int(amt))
    except:
        if amt == 'all':
            amt = stats['p']
        elif amt == 'half':
            amt = stats['p'] // 2
        else:
            bs.screenMessage(
                'Hey Everyone! This doofus thinks "{}" is a number! Lol what a noob'
                .format(amt),
                color=(1, 0, 0))
            return
    if stats['p'] < amt:
        bs.screenMessage('You don\'t have enough money lol. RIP. :)',
                         color=(1, .2, .2))
    else:
        bet_num = random.random()
        if bet_num <= 0:  #(0.33 if 'luckycharm' in stats['i'] else 0.25):
            stats['p'] += int(amt * multiplier)
            bs.screenMessage(u'Yaay! You won {} \ue01f'.format(
                int(amt * multiplier)),
                             color=(.5, 1, .5))
        else:
            stats['p'] -= amt
            bs.screenMessage(
                u'Lol sucks to be you. You lost {} \ue01f'.format(amt),
                color=(1, .2, .2))
        db.saveData(n, stats)
示例#21
0
def inv(nick):
    n = nick.get_account_id()
    clid = nick.getInputDevice().getClientID()
    stats = db.getData(n)
    items = stats['i']
    import datetime
    msgs = []
    msgs.append('You currently have {} items'.format(len(items)))
    for i, e in items.items():
        expire = datetime.datetime.strptime(
            str(e), "%Y%m%d%H%M").strftime("%d-%m-%Y %H:%M:%S")
        msgs.append('Item: {} | Expires On: {}'.format(i.upper(), expire))
    bs.screenMessage('\n'.join(msgs),
                     transient=True,
                     clients=[clid],
                     color=(0.7, 0.7, 1))
示例#22
0
文件: backup.py 项目: 0th/stockhealth
    def upload_totalDB_JSON(self):


        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525')

        data_json = ''

        for row in rows:
            count = count + 1
            print('회사 카운트: ', count)


            data = '\''+ row[0] +'\'' + ': ' + '{'\
                   + '\'' + 'Name'+'\'' +':'+'\'' + row[0] +'\'' +','\
                   + '\'' + 'Code'+ '\'' +':'+ '\'' +str(row[1]) +'\'' +','\
                   + '\'' + 'Volatility'+'\'' + ':' + str(row[2]) +','\
                   + '\'' + 'Average' +'\'' + ':' + str(row[3]) + ','\
                   + '\'' + 'Eval1' + '\'' +':' + str(row[4]) + ','\
                   + '\'' + 'Eval2' + '\'' +':' + str(row[5]) + ','\
                   + '\'' + 'Eval3' + '\'' +':' + str(row[6]) + ','\
                   + '\'' + 'StockReturn' +'\'' + ':' + str(row[7]) + ','\
                   + '\'' + 'Stability' +'\'' + ':' + str(row[8]) + ','\
                   + '\'' + 'Result' +'\'' + ':' + str(row[9]) + ','\
                   + '\'' + 'Total' + '\'' + ':' + str(row[10]) + '}'+','


            data_json = data_json + data
            print(data_json)

        data_json = data_json[:-1]
        print('1. ',data_json)

        data = '{'+ data_json +'}'
        print('2. ',data)
        print('3. ',type(data))

        data_dic = eval(data)
        print('4. ',type(data_dic))

        dir = '/Stock/Evaluation/'

        FB_Manager.FirebaseManager().patch(dir, data_dic)
示例#23
0
文件: backup.py 项目: 0th/stockhealth
    def upload_RankDB(self):


        # 제이슨 파일로 만들어서 보냄

        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525')

        for row in rows:
            count = count + 1
            print('회사 카운트: ', count)

            dir = '/Stock/Rank/'
            data = {
                     row[0]+'('+row[1]+')': row[10]
                    }

            FB_Manager.FirebaseManager().patch(dir, data)
            print(row[0])

        print("마무리")
示例#24
0
文件: backup.py 项目: 0th/stockhealth
    def upload_RankDB_JSON(self):

        # 방법: 딕셔너리로 만들고 그 다음 dump를 통해서 json 문자열로 변경하면된다.
        # 제이슨 파일로 만들어서 보냄
        # json_val = json.dump(dict1)

        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525')

        data_json =''

        for row in rows:
            count = count + 1
            print('회사 카운트: ', count)

            data = '\''+row[0]+'('+str(row[1])+')'+'\''+':' + str(row[10]) + ', '
            data_json = data_json + data

            print(data_json)


        dir = '/Stock/Rank/'
        data_json = data_json[:-2]
        print(data_json)


        data = '{'+ data_json +'}'
        data_dic = eval(data)
        print('data_dic: ',data_dic)
        print(len(data_dic))

        # dic 파일로 해도 전달됨
        # data_json = json.dumps(data_dic, ensure_ascii=False)
        # print(data_json)
        # print(type(data_json))

        FB_Manager.FirebaseManager().patch(dir, data_dic)
示例#25
0
文件: backup.py 项目: 0th/stockhealth
    def addRealtimeStock(self,code_stock):

        cnt = 0
        start = time.time()
        dropCompany = []
        dropCode = []


        for row in code_stock:

            df = pd.DataFrame()
            cnt += 1

            code = row[0]
            company = row[1]
            print('01. 순서: ',cnt)
            print('02 회사: ',company)

            print('03 코드: ',code)


            # code = '000020'
            # company = 'youngsu'

            now = datetime.datetime.now()
            nowDate = now.strftime('%Y%m%d%H%M%S')
            url= 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format(code=code, thistime = nowDate)
            pg_url = '{url}&page={page}'.format(url=url, page=1)

            try:
                df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
                df = df.dropna()
                data = df.ix[1]

                nowDay = now.strftime('%Y-%m-%d')
                Engagement_time = nowDay + ' ' + data[0]

                # time = data[0]

                data_column = []
                data_column.append(company)
                data_column.append(code)
                data_column.append(data[1])
                data_column.append(Engagement_time)

                table = 'Stock_Realtime'
                column = "종목, 코드, 체결가, 체결시각"
                column = '(\'종목\',\'코드\',\'체결가\',\'체결시각\') values (?,?,?,?)'
                length = len(data_column)
                length = 1
                DB_Manager.db_control().insertOrReplaceDB(dir_naver_ks_Realtime, table, column, length, data_column)

                print('04. DB 저장 완료')
                print('--------------------------------------------')

            except Exception as e:
                print('데이터가 없습니다.', e)
                dropCompany.append(company)
                dropCode.append(code)

        done = time.time()
        elapsed = done - start
        print('05. 시간: ', elapsed)
        print('06. 사라진 회사 ', dropCompany)
        print('07. 사라진 회사 수', len(dropCompany))

        # 반올림해서 시간(초)을 구함
        print(int(round(float(elapsed))))
示例#26
0
文件: backup.py 项目: 0th/stockhealth
    def createRealtimeStock(self):

        column = '(\'종목\' TEXT PRIMARY KEY ,\'코드\' TEXT ,\'체결가\' INTEGER,\'체결시각\' TEXT)'
        table = 'Stock_Realtime'
        DB_Manager.db_control().create(dir_naver_ks_Realtime,table,column)
示例#27
0
文件: backup.py 项目: 0th/stockhealth
    def logic_Start(self,code_stock):

        count = 0

        for row in code_stock:

            print('row ',row)
            code = row[0]
            company = row[1]
            kospi_code = 'kospi_'+code
            column = "날짜, 종가"
            date_ks = "날짜"
            # limit = 50
            temp_list_price = DB_Manager.db_control().viewDBdata_Close(dir_naver_ks,column,kospi_code,date_ks,limit_day)
            list_price = []
            list_daydiff = []
            count = count + 1

            print('1. 회사: ',company)
            print('2. 코드: ',code)

            for value in temp_list_price:

                # value: ('2018-02-05 00:00:00', 7800.0)
                price = value[1]
                list_price.append(price)
                last = len(list_price)

            print("3.종가 리스트: ", list_price)


            for i in range(1, len(list_price)):

                today = i - 1
                yesterday = i
                day_diff = list_price[today]/list_price[yesterday]
                list_daydiff.append(day_diff)


            print("4.일변동: ", list_daydiff)

            list_result = AL_Manager.AlgorithmManager.start_logic(list_daydiff)
            # company_ks = company+'('+code+')'
            list_result.insert(0, company)
            list_result.insert(1, code)
            self.result_ks.append(list_result)

            print('5. 최종 데이터: ',self.result_ks)
            print(len(self.result_ks))
            print('6. 전체회사 ',count)

            # break


        # 1. DB 테이블 생성: 오늘 날짜
        default_column = '(종목 TEXT ,코드 TEXT ,변동성 INTEGER,평균 INTEGER,평가1 INTEGER,평가2 INTEGER,평가3 INTEGER,수익률_별점 INTEGER,안정성_별점 INTEGER,최종평가 INTEGER,종합점수 INTEGER)'
        str_date = self.now.strftime('%Y%m%d')
        str_date = str_date[2:8]
        table = 'STG1_' + str_date
        DB_Manager.db_control().create(dir_result, table, default_column)

        # 2. DB에 결과값 넣기
        column = '(\'종목\',\'코드\',\'변동성\',\'평균\',\'평가1\',\'평가2\',\'평가3\',\'수익률_별점\',\'안정성_별점\',\'최종평가\',\'종합점수\') values (?,?,?,?,?,?,?,?,?,?,?)'
        length = len(self.result_ks)
        # value = '?,?,?,?,?,?,?,?,?,?'

        # 0th
        DB_Manager.db_control().saveResult(dir_result,table,column,length,self.result_ks)
        print("결과DB 완성")

        return self.result_ks
示例#28
0
文件: backup.py 项目: 0th/stockhealth
class MainStock:

    list_ks = []
    list_kq = []
    # list_result_ks = []
    # list_result_ks_all = []

    result_ks = []
    result_kq = []
    # list_result_kq = []
    # list_result_kq_all = []

    pre_day = -100
    check_retry = 2
    check_replay = 0

    instance_DB = DB_Manager.db_control()

    now = datetime.datetime.now()
    end_date = now.strftime('%Y-%m-%d')
    pre = now + datetime.timedelta(days=pre_day)
    start_date = pre.strftime('%Y-%m-%d')
    data_source = 'yahoo'
    repalce_positions = '(Date, Open, High, Low, Close,`Adj Close`, Volume )'

    list_Com_ks = []
    list_Com_kq = []
    list_noneCom_ks = []
    list_noneCom_kq = []
    code_ks_re = []
    code_kq_re = []
    count = 0

    url_day = 'http://finance.naver.com/item/sise_day.nhn?code={code}'
    url_realtime = 'http://finance.naver.com/item/sise_time.nhn?code={code}&thistime={realtime}'



# /////////////////////////// START ///////////////////////////

    # 0. 시작
    def __init__(self):
        pass


    # 1. 코스피, 코스닥 종목 가져오기
    def get_stockCode(self,db, table):
        rows = DB_Manager.db_control().viewDBdata_stockCode(db,table)
        print(rows)
        return rows


    # 2. 네이버에서 데이터 가져오기: 최초 한번만 진행
    def get_NaverStock(self, code_stock):

        # 초기화
        for row in code_stock:
            code = row[0]
            DB_Manager.db_control().delDBtable(dir_naver_ks, 'kospi_' + code)
            print('1. 테이블 삭제: ', code)

        # 최초 데이터 가져오기
        for row in code_stock:

            df = pd.DataFrame()
            code = row[0]
            company = row[1]
            url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)

            for page in range(1, 38):
                pg_url = '{url}&page={page}'.format(url=url, page=page)
                df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
                # self.code_df = self.code_df.rename(columns={'회사명': 'name', '종목코드': 'code'})

            df = df.dropna()

            df.to_sql('kospi_' + code, con_naver_ks, chunksize=1000)
            print(df.head())

            self.count = self.count + 1;

            print('count: ',self.count)
            print('///////////////////////////')


    # 3. 전략진행 및 DB저장
    def logic_Start(self,code_stock):

        count = 0

        for row in code_stock:

            print('row ',row)
            code = row[0]
            company = row[1]
            kospi_code = 'kospi_'+code
            column = "날짜, 종가"
            date_ks = "날짜"
            # limit = 50
            temp_list_price = DB_Manager.db_control().viewDBdata_Close(dir_naver_ks,column,kospi_code,date_ks,limit_day)
            list_price = []
            list_daydiff = []
            count = count + 1

            print('1. 회사: ',company)
            print('2. 코드: ',code)

            for value in temp_list_price:

                # value: ('2018-02-05 00:00:00', 7800.0)
                price = value[1]
                list_price.append(price)
                last = len(list_price)

            print("3.종가 리스트: ", list_price)


            for i in range(1, len(list_price)):

                today = i - 1
                yesterday = i
                day_diff = list_price[today]/list_price[yesterday]
                list_daydiff.append(day_diff)


            print("4.일변동: ", list_daydiff)

            list_result = AL_Manager.AlgorithmManager.start_logic(list_daydiff)
            # company_ks = company+'('+code+')'
            list_result.insert(0, company)
            list_result.insert(1, code)
            self.result_ks.append(list_result)

            print('5. 최종 데이터: ',self.result_ks)
            print(len(self.result_ks))
            print('6. 전체회사 ',count)

            # break


        # 1. DB 테이블 생성: 오늘 날짜
        default_column = '(종목 TEXT ,코드 TEXT ,변동성 INTEGER,평균 INTEGER,평가1 INTEGER,평가2 INTEGER,평가3 INTEGER,수익률_별점 INTEGER,안정성_별점 INTEGER,최종평가 INTEGER,종합점수 INTEGER)'
        str_date = self.now.strftime('%Y%m%d')
        str_date = str_date[2:8]
        table = 'STG1_' + str_date
        DB_Manager.db_control().create(dir_result, table, default_column)

        # 2. DB에 결과값 넣기
        column = '(\'종목\',\'코드\',\'변동성\',\'평균\',\'평가1\',\'평가2\',\'평가3\',\'수익률_별점\',\'안정성_별점\',\'최종평가\',\'종합점수\') values (?,?,?,?,?,?,?,?,?,?,?)'
        length = len(self.result_ks)
        # value = '?,?,?,?,?,?,?,?,?,?'

        # 0th
        DB_Manager.db_control().saveResult(dir_result,table,column,length,self.result_ks)
        print("결과DB 완성")

        return self.result_ks






    #   1. 기존 데이터의 최근 날짜를 가져온다.
    #   2. 현재 날짜를 가져온다.
    #   3. 날짜를 비교해서 가져와야 하는 페이지를 계산
    #   4. 부족한 데이터만 가져오기


    # 3. 일별시세 데이터 추가: 하루에 한번 실행
    def addDayStock(self,code_stock):

        # 1. 기존 sqlite DB에 있는 샘플 코드 날짜 2개를 추출 : kospi_000020, kospi_900140
        # 2. 날짜를 비교해서 가장 업데이트 안된 날짜를 기준으로 네이버 최신 데이터와 비교

        column = '날짜'
        table1 = 'kospi_000020'
        table2 = 'kospi_900140'
        limit = 3
        code = '000020'



        check_day1 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table1, column, limit)
        check_day2 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table2, column, limit)

        day1 = check_day1[0]
        day2 = check_day2[0]

        d1 = datetime.datetime.strptime(day1[0], "%Y.%m.%d").date()
        d2 = datetime.datetime.strptime(day2[0], "%Y.%m.%d").date()
        print('d1: ', d1)
        print('d2: ', d2)

        delta = d1 - d2
        check_delta = delta.days

        diff_day = d1

        if check_delta == 0 :
            diff_day = d1

        elif check_delta > 0:
            diff_day = d2

        elif check_delta < 0:
            diff_day = d1


        # 1. sqlite DB에 있는 데이터 가져와서 마지막 날짜를 네이버 날짜랑 비교

        df = pd.DataFrame()
        url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)
        pg_url = '{url}&page={page}'.format(url=url, page=1)
        df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
        data = df.ix[1]
        print('data: ', data)



        print(type(data))
        temp = '날짜'
        print(data[0])
        day3 = data[0]
        print('day3: ',day3)
        d3 = datetime.datetime.strptime(day3, "%Y.%m.%d").date()
        print('d3: ',d3)
        delta = d3 - diff_day
        check_delta = delta.days
        print('check_delta: ',check_delta)
        cnt_page = check_delta//10

        print('cnt_page: ',cnt_page)

        cnt = 0

        for row in code_stock:

            cnt = cnt + 1
            df = pd.DataFrame()
            code = row[0]
            company = row[1]
            url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)

            print('------------------------------------------------------------')
            print('1. 순번: ', cnt)
            print('2. 코드: ', code)
            print('3. 회사: ', company)

            for page in range(1, cnt_page):
                pg_url = '{url}&page={page}'.format(url=url, page=page)
                df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)

            df = df.dropna()
            df.to_sql('kospi_' + code, con_naver_ks, if_exists='replace')
            print('4. 일별 데이터: ', df)

    # print("start_time", start_time)  # 출력해보면, 시간형식이 사람이 읽기 힘든 일련번호형식입니다.
    # print("--- %s seconds ---" % (time.time() - start_time))

    # 1. 처음 데이터베이스 > 테이블 만들자
    # 2. 신규 데이터 삽입
    # 3. 데이터 업데이트


    def createRealtimeStock(self):

        column = '(\'종목\' TEXT PRIMARY KEY ,\'코드\' TEXT ,\'체결가\' INTEGER,\'체결시각\' TEXT)'
        table = 'Stock_Realtime'
        DB_Manager.db_control().create(dir_naver_ks_Realtime,table,column)




    def addRealtimeStock(self,code_stock):

        cnt = 0
        start = time.time()
        dropCompany = []
        dropCode = []


        for row in code_stock:

            df = pd.DataFrame()
            cnt += 1

            code = row[0]
            company = row[1]
            print('01. 순서: ',cnt)
            print('02 회사: ',company)

            print('03 코드: ',code)


            # code = '000020'
            # company = 'youngsu'

            now = datetime.datetime.now()
            nowDate = now.strftime('%Y%m%d%H%M%S')
            url= 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format(code=code, thistime = nowDate)
            pg_url = '{url}&page={page}'.format(url=url, page=1)

            try:
                df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
                df = df.dropna()
                data = df.ix[1]

                nowDay = now.strftime('%Y-%m-%d')
                Engagement_time = nowDay + ' ' + data[0]

                # time = data[0]

                data_column = []
                data_column.append(company)
                data_column.append(code)
                data_column.append(data[1])
                data_column.append(Engagement_time)

                table = 'Stock_Realtime'
                column = "종목, 코드, 체결가, 체결시각"
                column = '(\'종목\',\'코드\',\'체결가\',\'체결시각\') values (?,?,?,?)'
                length = len(data_column)
                length = 1
                DB_Manager.db_control().insertOrReplaceDB(dir_naver_ks_Realtime, table, column, length, data_column)

                print('04. DB 저장 완료')
                print('--------------------------------------------')

            except Exception as e:
                print('데이터가 없습니다.', e)
                dropCompany.append(company)
                dropCode.append(code)

        done = time.time()
        elapsed = done - start
        print('05. 시간: ', elapsed)
        print('06. 사라진 회사 ', dropCompany)
        print('07. 사라진 회사 수', len(dropCompany))

        # 반올림해서 시간(초)을 구함
        print(int(round(float(elapsed))))









    # 5. 파이어베이스에 데이터 업로드
    def upload_totalDB(self):

        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result,'STG1_180525')
        for row in rows:

            count = count + 1
            print('회사 카운트: ',count)

            dir = '/Stock/Evaluation/'+row[0]+'/'
            data = {'Name': row[0],
                    'Code': row[1],
                    'Volatility': row[2],
                    'Average': row[3],
                    'Eval1': row[4],
                    'Eval2': row[5],
                    'Eval3': row[6],
                    'StockReturn': row[7],
                    'Stability': row[8],
                    'Result': row[9],
                    'Total': row[10]
                    }

            FB_Manager.FirebaseManager().patch(dir,data)
            print(row[0])

        print("마무리")

    def upload_RankDB(self):


        # 제이슨 파일로 만들어서 보냄

        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525')

        for row in rows:
            count = count + 1
            print('회사 카운트: ', count)

            dir = '/Stock/Rank/'
            data = {
                     row[0]+'('+row[1]+')': row[10]
                    }

            FB_Manager.FirebaseManager().patch(dir, data)
            print(row[0])

        print("마무리")

    def upload_RankDB_JSON(self):

        # 방법: 딕셔너리로 만들고 그 다음 dump를 통해서 json 문자열로 변경하면된다.
        # 제이슨 파일로 만들어서 보냄
        # json_val = json.dump(dict1)

        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525')

        data_json =''

        for row in rows:
            count = count + 1
            print('회사 카운트: ', count)

            data = '\''+row[0]+'('+str(row[1])+')'+'\''+':' + str(row[10]) + ', '
            data_json = data_json + data

            print(data_json)


        dir = '/Stock/Rank/'
        data_json = data_json[:-2]
        print(data_json)


        data = '{'+ data_json +'}'
        data_dic = eval(data)
        print('data_dic: ',data_dic)
        print(len(data_dic))

        # dic 파일로 해도 전달됨
        # data_json = json.dumps(data_dic, ensure_ascii=False)
        # print(data_json)
        # print(type(data_json))

        FB_Manager.FirebaseManager().patch(dir, data_dic)

    def upload_totalDB_JSON(self):


        count = 0

        rows = DB_Manager.db_control().viewDBdata_all(dir_result, 'STG1_180525')

        data_json = ''

        for row in rows:
            count = count + 1
            print('회사 카운트: ', count)


            data = '\''+ row[0] +'\'' + ': ' + '{'\
                   + '\'' + 'Name'+'\'' +':'+'\'' + row[0] +'\'' +','\
                   + '\'' + 'Code'+ '\'' +':'+ '\'' +str(row[1]) +'\'' +','\
                   + '\'' + 'Volatility'+'\'' + ':' + str(row[2]) +','\
                   + '\'' + 'Average' +'\'' + ':' + str(row[3]) + ','\
                   + '\'' + 'Eval1' + '\'' +':' + str(row[4]) + ','\
                   + '\'' + 'Eval2' + '\'' +':' + str(row[5]) + ','\
                   + '\'' + 'Eval3' + '\'' +':' + str(row[6]) + ','\
                   + '\'' + 'StockReturn' +'\'' + ':' + str(row[7]) + ','\
                   + '\'' + 'Stability' +'\'' + ':' + str(row[8]) + ','\
                   + '\'' + 'Result' +'\'' + ':' + str(row[9]) + ','\
                   + '\'' + 'Total' + '\'' + ':' + str(row[10]) + '}'+','


            data_json = data_json + data
            print(data_json)

        data_json = data_json[:-1]
        print('1. ',data_json)

        data = '{'+ data_json +'}'
        print('2. ',data)
        print('3. ',type(data))

        data_dic = eval(data)
        print('4. ',type(data_dic))

        dir = '/Stock/Evaluation/'

        FB_Manager.FirebaseManager().patch(dir, data_dic)
示例#29
0
dir_result = './RESULT.db'


pre_day = -100
check_retry = 2
check_replay = 0

table_kospi = 'KOSPI'
table_kosdaq = 'KOSDAQ'
con_yahoo_ks = sqlite3.connect("./yahoo_stock_ks.db")
con_yahoo_kq = sqlite3.connect("./yahoo_stock_kq.db")
con_kospi = sqlite3.connect("./kospi_db.db")
con_kosdaq = sqlite3.connect("./kosdaq_db.db")

# cur_ks = con_kospi.cursor()
instance_DB = DB_Manager.db_control()


now = datetime.datetime.now()
end_date = now.strftime('%Y-%m-%d')
pre = now + datetime.timedelta(days = pre_day)
start_date = pre.strftime('%Y-%m-%d')
data_source = 'yahoo'
repalce_positions ='(Date, Open, High, Low, Close,`Adj Close`, Volume )'



list_Com_ks = []
list_Com_kq = []
list_noneCom_ks = []
list_noneCom_kq = []
示例#30
0
文件: backup.py 项目: 0th/stockhealth
    def addDayStock(self,code_stock):

        # 1. 기존 sqlite DB에 있는 샘플 코드 날짜 2개를 추출 : kospi_000020, kospi_900140
        # 2. 날짜를 비교해서 가장 업데이트 안된 날짜를 기준으로 네이버 최신 데이터와 비교

        column = '날짜'
        table1 = 'kospi_000020'
        table2 = 'kospi_900140'
        limit = 3
        code = '000020'



        check_day1 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table1, column, limit)
        check_day2 = DB_Manager.db_control().viewDBdata_Day(dir_naver_ks, column, table2, column, limit)

        day1 = check_day1[0]
        day2 = check_day2[0]

        d1 = datetime.datetime.strptime(day1[0], "%Y.%m.%d").date()
        d2 = datetime.datetime.strptime(day2[0], "%Y.%m.%d").date()
        print('d1: ', d1)
        print('d2: ', d2)

        delta = d1 - d2
        check_delta = delta.days

        diff_day = d1

        if check_delta == 0 :
            diff_day = d1

        elif check_delta > 0:
            diff_day = d2

        elif check_delta < 0:
            diff_day = d1


        # 1. sqlite DB에 있는 데이터 가져와서 마지막 날짜를 네이버 날짜랑 비교

        df = pd.DataFrame()
        url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)
        pg_url = '{url}&page={page}'.format(url=url, page=1)
        df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
        data = df.ix[1]
        print('data: ', data)



        print(type(data))
        temp = '날짜'
        print(data[0])
        day3 = data[0]
        print('day3: ',day3)
        d3 = datetime.datetime.strptime(day3, "%Y.%m.%d").date()
        print('d3: ',d3)
        delta = d3 - diff_day
        check_delta = delta.days
        print('check_delta: ',check_delta)
        cnt_page = check_delta//10

        print('cnt_page: ',cnt_page)

        cnt = 0

        for row in code_stock:

            cnt = cnt + 1
            df = pd.DataFrame()
            code = row[0]
            company = row[1]
            url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)

            print('------------------------------------------------------------')
            print('1. 순번: ', cnt)
            print('2. 코드: ', code)
            print('3. 회사: ', company)

            for page in range(1, cnt_page):
                pg_url = '{url}&page={page}'.format(url=url, page=page)
                df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)

            df = df.dropna()
            df.to_sql('kospi_' + code, con_naver_ks, if_exists='replace')
            print('4. 일별 데이터: ', df)