コード例 #1
0
def start_tk_crawl():
    global dm
    dm = DBManager("history_k_data")

    # 初始化baostock
    bs.login()
    # 获取股票代码列表
    code_list = dm.get_code_list()
    for item in code_list:
        max_try = 8  # 失败重连次数
        ticker = item["ticker"]
        print("开始加载股票数据:" + str(ticker))
        for tries in range(max_try):
            rs = bs.query_history_k_data_plus(
                ticker,
                "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
                start_date='2008-01-01',
                end_date='2019-05-31',
                frequency="d",
                adjustflag="3")
            if rs.error_code == '0':
                parse_pager(rs, ticker)  # 解析数据
                break
            elif tries < (max_try - 1):
                sleep(2)
                continue
            else:
                print("加载股票数据失败:" + str(ticker))
    print("加载股票数据完成")
    bs.logout()
コード例 #2
0
def start_tk_crawl():
    global dm, log
    log = Logger()
    dm = DBManager("em_tk_database")

    log.logger.info("开始更新股票数据")
    bs.login()
    code_list = dm.get_code_list()
    for item in code_list:
        ticker = item["ticker"]
        max_try = 8
        for tries in range(max_try):
            rs = bs.query_history_k_data(
                ticker,
                "date,code,open,high,low,close,volume,amount,adjustflag,turn,"
                "pctChg",
                frequency="w",
                adjustflag="3")
            if rs.error_code == '0':
                parse_pager(rs, ticker)
                break
            elif tries < (max_try - 1):
                sleep(2)
                continue
            else:
                log.logger.error("更新股票数据失败:" + str(ticker))
    log.logger.info("结束更新股票数据")
    bs.logout()
コード例 #3
0
def start_pe_crawl():
    global dm, log
    log = Logger()
    dm = DBManager("em_pe_database")

    log.logger.info("开始更新指数数据")
    bs.login()
    code_list = dm.get_code_list()
    for item in code_list:
        ticker = item["ticker"]
        max_try = 8
        for tries in range(max_try):
            rs = bs.query_history_k_data(
                ticker,
                "date,code,close,peTTM,pbMRQ,psTTM,pcfNcfTTM",
                frequency="d",
                adjustflag="2")
            if rs.error_code == "0":
                parse_pager(rs, ticker)
                break
            elif tries < (max_try - 1):
                sleep(2)
                continue
            else:
                log.logger.error("更新股票指数数据:" + str(ticker))
    log.logger.info("结束更新指数数据")
    bs.logout()
コード例 #4
0
def fun_analysis(cur_time=datetime.datetime.now()):
    log = Logger()
    log.logger.info("开始分析数据")

    # 数据获取
    dm_tk = DBManager("em_tk_database")
    dm_pe = DBManager("em_pe_database")
    code_list = [x for x in dm_tk.get_code_list()]

    result_list = list()
    # 数据遍历
    for item in code_list:
        tk_item = dm_tk.find_one_by_key({"ticker": item["ticker"]})
        pe_item = dm_pe.find_one_by_key({"ticker": item["ticker"]})

        tk_data_list = tk_item["data_list"]
        pe_data_list = pe_item["data_list"]

        # 数据计算
        close_list = [
            float(x["close"]) for x in tk_data_list if x["close"] != ""
        ]
        volume_list = [
            float(x["volume"]) for x in tk_data_list if x["close"] != ""
        ]
        wmacd_list, diff_list, dea_list = get_w_macd(close_list)

        # 处理核心逻辑
        if wmacd_list[-1] > 0 >= wmacd_list[-2]:
            if np.mean(volume_list[-5:-1]
                       ) < volume_list[-1] and diff_list[-1] >= 0:
                result_list.append({
                    "ticker": item["ticker"],
                    "diff": round(diff_list[-1], 4),
                    "pe": float(pe_data_list[-1]["peTTM"])
                })

    print(result_list)
    log.logger.info("结束分析数据:" + json.dumps(result_list))

    # 生成分析报告
    creat_report(result_list)
コード例 #5
0
history_capital = list()


# 时间列表
def date_range(start, end, step=1, format="%Y-%m-%d"):
    strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime
    days = (strptime(end, format) - strptime(start, format)).days + 1
    return [
        strftime(strptime(start, format) + datetime.timedelta(i), format)
        for i in range(0, days, step)
    ]


if __name__ == "__main__":
    log = Logger()
    dm_tk = DBManager("em_tk_database")
    dm_pe = DBManager("em_pe_database")

    date_list_table = [
        date_range("2016-01-01", "2016-12-31"),
        date_range("2017-01-01", "2017-12-31"),
        date_range("2018-01-01", "2018-12-31")
    ]
    code_list = [x for x in dm_tk.get_code_list()]

    for date_list in date_list_table:
        capital_base = 1000000
        history_capital = list()
        for index in range(len(date_list)):
            cur_date = date_list[index]
            if datetime.datetime.strptime(cur_date, "%Y-%m-%d").weekday() == 4: