chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:10:28 +08:00
commit c2acfb5f2d
267 changed files with 15542 additions and 0 deletions
+242
View File
@@ -0,0 +1,242 @@
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
# apk add py-mysqldb or
import platform
import datetime
import time
import sys
import os
import MySQLdb
from sqlalchemy import create_engine
from sqlalchemy.types import NVARCHAR
from sqlalchemy import inspect
import pandas as pd
import traceback
import akshare as ak
# 使用环境变量获得数据库。兼容开发模式可docker模式。
MYSQL_HOST = os.environ.get('MYSQL_HOST') if (os.environ.get('MYSQL_HOST') != None) else "mysqldb"
MYSQL_USER = os.environ.get('MYSQL_USER') if (os.environ.get('MYSQL_USER') != None) else "root"
MYSQL_PWD = os.environ.get('MYSQL_PWD') if (os.environ.get('MYSQL_PWD') != None) else "mysqldb"
MYSQL_DB = os.environ.get('MYSQL_DB') if (os.environ.get('MYSQL_DB') != None) else "stock_data"
MYSQL_PORT = os.environ.get('MYSQL_PORT') if (os.environ.get('MYSQL_PORT') != None) else "3306"
print("MYSQL_HOST :", MYSQL_HOST, ",MYSQL_USER :", MYSQL_USER, ",MYSQL_DB :", MYSQL_DB)
MYSQL_CONN_URL = "mysql+mysqldb://" + MYSQL_USER + ":" + MYSQL_PWD + "@" + MYSQL_HOST + ":" + MYSQL_PORT + "/" + MYSQL_DB + "?charset=utf8mb4"
print("MYSQL_CONN_URL :", MYSQL_CONN_URL)
__version__ = "2.0.0"
# 每次发布时候更新。
# https://docs.sqlalchemy.org/en/20/errors.html#error-e3q8
#
def engine():
engine = create_engine(MYSQL_CONN_URL, pool_size=10, max_overflow=20)
#encoding='utf8', convert_unicode=True)
return engine
def engine_to_db(to_db):
MYSQL_CONN_URL_NEW = "mysql+mysqldb://" + MYSQL_USER + ":" + MYSQL_PWD + "@" + MYSQL_HOST + ":" + MYSQL_PORT + "/" + to_db + "?charset=utf8mb4"
engine = create_engine(MYSQL_CONN_URL_NEW, pool_size=10, max_overflow=20)
#encoding='utf8', convert_unicode=True)
return engine
# 通过数据库链接 engine。
def conn():
try:
db = MySQLdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB, charset="utf8")
# db.autocommit = True
except Exception as e:
print("conn error :", e)
db.autocommit(on=True)
return db.cursor()
# 定义通用方法函数,插入数据库表,并创建数据库主键,保证重跑数据的时候索引唯一。
def insert_db(data, table_name, write_index, primary_keys):
# 插入默认的数据库。
insert_other_db(MYSQL_DB, data, table_name, write_index, primary_keys)
# 增加一个插入到其他数据库的方法。
def insert_other_db(to_db, data, table_name, write_index, primary_keys):
# 定义engine
engine_mysql = engine_to_db(to_db)
# 使用 http://docs.sqlalchemy.org/en/latest/core/reflection.html
# 使用检查检查数据库表是否有主键。
insp = inspect(engine_mysql)
col_name_list = data.columns.tolist()
# 如果有索引,把索引增加到varchar上面。
if write_index:
# 插入到第一个位置:
col_name_list.insert(0, data.index.name)
print(col_name_list)
data.to_sql(name=table_name, con=engine_mysql, schema=to_db, if_exists='append',
dtype={col_name: NVARCHAR(length=255) for col_name in col_name_list}, index=write_index)
# print(insp.get_pk_constraint(table_name))
# print()
# print(type(insp))
# 判断是否存在主键
if insp.get_pk_constraint(table_name)['constrained_columns'] == []:
with engine_mysql.connect() as con:
# 执行数据库插入数据。
try:
con.execute('ALTER TABLE `%s` ADD PRIMARY KEY (%s);' % (table_name, primary_keys))
except Exception as e:
print("################## ADD PRIMARY KEY ERROR :", e)
# 插入数据。
def insert(sql, params=()):
with conn() as db:
print("insert sql:" + sql)
try:
db.execute(sql, params)
except Exception as e:
print("error :", e)
# 查询数据
def select(sql, params=()):
with conn() as db:
print("select sql:" + sql)
try:
db.execute(sql, params)
except Exception as e:
print("error :", e)
result = db.fetchall()
return result
# 计算数量
def select_count(sql, params=()):
with conn() as db:
print("select sql:" + sql)
try:
db.execute(sql, params)
except Exception as e:
print("error :", e)
result = db.fetchall()
# 只有一个数组中的第一个数据
if len(result) == 1:
return int(result[0][0])
else:
return 0
# 通用函数。获得日期参数。
def run_with_args(run_fun):
tmp_datetime_show = datetime.datetime.now() # 修改成默认是当日执行 + datetime.timedelta()
tmp_hour_int = int(tmp_datetime_show.strftime("%H"))
if tmp_hour_int < 12 :
# 判断如果是每天 中午 12 点之前运行,跑昨天的数据。
tmp_datetime_show = (tmp_datetime_show + datetime.timedelta(days=-1))
tmp_datetime_str = tmp_datetime_show.strftime("%Y-%m-%d %H:%M:%S.%f")
print("\n######################### hour_int %d " % tmp_hour_int)
str_db = "MYSQL_HOST :" + MYSQL_HOST + ", MYSQL_USER :" + MYSQL_USER + ", MYSQL_DB :" + MYSQL_DB
print("\n######################### " + str_db + " ######################### ")
print("\n######################### begin run %s %s #########################" % (run_fun, tmp_datetime_str))
start = time.time()
# 要支持数据重跑机制,将日期传入。循环次数
if len(sys.argv) == 3:
# python xxx.py 2017-07-01 10
tmp_year, tmp_month, tmp_day = sys.argv[1].split("-")
loop = int(sys.argv[2])
tmp_datetime = datetime.datetime(int(tmp_year), int(tmp_month), int(tmp_day))
for i in range(0, loop):
# 循环插入多次数据,重复跑历史数据使用。
# time.sleep(5)
tmp_datetime_new = tmp_datetime + datetime.timedelta(days=i)
try:
run_fun(tmp_datetime_new)
except Exception as e:
print("error :", e)
traceback.print_exc()
elif len(sys.argv) == 2:
# python xxx.py 2017-07-01
tmp_year, tmp_month, tmp_day = sys.argv[1].split("-")
tmp_datetime = datetime.datetime(int(tmp_year), int(tmp_month), int(tmp_day))
try:
run_fun(tmp_datetime)
except Exception as e:
print("error :", e)
traceback.print_exc()
else:
# tmp_datetime = datetime.datetime.now() + datetime.timedelta(days=-1)
try:
run_fun(tmp_datetime_show) # 使用当前时间
except Exception as e:
print("error :", e)
traceback.print_exc()
print("######################### finish %s , use time: %s #########################" % (
tmp_datetime_str, time.time() - start))
# 设置基础目录,每次加载使用。
bash_stock_tmp = "/data/cache/hist_data_cache/%s/%s/"
if not os.path.exists(bash_stock_tmp):
os.makedirs(bash_stock_tmp) # 创建多个文件夹结构。
print("######################### init tmp dir #########################")
# 增加读取股票缓存方法。加快处理速度。
def get_hist_data_cache(code, date_start, date_end):
cache_dir = bash_stock_tmp % (date_end[0:7], date_end)
# 如果没有文件夹创建一个。月文件夹和日文件夹。方便删除。
# print("cache_dir:", cache_dir)
if not os.path.exists(cache_dir):
os.makedirs(cache_dir)
cache_file = cache_dir + "%s^%s.gzip.pickle" % (date_end, code)
# 如果缓存存在就直接返回缓存数据。压缩方式。
if os.path.isfile(cache_file):
print("######### read from cache #########", cache_file)
return pd.read_pickle(cache_file, compression="gzip")
else:
# https://akshare.akfamily.xyz/data/index/index.html#id4
# 获取历史行情,em
#stock = ak.stock_zh_a_hist(symbol= code, start_date=date_start,
# end_date=date_end, adjust="")
code = gp_type_szsh(code)+ code
print("######### get data, write cache #########", code, date_start, date_end)
stock = ak.stock_zh_index_daily_em(symbol= code,
start_date=date_start.replace("-", ""), end_date=date_end.replace("-", ""))
print(stock)
if stock is None or stock.empty:
return None
stock.columns = ['date', 'open', 'close', 'high', 'low', 'volume', 'amount']
# 数据返回的是带 0 列是索引,第一列是 date 日期
# date open close high low volume amount
# 0 2024-09-20 9.81 9.90 9.90 9.78 797297 7.851212e+08
stock.set_index('date', inplace=True)
#stock = stock.sort_index(0) # 将数据按照日期排序下。
print(stock)
stock.to_pickle(cache_file, compression="gzip")
return stock
# 沪市股票包含上证主板和科创板和B股:沪市主板股票代码是60开头、科创板股票代码是688开头、B股代码900开头。
# 深市股票包含主板、中小板、创业板和B股:深市主板股票代码是000开头、中小板股票代码002开头、创业板300开头、B股代码200开头
# print(gp_type_szsh('002340'))
#
def gp_type_szsh(gp):
if gp.find('60',0,3)==0:
gp_type='sh'
elif gp.find('688',0,4)==0:
gp_type='sh'
elif gp.find('900',0,4)==0:
gp_type='sh'
elif gp.find('00',0,3)==0:
gp_type='sz'
elif gp.find('300',0,4)==0:
gp_type='sz'
elif gp.find('200',0,4)==0:
gp_type='sz'
return gp_type
+196
View File
@@ -0,0 +1,196 @@
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
class StockWebData:
def __init__(self, mode, type, name, table_name, columns, column_names, primary_key, order_by):
self.mode = mode # 模式,queryeditor 查询和编辑模式
self.type = type
self.name = name
self.table_name = table_name
self.columns = columns
self.column_names = column_names
self.primary_key = primary_key
self.order_by = order_by
if mode == "query":
self.url = "/stock/data?table_name=" + self.table_name
elif mode == "editor":
self.url = "/data/editor?table_name=" + self.table_name
STOCK_WEB_DATA_LIST = []
# https://www.akshare.xyz/zh_CN/latest/data/stock/stock.html#id1
# 限量: 单次返回所有 A 股上市公司的实时行情数据
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="1,股票基本数据",
name="每日股票数据-东财",
table_name="stock_zh_a_spot_em",
columns= ['date', 'code', 'name', 'last_price', 'change_percent', 'change_amount',
'volume', 'turnover', 'amplitude', 'high', 'low', 'open', 'closed', 'volume_ratio',
'turnover_rate', 'pe_ratio','pb_ratio', 'market_cap','circulating_market_cap','rise_speed',
'change_5min', 'change_ercent_60day','ytd_change_percent'] ,
column_names=['日期','代码','名称','最新价','涨跌幅','涨跌额','成交量','成交额',
'振幅','最高','最低','今开','昨收','量比','换手率','动态市盈率',
'市净率', '总市值', '流通市值', '涨速', '5分钟涨跌', '60日涨跌幅', '年初至今涨跌幅'],
primary_key=[],
order_by=" code asc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="1,股票基本数据",
name="龙虎榜-个股上榜-新浪",
table_name="stock_lhb_ggtj_sina",
columns= ['date','code','name','ranking_times','sum_buy','sum_sell','net_amount','buy_seat','sell_seat'],
column_names=['日期','代码', '名称', '上榜次数', '累积购买额', '累积卖出额', '净额', '买入席位数', '卖出席位数'],
primary_key=[],
order_by=" code asc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="1,股票基本数据",
name="数据中心-大宗交易",
table_name="stock_dzjy_mrtj",
columns= ['date', 'code', 'name', 'quote_change', 'close_price', 'average_price',
'overflow_rate', 'trade_number', 'sum_volume', 'sum_turnover',
'turnover_market_rate'],
column_names=['日期', '代码', '名称', '涨跌幅', '收盘价', '成交均价',
'折溢率', '成交笔数', '成交总量', '成交总额',
'成交总额/流通市值'],
primary_key=[],
order_by=" code asc "
)
)
# 每日股票指标lite猜想买入。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="2,每日数据猜想",
name="股票指标lite猜想买入",
table_name="guess_indicators_lite_buy_daily",
# columns=['date', 'code', 'name', 'latest_price', 'quote_change', 'ups_downs', 'volume', 'turnover',
# 'amplitude', 'high', 'low', 'open', 'closed', 'volume_ratio', 'turnover_rate', 'pe_dynamic', 'pb',
# 'kdjj', 'rsi_6', 'cci'],
# column_names=['日期', '代码', '名称', '最新价', '涨跌幅', '涨跌额', '成交量', '成交额',
# '振幅', '最高', '最低', '今开', '昨收', '量比', '换手率', '动态市盈率', '市净率',
# 'kdjj', 'rsi_6', 'cci'],
columns= ['date', 'code', 'name', 'last_price', 'change_percent', 'change_amount',
'volume', 'turnover', 'amplitude', 'high', 'low', 'open', 'closed', 'volume_ratio',
'turnover_rate', 'pe_ratio','pb_ratio', 'market_cap','circulating_market_cap','rise_speed',
'change_5min', 'change_ercent_60day','ytd_change_percent',
'boll', 'boll_lb', 'boll_ub', 'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh',
'macds', 'pdi','trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'] ,
# 中文说明前面和 1 数据一致。
column_names=['日期','代码','名称','最新价','涨跌幅','涨跌额','成交量','成交额',
'振幅','最高','最低','今开','昨收','量比','换手率','动态市盈率',
'市净率', '总市值', '流通市值', '涨速', '5分钟涨跌', '60日涨跌幅',
'年初至今涨跌幅',
'boll', 'boll_lb', 'boll_ub',
'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'pdi',
'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
primary_key=[],
order_by=" buy_date desc "
)
)
# 每日股票指标lite猜想卖出。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="2,每日数据猜想",
name="股票指标lite猜想卖出",
table_name="guess_indicators_lite_sell_daily",
# columns=['date', 'code', 'name', 'latest_price', 'quote_change', 'ups_downs', 'volume', 'turnover',
# 'amplitude', 'high', 'low', 'open', 'closed', 'volume_ratio', 'turnover_rate', 'pe_dynamic', 'pb',
# 'kdjj', 'rsi_6', 'cci'],
# column_names=['日期', '代码', '名称', '最新价', '涨跌幅', '涨跌额', '成交量', '成交额',
# '振幅', '最高', '最低', '今开', '昨收', '量比', '换手率', '动态市盈率', '市净率',
# 'kdjj', 'rsi_6', 'cci'],
columns= ['date', 'code', 'name', 'last_price', 'change_percent', 'change_amount',
'volume', 'turnover', 'amplitude', 'high', 'low', 'open', 'closed', 'volume_ratio',
'turnover_rate', 'pe_ratio','pb_ratio', 'market_cap','circulating_market_cap','rise_speed',
'change_5min', 'change_ercent_60day','ytd_change_percent',
'boll', 'boll_lb', 'boll_ub', 'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh',
'macds', 'pdi','trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'] ,
# 中文说明前面和 1 数据一致。
column_names=['日期','代码','名称','最新价','涨跌幅','涨跌额','成交量','成交额',
'振幅','最高','最低','今开','昨收','量比','换手率','动态市盈率',
'市净率', '总市值', '流通市值', '涨速', '5分钟涨跌', '60日涨跌幅',
'年初至今涨跌幅',
'boll', 'boll_lb', 'boll_ub',
'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'pdi',
'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
primary_key=[],
order_by=" buy_date desc "
)
)
# 每日股票指标lite猜想。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="2,每日数据猜想",
name="股票指标猜想原始数据",
table_name="guess_indicators_daily",
columns= ['date', 'code', 'name', 'last_price', 'change_percent', 'change_amount',
'volume', 'turnover', 'amplitude', 'high', 'low', 'open', 'closed', 'volume_ratio',
'turnover_rate', 'pe_ratio','pb_ratio', 'market_cap','circulating_market_cap','rise_speed',
'change_5min', 'change_ercent_60day','ytd_change_percent',
'boll', 'boll_lb', 'boll_ub', 'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh',
'macds', 'pdi','trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'] ,
# 中文说明前面和 1 数据一致。
column_names=['日期','代码','名称','最新价','涨跌幅','涨跌额','成交量','成交额',
'振幅','最高','最低','今开','昨收','量比','换手率','动态市盈率',
'市净率', '总市值', '流通市值', '涨速', '5分钟涨跌', '60日涨跌幅',
'年初至今涨跌幅',
'boll', 'boll_lb', 'boll_ub',
'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'pdi',
'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
# columns=['date','code','name','latest_price','quote_change','ups_downs',
# 'adx', 'adxr', 'boll', 'boll_lb', 'boll_ub', 'cci', 'cci_20', 'close_-1_r',
# 'close_-2_r', 'code', 'cr', 'cr-ma1', 'cr-ma2', 'cr-ma3', 'date', 'dma', 'dx',
# 'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'mdi', 'pdi',
# 'rsi_12', 'rsi_6', 'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
# column_names=['日期','代码','名称','最新价','涨跌幅','涨跌额',
# 'adx', 'adxr', 'boll', 'boll_lb', 'boll_ub', 'cci', 'cci_20', 'close_-1_r',
# 'close_-2_r', 'code', 'cr', 'cr-ma1', 'cr-ma2', 'cr-ma3', 'date', 'dma', 'dx',
# 'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'mdi', 'pdi',
# 'rsi_12', 'rsi_6', 'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
primary_key=[],
order_by=' date desc '
)
)
# "code", "name: pchange", "amount", "buy", "bratio", "sell", "sratio", "reason", "date"
# 代码 名称 当日涨跌幅 龙虎榜成交额(万) 买入额(万) 买入占总成交比例 卖出额(万) 卖出占总成交比例 上榜原因 日期
STOCK_WEB_DATA_MAP = {}
WEB_EASTMONEY_URL = "http://quote.eastmoney.com/%s.html"
# 再拼接成Map使用。
for tmp in STOCK_WEB_DATA_LIST:
# try:
# # 增加columns 字段中的【查看股票】
# tmp_idx = tmp.columns.index("code")
# tmp.column_names.insert(tmp_idx + 1, "查看股票")
# except Exception as e:
# print("error :", e)
STOCK_WEB_DATA_MAP[tmp.table_name] = tmp
if len(tmp.columns) != len(tmp.column_names):
print(u"error:", tmp.table_name, ",columns:", len(tmp.columns), ",column_names:", len(tmp.column_names))
+358
View File
@@ -0,0 +1,358 @@
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
class StockWebData:
def __init__(self, mode, type, name, table_name, columns, column_names, primary_key, order_by):
self.mode = mode # 模式,queryeditor 查询和编辑模式
self.type = type
self.name = name
self.table_name = table_name
self.columns = columns
self.column_names = column_names
self.primary_key = primary_key
self.order_by = order_by
if mode == "query":
self.url = "/stock/data?table_name=" + self.table_name
elif mode == "editor":
self.url = "/data/editor?table_name=" + self.table_name
STOCK_WEB_DATA_LIST = []
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="宏观经济数据",
name="存款利率",
table_name="ts_deposit_rate",
columns=["date", "deposit_type", "rate"],
column_names=["日期", "存款类型", "存款利率"],
primary_key=[],
order_by=" date desc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="宏观经济数据",
name="贷款利率",
table_name="ts_loan_rate",
columns=["date", "loan_type", "rate"],
column_names=["日期", "贷款类型", "存款利率"],
primary_key=[],
order_by=" date desc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="宏观经济数据",
name="存款准备金率",
table_name="ts_rrr",
columns=["date", "before", "now", "changed"],
column_names=["变动日期", "调整前存款准备金率(%)", "调整后存款准备金率(%)", "调整幅度(%)"],
primary_key=[],
order_by=" date desc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="宏观经济数据",
name="货币供应量",
table_name="ts_money_supply",
columns=["month", "m2", "m2_yoy", "m1", "m1_yoy", "m0", "m0_yoy", "cd", "cd_yoy", "qm", "qm_yoy", "ftd",
"ftd_yoy", "sd", "sd_yoy", "rests", "rests_yoy"],
column_names=["统计时间", "货币和准货币(广义货币M2)(亿元)", "货币和准货币(广义货币M2)同比增长(%)",
"货币(狭义货币M1)(亿元)", "货币(狭义货币M1)同比增长(%)",
"流通中现金(M0)(亿元)", "流通中现金(M0)同比增长(%)",
"活期存款(亿元)", "活期存款同比增长(%)",
"准货币(亿元)", "准货币同比增长(%)",
"定期存款(亿元)", "定期存款同比增长(%)",
"储蓄存款(亿元)", "储蓄存款同比增长(%)",
"其他存款(亿元)", "其他存款同比增长(%)"
],
primary_key=[],
order_by=" month desc "
)
)
# http://tushare.org/fundamental.html
# 参考官网网站的文档,是最全的。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="基本面数据",
name="股票列表",
table_name="ts_stock_basics",
columns=["code", "name", "industry", "area", "pe", "outstanding", "totals", "totalAssets", "liquidAssets",
"fixedAssets", "reserved", "reservedPerShare", "esp", "bvps", "pb", "timeToMarket",
"undp", "perundp", "rev", "profit", "gpr", "npr", "holders"],
column_names=["代码", "名称", "所属行业", "地区", "市盈率", "流通股本(亿)", "总股本(亿)", "总资产(万)", "流动资产",
"固定资产", "公积金", "每股公积金", "每股收益", "每股净资", "市净率", "上市日期", "未分利润",
"每股未分配", "收入同比(%)", "利润同比(%)", "毛利率(%)", "净利润率(%)", "股东人数"
],
primary_key=[],
order_by=" code asc "
)
)
# 业绩报告(主表)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="基本面数据",
name="业绩报告(主表)",
table_name="ts_report_data",
columns=["quarter", "code", "name", "eps", "eps_yoy", "bvps", "roe", "epcf", "net_profits",
"profits_yoy", "distrib", "report_date"],
column_names=["季度", "代码", "名称", "每股收益", "每股收益同比(%)", "每股净资产", "净资产收益率(%)", "每股现金流量(元)", ",净利润(万元)",
"净利润同比(%)", "分配方案", "发布日期"
],
primary_key=[],
order_by=" quarter desc "
)
)
# 盈利能力
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="基本面数据",
name="盈利能力",
table_name="ts_profit_data",
columns=["quarter", "code", "name", "roe", "net_profit_ratio", "gross_profit_rate",
"net_profits", "eps", "business_income", "bips"],
column_names=["季度", "代码", "名称", "净资产收益率(%)", "净利率(%)", "毛利率(%)", "净利润(万元)",
"每股收益", "营业收入(百万元)", "每股主营业务收入(元)"],
primary_key=[],
order_by=" quarter desc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="基本面数据",
name="营运能力",
table_name="ts_operation_data",
columns=["quarter", "code", "name", "arturnover", "arturndays",
"inventory_turnover", "inventory_days", "currentasset_turnover", "currentasset_days"],
column_names=["季度", "代码", "名称", "应收账款周转率(次)", "应收账款周转天数(天)", "存货周转率(次)", "存货周转天数(天)",
"流动资产周转率(次)", "流动资产周转天数(天)"
],
primary_key=[],
order_by=" quarter desc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="基本面数据",
name="成长能力",
table_name="ts_growth_data",
columns=["quarter", "code", "name", "mbrg", "nprg", "nav", "targ", "epsg", "seg"],
column_names=["季度", "代码", "名称", "主营业务收入增长率(%)", "净利润增长率(%)", "净资产增长率", "总资产增长率",
"每股收益增长率", "股东权益增长率"],
primary_key=[],
order_by=" quarter desc "
)
)
# "code", "name: pchange", "amount", "buy", "bratio", "sell", "sratio", "reason", "date"
# 代码 名称 当日涨跌幅 龙虎榜成交额(万) 买入额(万) 买入占总成交比例 卖出额(万) 卖出占总成交比例 上榜原因 日期
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据",
name="龙虎榜",
table_name="ts_top_list",
columns=["date", "code", "name", "pchange", "amount", "buy", "bratio", "sell", "sratio", "reason"],
column_names=["日期", "代码", "名称", "当日涨跌幅", "龙虎榜成交额(万)", "买入额(万)", "买入占总成交比例", "卖出额(万)",
"卖出占总成交比例", "上榜原因"],
primary_key=[],
order_by=" date desc "
)
)
# 实时行情
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据",
name="每日股票数据",
table_name="ts_today_all",
columns=["date", "code", "name", "changepercent", "trade", "open", "high", "low", "settlement", "volume",
"turnoverratio", "amount", "per", "pb", "mktcap", "nmc"],
column_names=["日期", "代码", "名称", "涨跌幅", "现价", "开盘价", "最高价", "最低价", "昨日收盘价", "成交量",
"换手率", "成交金额", "市盈率", "市净率", "总市值", "流通市值"],
primary_key=[],
order_by=" date desc "
)
)
# 大盘指数行情列表
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据",
name="每日大盘指数行情",
table_name="ts_index_all",
columns=["date", "code", "name", "change", "open", "preclose", "close", "high", "low", "volume", "amount"],
column_names=["日期", "代码", "名称", "涨跌幅", "开盘点位", "昨日收盘点位", "收盘点位", "最高点位", "最低点位", "成交量(手)", "成交金额(亿元)"],
primary_key=[],
order_by=" date desc "
)
)
# 每日波峰波谷猜想
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据猜想",
name="每日波峰波谷猜想",
table_name="guess_period_daily",
columns=["date", "code", "name", "wave_base", "wave_crest", "wave_mean", "up_rate",
"changepercent", "trade", "open", "high", "low", "settlement", "volume",
"turnoverratio", "amount", "per", "pb", "mktcap", "nmc"],
column_names=["日期", "代码", "名称", "5波峰平均", "5波谷平均", "价格平均", "上涨率猜想%",
"涨跌幅", "现价", "开盘价", "最高价", "最低价", "昨日收盘价", "成交量",
"换手率", "成交金额", "市盈率", "市净率", "总市值", "流通市值"],
primary_key=[],
order_by=" date desc "
)
)
# 每日收益率猜想。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据猜想",
name="每日收益率猜想",
table_name="guess_return_daily",
columns=["date", "code", "name",
"5d", "10d", "20d", "60d", "5-10d", "5-20d", "mov_vol", "return",
"changepercent", "trade", "open", "high", "low", "settlement", "volume",
"turnoverratio", "amount", "per", "pb", "mktcap", "nmc"],
column_names=["日期", "代码", "名称",
"5周线", "10半月线", "20月线", "60季度线", "5-10日差%", "5-20日差%", "收益", "收益率移动标准差",
"涨跌幅", "现价", "开盘价", "最高价", "最低价", "昨日收盘价", "成交量",
"换手率", "成交金额", "市盈率", "市净率", "总市值", "流通市值"],
primary_key=[],
order_by=" date desc "
)
)
# 每日股票指标lite猜想。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据猜想",
name="每日股票指标lite猜想",
table_name="guess_indicators_lite_daily",
columns=["date", "code", "name", "changepercent", "trade", "open", "high", "low", "settlement", "volume",
"turnoverratio", "amount", "per", "pb", "mktcap", "nmc",
"kdjj", "rsi_6", "cci"],
column_names=["日期", "代码", "名称",
"涨跌幅", "现价", "开盘价", "最高价", "最低价", "昨日收盘价", "成交量",
"换手率", "成交金额", "市盈率", "市净率", "总市值", "流通市值",
"kdjj", "rsi_6", "cci"],
primary_key=[],
order_by=" date desc "
)
)
# 每日股票指标lite猜想买入。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据猜想",
name="每日股票指标lite猜想买入",
table_name="guess_indicators_lite_buy_daily",
columns=["buy_date", "code", "name", "changepercent", "trade", "turnoverratio", "pb",
"kdjj", "rsi_6", "cci", "wave_base", "wave_crest", "wave_mean", "up_rate", "buy", "sell",
"today_trade", "income"],
column_names=["购买日期", "代码", "名称", "涨跌幅", "现价", "换手率%", "市净率%",
"买入kdjj", "买入rsi_6", "买入cci", "波谷", "波峰", "波平均", "上涨率%", "买入", "卖出", "今日价格", "收益"],
primary_key=[],
order_by=" buy_date desc "
)
)
# 每日股票指标lite猜想卖出。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据猜想",
name="每日股票指标lite猜想卖出",
table_name="guess_indicators_lite_sell_daily",
columns=["date", "buy_date", "code", "name", "changepercent", "trade", "turnoverratio", "pb",
"kdjj", "rsi_6", "cci", "wave_base", "wave_crest", "wave_mean", "up_rate", "buy", "sell",
"today_trade", "income", "sell_cci", "sell_kdjj", "sell_rsi_6"],
column_names=["日期", "购买日期", "代码", "名称", "涨跌幅", "现价", "换手率%", "市净率%",
"买入kdjj", "买入rsi_6", "买入cci", "波谷", "波峰", "波平均", "上涨率%", "买入", "卖出", "今日价格", "收益",
"卖出kdjj", "卖出rsi_6", "卖出cci", ],
primary_key=[],
order_by=" buy_date desc "
)
)
# 每日股票指标猜想。
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据猜想",
name="每日股票指标All猜想",
table_name="guess_indicators_daily",
columns=["date", "code", "name", "changepercent", "trade", "open", "high", "low", "settlement", "volume",
"turnoverratio", "amount", "per", "pb", "mktcap", "nmc",
'adx', 'adxr', 'boll', 'boll_lb', 'boll_ub', 'cci', 'cci_20', 'close_-1_r',
'close_-2_r', 'code', 'cr', 'cr-ma1', 'cr-ma2', 'cr-ma3', 'date', 'dma', 'dx',
'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'mdi', 'pdi',
'rsi_12', 'rsi_6', 'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
column_names=["日期", "代码", "名称",
"涨跌幅", "现价", "开盘价", "最高价", "最低价", "昨日收盘价", "成交量",
"换手率", "成交金额", "市盈率", "市净率", "总市值", "流通市值",
'adx', 'adxr', 'boll', 'boll_lb', 'boll_ub', 'cci', 'cci_20', 'close_-1_r',
'close_-2_r', 'code', 'cr', 'cr-ma1', 'cr-ma2', 'cr-ma3', 'date', 'dma', 'dx',
'kdjd', 'kdjj', 'kdjk', 'macd', 'macdh', 'macds', 'mdi', 'pdi',
'rsi_12', 'rsi_6', 'trix', 'trix_9_sma', 'vr', 'vr_6_sma', 'wr_10', 'wr_6'],
primary_key=[],
order_by=" date desc "
)
)
STOCK_WEB_DATA_LIST.append(
StockWebData(
mode="query",
type="每日数据Keras猜想",
name="每日股票数据Keras猜想",
table_name="guess_sklearn_ma_daily",
columns=["date", "code", "name", "changepercent", "trade", "open", "high", "low", "settlement", "volume",
"turnoverratio", "next_close", "sklearn_score", "up_rate"],
column_names=["日期", "代码", "名称", "涨跌幅", "现价", "开盘价", "最高价", "最低价", "昨日收盘价", "成交量",
"换手率", "预测收盘价", "sk概率", "预测上涨率"],
primary_key=[],
order_by=" date desc "
)
)
STOCK_WEB_DATA_MAP = {}
WEB_EASTMONEY_URL = "http://quote.eastmoney.com/%s.html"
# 再拼接成Map使用。
for tmp in STOCK_WEB_DATA_LIST:
try:
# 增加columns 字段中的【东方财富】
tmp_idx = tmp.columns.index("code")
tmp.column_names.insert(tmp_idx + 1, "东方财富")
except Exception as e:
print("error :", e)
STOCK_WEB_DATA_MAP[tmp.table_name] = tmp
if len(tmp.columns) != len(tmp.column_names):
print(u"error:", tmp.table_name, ",columns:", len(tmp.columns), ",column_names:", len(tmp.column_names))