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)
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)
# 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 = """
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)
#### 登陆系统 #### 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)
# 增加季度字段。 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)
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)
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)
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)
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)