Beispiel #1
0
def readFundData():
    funds = []
    sum = 0
    print("readFundData begin: " + time.strftime("%H:%M:%S"))
    with open(FUND_DATA_FILE) as file:
        while True:
            line = file.readline()
            if not line:
                log_write(FUND_DATA_FILE + "not data")
                break
            sum += 1
            # if sum > 100:
            #     break
            f = Fund('')
            date = ''
            val = 0.0
            for i, v in enumerate(line.split()):
                if i == 0:
                    f.setCode(v)
                elif i == 1:
                    f.setName(v)
                else:
                    if i % 2 == 0:
                        date = v
                    else:
                        val = float(v)
                        f.addValue(date, val)
            funds.append(f)
    print("readFundData end: " + time.strftime("%H:%M:%S"))
    return funds
Beispiel #2
0
def main():
    log_write("start------------------------->")
    print(time.strftime("%H:%M:%S") + ":start...")

    #基金推荐
    # history_datas = data_base.readHistoryDatas()
    # tmp = data_base.getCurrentData()
    # data_base.saveCurrentData(tmp)
    # cur_datas = data_base.readCurrentData()
    # funds = analysis.deleteErrData(history_datas, cur_datas, "2017-09-01")
    # analysis.fundRecommand(funds, 0.5)

    # 基金提醒
    # time_thresh = datetime.datetime.strptime("22:00:00", "%H:%M:%S")
    # while True:
    #     cur_time = datetime.datetime.strptime(time.strftime("%H:%M:%S"), "%H:%M:%S")
    #     if cur_time > time_thresh:
    #         cur_datas = data_base.getCurrentData()
    #         # cur_datas = data_base.readCurrentData()
    #         data_base.saveCurrentData(cur_datas)
    #         usr_datas = data_base.readUsrData()
    #         err, loss, sale = analysis.fundRemind(cur_datas, usr_datas)
    #         content = analysis.formatText(err, loss, sale)
    #         print(content)
    #         sendEmail(content)
    #         break
    #     else:
    #         time.sleep(60)
    #         pass

    mysql_operate.insertCurrentData()
    mysql_operate.insertHistoryWorth()

    log_write("---------------------------->end")
    print(time.strftime("%H:%M:%S") + ":finish")
Beispiel #3
0
def insertHistoryWorth():
    connection = pymysql.connect(host='127.0.0.1',
                                 port=3306,
                                 user='******',
                                 password='',
                                 db='fund_db',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    cursor = connection.cursor()

    #查询总共有多少只基金
    sql = "SELECT code FROM funds"
    cursor.execute(sql)
    codes = cursor.fetchall()
    print(time.strftime("%H:%M:%S") + ': ' + "start insert history data")
    number = 0
    for c in codes:
        code = c['code']
        number += 1
        if number < 564:
            continue
        datas = data_base.getHistoryData(code)
        if len(datas) == 0:
            log_write('error code: ' + code)
        else:
            for j in range(len(datas)):
                day = datas[j][0]  #日期
                worth = float(datas[j][1])  #单位净值
                total_worth = float(datas[j][2])  #累计净值
                # 查询判断是否有存在
                sql = "SELECT id FROM funds_info WHERE code='{}' AND day='{}'".format(
                    code, day)
                cursor.execute(sql)
                # 插入数据
                r = cursor.fetchone()
                if r:
                    pass
                else:
                    # 创建sql 语句,并执行
                    sql = "INSERT IGNORE INTO `funds_info` ( `code`, `day`, `worth`, `total_worth`, `create_time`) VALUES ('{}','{}', {}, {}, '{}')".format(
                        code, day, worth, total_worth,
                        time.strftime("%Y-%m-%d %H:%M:%S"))
                    cursor.execute(sql)
                    # 提交SQL
                    connection.commit()
        print(
            time.strftime("%H:%M:%S") + ': ' + code + " number = " +
            str(number))

    # 关闭数据连接
    connection.close()
Beispiel #4
0
def saveHistoryDatas(cur_datas):
    for i in range(2495, len(cur_datas)):
        code = cur_datas[i][1]
        datas = getHistoryData(code)
        if len(datas) == 0:
            log_write('error code: ' + code)
        else:
            f = open(DATA_PATH + str(i + 1) + ".txt", 'a')
            for j in range(len(datas)):
                f.write(code + ' ')  #基金代码
                f.write(datas[j][0] + ' ')  #日期
                f.write(datas[j][1] + ' ')  #单位净值
                f.write(datas[j][2] + '\n')  #累计净值
            f.close()
        print(time.strftime("%H:%M:%S") + ': ' + str(i + 1))
        time.sleep(0.1)
Beispiel #5
0
def readUsrData():
    k = 0
    datas = []
    with open(USR_PURCHASE_FILE) as file:
        while True:
            line = file.readline()
            if not line:
                log_write(USR_PURCHASE_FILE + " not data")
                break
            k += 1
            #["基金代码", "基金名称", "买入日期", "买入净值", "预设跌幅", "预设涨幅"]
            data = [' '] * 6
            for i, v in enumerate(line.split()):
                data[i] = v
            if k > 1:
                datas.append(data)
    return datas
Beispiel #6
0
def fundRemind(cur_datas, usr_datas):
    # values = usr_datas.deepcopy()
    values = usr_datas.copy()
    for i in range(len(usr_datas)):
        code = usr_datas[i][0]
        flag = False
        for j in range(len(cur_datas)):
            if code == cur_datas[j][1]:
                values[i].append(cur_datas[j][3])
                flag = True
                break
        if not flag:
            values[i].append("--")
            log_write(code + "can't find!")
    #数据分析
    error = [] #出现错误
    loss = [] #损失
    sale = [] #可卖出
    for i in range(len(values)):
        if values[i][6] == "--":
            values[i].append("--")
            error.append(values[i])
            continue
        cur_value = float(values[i][6])
        pre_value = float(values[i][3])
        ratio = (cur_value - pre_value)/pre_value
        loss_ratio = float(values[i][4])
        sale_ratio = float(values[i][5])
        if ratio < loss_ratio:
            values[i].append(str(ratio))
            loss.append(values[i])
        if ratio > sale_ratio:
            values[i].append(str(ratio))
            sale.append(values[i])
    # ["基金代码", "基金名称", "买入日期", "买入净值", "预设跌幅", "预设涨幅", "当前涨跌幅度"]
    return error, loss, sale
Beispiel #7
0
def getHistoryData(code):
    datas = []
    url = "http://info.chinafund.cn/fund/" + code + "/jjjz/"

    # r = requests.get(url)
    # #如果网址重定向
    # if r.url != url or r.status_code != 200:
    #     log_write("open " + url + " fail, status_code = " + str(r.status_code))
    #     print(r.status_code)
    #     return datas
    # if r.encoding == 'ISO-8859-1':
    #     encodings = requests.utils.get_encodings_from_content(r.text)
    #     if encodings:
    #         encoding = encodings[0]
    #     else:
    #         encoding = r.apparent_encoding
    #     html_doc = r.content.decode(encoding, 'replace')

    #网站交互
    # browser = webdriver.Chrome(abspath)
    browser = webdriver.Chrome(abspath, chrome_options=chrome_options)
    browser.implicitly_wait(30)
    try:
        browser.get(url)
    except TimeoutException:
        print(code + ": Time out")
        log_write(code + ": Time out")
        return datas
    error = False
    if browser.current_url != url:
        error = True
        print(url + "url redirection")
    else:
        try:
            date = browser.find_element_by_id("startdate")
            date.clear()
            date.send_keys("2017-01-01")
            browser.find_element_by_id("Button1").click()
            html_doc = browser.page_source
        except NoSuchElementException:
            error = True
            print("No element")
            log_write(code + ": No element")
    browser.quit()
    if error:
        return datas

    soup = BeautifulSoup(html_doc, 'lxml')
    trs = soup.find_all(id='lsjz')
    if len(trs) == 0:
        return datas
    else:
        tr = trs[0].find_all('tr')
        for i in range(1, len(tr)):
            tds = tr[i].find_all('td')
            data = [''] * 3  # 初始化data
            data[0] = tds[0].get_text()  #日期
            data[1] = tds[1].get_text()  #单位净值
            data[2] = tds[2].get_text()  #累计净值
            datas.append(data)
        # for i in range(len(tr)-1):
        #     print(datas[i])
        return datas