Beispiel #1
0
def update_current_year():
    """
    """
    common.run_with_args(stat_pro_basics)
    common.run_with_args(stat_fina_indicator_current)
    common.run_with_args(stat_balancesheet_current)
    common.run_with_args(stat_income_current)
    common.run_with_args(stat_dividend_current)
Beispiel #2
0
def update_last_10_years():
    # tmp_datetime = common.run_with_args(stat_stock_basics)
    # tmp_datetime = common.run_with_args(stat_stock_profit)
    # tmp_datetime = common.run_with_args(stat_stock_report)
    common.run_with_args(stat_pro_basics)
    common.run_with_args(stat_fina_indicator)
    common.run_with_args(stat_balancesheet)
    common.run_with_args(stat_income)
    common.run_with_args(stat_dividend)
    stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。

    # print(stock.head(10))
    arr = pd.Series(stock["close"].values)
    # print(df_arr)
    wave_mean = arr.mean()
    max_point = 3  # 获得最高的几个采样点。
    # 计算股票的波峰值。
    wave_crest = heapq.nlargest(max_point, enumerate(arr), key=lambda x: x[1])
    wave_crest_mean = pd.DataFrame(wave_crest).mean()

    # 输出元祖第一个元素是index,第二元素是比较的数值 计算数据的波谷值
    wave_base = heapq.nsmallest(max_point, enumerate(arr), key=lambda x: x[1])
    wave_base_mean = pd.DataFrame(wave_base).mean()
    # 输出数据
    print("##############", len(stock))
    if len(stock) > 180:
        #     code      date wave_base wave_crest wave_mean 顺序必须一致。返回的是行数据,然后填充。
        return list(
            [code, date, wave_base_mean[1], wave_crest_mean[1], wave_mean])
    else:
        return list([code, date, 0, 0, 0])


# main函数入口
if __name__ == '__main__':
    # 二次筛选数据。
    tmp_datetime = common.run_with_args(stat_all_lite)
    merge_sell_data = stock_sell_merge.apply(apply_merge_sell,
                                             axis=1)  # , axis=1)
    # 重命名
    del merge_sell_data["date"]  # 合并前删除 date 字段。
    # 合并数据
    data_new = pd.merge(data_new, merge_sell_data, on=['code'], how='left')

    # 删除老数据。
    try:
        del_sql = " DELETE FROM `stock_data`.`" + table_name + "` WHERE `date`= '%s' " % datetime_int
        common.insert(del_sql)
        print("insert_db")
    except Exception as e:
        print("error :", e)
    del data_new["trade_float32"]
    try:
        common.insert_db(data_new, table_name, False, "`date`,`code`")
        print("insert_db")
    except Exception as e:
        print("error :", e)
    # 重命名
    del data_new["name"]
    print(data_new)


# main函数入口
if __name__ == '__main__':
    # 计算买卖。
    common.run_with_args(stat_index_calculate)
Beispiel #5
0
# print(stock["mov_vol"].tail())
# print(stock["return"].tail())
# print("stock[10d].tail(1)", stock["10d"].tail(1).values[0])
# 10d    20d  5-10d  5-20d     5d    60d    code      date  mov_vol  return
# tmp = list([stock["10d"].tail(1).values[0], stock["20d"].tail(1).values[0], stock["5-10d"].tail(1).values[0],
#             stock["5-20d"].tail(1).values[0], stock["5d"].tail(1).values[0], stock["60d"].tail(1).values[0],
#             code, date, stock["mov_vol"].tail(1).values[0], stock["return"].tail(1).values[0]])
# # print(tmp)
# return tmp


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    tmp_datetime = common.run_with_args(stat_all_batch)
    # 二次筛选数据。直接计算买卖股票数据。
    tmp_datetime = common.run_with_args(stat_all_lite_buy)
    tmp_datetime = common.run_with_args(stat_all_lite_sell)


####################### 老方法,弃用了。#######################
def stat_index_all_no_use(tmp_datetime):
    datetime_str = (tmp_datetime).strftime("%Y-%m-%d")
    datetime_int = (tmp_datetime).strftime("%Y%m%d")
    print("datetime_str:", datetime_str)
    print("datetime_int:", datetime_int)

    # 查询今日满足股票数据。剔除数据:创业板股票数据,中小板股票数据,所有st股票
    # #`code` not like '002%' and `code` not like '300%'  and `name` not like '%st%'
    sql_1 = """ 
Beispiel #6
0
    stock["10d"] = stock["close"].rolling(window=10).mean()  # 半月线
    stock["20d"] = stock["close"].rolling(window=20).mean()  # 月线
    stock["60d"] = stock["close"].rolling(window=60).mean()  # 季度线
    # 计算日期差。
    stock["5-10d"] = (stock["5d"] - stock["10d"]) * 100 / stock["10d"]  # 周-半月线差
    stock["5-20d"] = (stock["5d"] - stock["20d"]) * 100 / stock["20d"]  # 周-月线差
    # 计算股票的收益价格
    stock["return"] = np.log(stock["close"] / stock["close"].shift(1))

    # print(stock["return"])
    # 计算股票的【收益率的移动历史标准差】
    mov_day = int(len(stock) / 20)
    # print("mov_day:", mov_day, len(stock))
    stock["mov_vol"] = stock["return"].rolling(window=mov_day).std() * math.sqrt(mov_day)
    # print(stock["mov_vol"].tail())
    # print(stock["return"].tail())
    # print("stock[10d].tail(1)", stock["10d"].tail(1).values[0])
    # 10d    20d  5-10d  5-20d     5d    60d    code      date  mov_vol  return
    tmp = pd.Series([stock["10d"].tail(1).values[0], stock["20d"].tail(1).values[0], stock["5-10d"].tail(1).values[0],
                stock["5-20d"].tail(1).values[0], stock["5d"].tail(1).values[0], stock["60d"].tail(1).values[0],
                code, date, stock["mov_vol"].tail(1).values[0], stock["return"].tail(1).values[0]],
                    index=['10d', '20d', '5-10d', '5-20d', '5d', '60d', 'code', 'date', 'mov_vol', 'return'])
    # print(tmp)
    return tmp


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    common.run_with_args(stat_index_all)
Beispiel #7
0
    #### 登陆系统 ####
    lg = bs.login()
    # 显示登陆返回信息
    print('login respond error_code:' + lg.error_code)
    print('login respond  error_msg:' + lg.error_msg)
    date = date.strftime("%Y-%m-%d")
    print(date)
    stock_rs = bs.query_all_stock(date)
    stock_df = stock_rs.get_data()
    print(stock_df.empty)
    if not (stock_df is None or stock_df.empty):
        data_df = pd.DataFrame()
        for code in stock_df["code"]:
            k_rs = bs.query_history_k_data_plus(
                code, "date,code,open,high,low,close,preclose,volume,"
                "amount,adjustflag,turn,tradestatus,pctChg,peTTM,"
                "pbMRQ,psTTM,pcfNcfTTM,isST", date, date)
            data_df = data_df.append(k_rs.get_data())
        data = data_df.drop_duplicates(subset={"date", "code"}, keep="last")
        common.insert_db(data, "bs_stock_k_data", False, "`date`,`code`")
        print(date + " done!")
    else:
        print(date + " no data .")
    bs.logout()


# main函数入口
if __name__ == '__main__':
    # 使用方法传递
    common.run_with_args(query_stock_k_data_plus)
Beispiel #8
0
    # 增加季度字段。
    data = concat_quarter(year, quarter, data)
    # 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
    data = data.drop_duplicates(subset="code", keep="last")
    # 插入数据库。
    common.insert_db(data, "ts_growth_data", False, "`quarter`,`code`")

    # 偿债能力
    data = ts.get_debtpaying_data(year, quarter)
    # 增加季度字段。
    data = concat_quarter(year, quarter, data)
    # 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
    data = data.drop_duplicates(subset="code", keep="last")
    # 插入数据库。
    common.insert_db(data, "ts_debtpaying_data", False, "`quarter`,`code`")

    # 现金流量
    data = ts.get_cashflow_data(year, quarter)
    # 增加季度字段。
    data = concat_quarter(year, quarter, data)
    # 处理重复数据,保存最新一条数据。最后一步处理,否则concat有问题。
    data = data.drop_duplicates(subset="code", keep="last")
    # 插入数据库。
    common.insert_db(data, "ts_cashflow_data", False, "`quarter`,`code`")


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    common.run_with_args(stat_all)
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)

    stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。

    # print(stock.head(10))
    arr = pd.Series(stock["close"].values)
    # print(df_arr)
    wave_mean = arr.mean()
    # 计算股票的波峰值。
    wave_crest = heapq.nlargest(5, enumerate(arr), key=lambda x: x[1])
    wave_crest_mean = pd.DataFrame(wave_crest).mean()

    # 输出元祖第一个元素是index,第二元素是比较的数值 计算数据的波谷值
    wave_base = heapq.nsmallest(5, enumerate(arr), key=lambda x: x[1])
    wave_base_mean = pd.DataFrame(wave_base).mean()
    # 输出数据
    # print("##############")
    tmp = {"code": code, "wave_mean": wave_mean,
           "wave_crest": wave_crest_mean[1], "wave_base": wave_base_mean[1]}
    # print(tmp)
    #     code      date wave_base wave_crest wave_mean 顺序必须一致。返回的是行数据,然后填充。
    return list([code, date, wave_base_mean[1], wave_crest_mean[1], wave_mean])


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    tmp_datetime = common.run_with_args(stat_index_all)
Beispiel #10
0
                               buffett=res_data.buffett,
                               dividend=res_data.dividend,
                               positive=res_data.positive)
    datetime_str = (tmp_datetime).strftime("%Y%m%d")
    filename = "/data/logs/mail_%s.html" % datetime_str
    with open(filename, 'w') as fout:
        fout.write(res)
    title = "A投资建议 %s" % datetime_str
    notify_mails = MAILS

    Wednesday = 2
    if tmp_datetime.weekday() == Wednesday:
        notify_mails += WEEK_MAILS

    mail_cmd = 'mail -a "Content-type: text/html" -s "{title}" {mails} < {filename}'.format(
        title=title, filename=filename, mails=' '.join(notify_mails))
    import subprocess
    subprocess.call(mail_cmd, shell=True)


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。

    tmp_datetime = common.run_with_args(stat_pro_basics)
    res_data = ResData()
    tmp_datetime = common.run_with_args(daily_defensive, res_data)
    tmp_datetime = common.run_with_args(daily_divdend, res_data)
    tmp_datetime = common.run_with_args(daily_positive, res_data)
    tmp_datetime = common.run_with_args(save_then_mail, res_data)
Beispiel #11
0
        and (inventories is NULL or (total_cur_assets - inventories) / total_cur_liab > 1.0)
        and ts_b.ts_code in (
            select ts_code from ts_pro_fina_indicator where end_date > {half_year}0101 and end_date < {cur_year}0101 and end_date like "%%1231" and roe>5 group by ts_code having count(distinct year(end_date)) >= {half_num} and
            ts_code in (
                select ts_code from ts_pro_income where end_date > {cur_year_peer}0101 and end_date < {cur_year}0101 and end_date like "%%1231" and total_revenue>2010001000 group by ts_code having count(distinct year(end_date)) >= {peer_num} and
                ts_code in (select ts_code from ts_pro_income where end_date > {start_year}0101 and end_date < {cur_year}0101 and end_date like "%%1231" and diluted_eps > 0 GROUP by ts_code HAVING count(distinct year(end_date)) >= {max_year}
                )
            )
        )
    ) ts_balancesheet on ts_pro_basics.ts_code = ts_balancesheet.ts_code
""".format(start_year=start_year,
           start_year_peer=start_year + peer_num,
           cur_year=cur_year,
           last_year=cur_year - 1,
           cur_year_peer=cur_year - peer_num,
           peer_num=peer_num,
           max_year=max_year,
           half_num=half_num,
           half_year=cur_year - half_num)
    gen_res_common("ts_res_positive", sql_pro, cur_year)


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    update_current_year()
    common.run_with_args(defensive_main)
    common.run_with_args(buffett_main)
    common.run_with_args(defensive_weak_main)
    common.run_with_args(positive_main)
Beispiel #12
0
    print("########################### stock_X_next date:", stock_X_next)
    # 使用今天的交易价格,13 个指标预测明天的价格。偏移股票数据,今天的数据,目标是明天的价格。
    stock_X = stock_X.drop(stock_X.index[len(stock_X) - 1])  # 删除最后一条数据
    stock_y = stock_y.drop(stock_y.index[0])  # 删除第一条数据
    # print("########################### stock_X date:", stock_X)

    # 删除掉close 也就是收盘价格。
    del stock_X["close"]
    del stock_X_next["close"]

    model = linear_model.LinearRegression()
    # model = KNeighborsClassifier()

    model.fit(stock_X.values, stock_y)
    # print("############## test & target #############")
    # print("############## coef_ & intercept_ #############")
    # print(model.coef_)  # 系数
    # print(model.intercept_)  # 截断
    next_close = model.predict([stock_X_next.values])
    if len(next_close) == 1:
        next_close = next_close[0]
    sklearn_score = model.score(stock_X.values, stock_y)
    print("score:", sklearn_score)  # 评分
    return list([code, date, next_close, sklearn_score * 100])


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    common.run_with_args(stat_all_batch)
    print("########################### stock_X_next date:", stock_X_next)
    # 使用今天的交易价格,13 个指标预测明天的价格。偏移股票数据,今天的数据,目标是明天的价格。
    stock_X = stock_X.drop(stock_X.index[len(stock_X) - 1])  # 删除最后一条数据
    stock_y = stock_y.drop(stock_y.index[0])  # 删除第一条数据
    # print("########################### stock_X date:", stock_X)

    # 删除掉close 也就是收盘价格。
    del stock_X["close"]
    del stock_X_next["close"]

    model = linear_model.LinearRegression()
    # model = KNeighborsClassifier()

    model.fit(stock_X.values, stock_y)
    # print("############## test & target #############")
    # print("############## coef_ & intercept_ #############")
    # print(model.coef_)  # 系数
    # print(model.intercept_)  # 截断
    next_close = model.predict([stock_X_next.values])
    if len(next_close) == 1:
        next_close = next_close[0]
    sklearn_score = model.score(stock_X.values, stock_y)
    print("score:", sklearn_score)  # 评分
    return list([code, date, next_close, sklearn_score * 100])


# main函数入口
if __name__ == '__main__':
    # 使用方法传递。
    tmp_datetime = common.run_with_args(stat_all_batch)
Beispiel #14
0
    print(stock_sell_merge.head(1))

    merge_sell_data = stock_sell_merge.apply(apply_merge_sell, axis=1)  # , axis=1)
    # 重命名
    del merge_sell_data["date"]  # 合并前删除 date 字段。
    # 合并数据
    data_new = pd.merge(data_new, merge_sell_data, on=['code'], how='left')

    # 删除老数据。
    try:
        del_sql = " DELETE FROM `stock_data`.`" + table_name + "` WHERE `date`= '%s' " % datetime_int
        common.insert(del_sql)
        print("insert_db")
    except Exception as e:
        print("error :", e)
    del data_new["trade_float32"]
    try:
        common.insert_db(data_new, table_name, False, "`date`,`code`")
        print("insert_db")
    except Exception as e:
        print("error :", e)
    # 重命名
    del data_new["name"]
    print(data_new)


# main函数入口
if __name__ == '__main__':
    # 计算买卖。
    tmp_datetime = common.run_with_args(stat_index_calculate)