python获取个股各类日线和基本数据

股票基本信息

ts_code:股票代码,这是每只股票的唯一标识符。不同市场的股票代码格式不同,比如 A 股市场中,上交所股票代码以 60 开头,深交所中小板股票代码以 002 开头,创业板股票代码以 300 开头等。
trade_date:交易日期,格式一般为 YYYYMMDD,它明确了数据对应的具体交易时间。

行情数据

open:开盘价,即股票在每个交易日开始时的第一笔成交价格。
high:最高价,指股票在一个交易日内所达到的最高成交价格。
low:最低价,是股票在一个交易日内所达到的最低成交价格。
close:收盘价,也就是股票在每个交易日结束时的最后一笔成交价格。
pre_close:前收盘价,代表上一个交易日的收盘价,它是计算当日涨跌幅等指标的重要参考。
change:涨跌额,计算方式是当日收盘价减去前收盘价,反映了股票价格较上一交易日的绝对变动金额。
pct_chg:涨跌幅,用百分比表示,计算公式为 (当日收盘价 - 前收盘价) / 前收盘价 * 100%,体现了股票价格的相对变动幅度。
vol:成交量,指在一个交易日内股票的成交总手数,反映了市场的交易活跃程度。
amount:成交额,是指在一个交易日内股票的成交总金额,通过成交量与成交价格相乘得到,同样能反映市场的交易活跃程度和资金流动情况。

交易指标

turnover_rate:换手率,计算公式为 成交量 / 流通股本 * 100%,它反映了股票在一定时间内的转手买卖频率,是衡量股票流通性强弱的指标。
turnover_rate_f:自由流通股本换手率,计算方式为 成交量 / 自由流通股本 * 100%,自由流通股本是指剔除了控股股东、战略投资者等持有的长期锁定股份后的股本,该指标更能反映市场中实际可交易股份的换手情况。
volume_ratio:量比,是衡量相对成交量的指标,它是开市后平均每分钟的成交量与过去 5 个交易日平均每分钟成交量之比。量比大于 1 表示当日每分钟的平均成交量大于过去 5 日的平均值,交易相对活跃;反之则表示交易相对清淡。

估值指标

pe:市盈率(Price - Earnings Ratio),分为静态市盈率和动态市盈率。静态市盈率是用当前股价除以过去一年的每股收益;动态市盈率则考虑了公司未来的盈利增长情况,一般用当前股价除以预测的未来一年每股收益。市盈率反映了投资者为获取公司每一元盈利所愿意支付的价格,是评估股票估值的重要指标之一。
pe_ttm:滚动市盈率,即 Trailing Twelve Months 的缩写,它是用当前股价除以过去四个季度的每股收益之和。与静态市盈率相比,滚动市盈率能更及时地反映公司的盈利变化情况。
pb:市净率(Price - to - Book Ratio),计算公式为 股价 / 每股净资产,反映了市场对公司净资产的估值水平。一般来说,市净率较低的股票可能被低估,但也可能暗示公司存在经营问题。
ps:市销率(Price - to - Sales Ratio),用当前股价除以每股销售收入,它主要用于评估一些尚未盈利但有销售收入的公司的估值情况,反映了市场对公司销售收入的认可程度。
ps_ttm:滚动市销率,计算方式是用当前股价除以过去四个季度的每股销售收入之和,同样是为了更及时地反映公司销售收入的变化。

股息指标

dv_ratio:股息率,计算公式为 年度股息 / 当前股价 * 100%,它反映了股票的分红收益情况,是投资者选择股票时考虑的重要因素之一。
dv_ttm:滚动股息率,是过去 12 个月的股息率,通过计算过去四个季度的股息总和与当前股价的比率得到,能更动态地反映公司的股息分配情况。
股本与市值指标
total_share:总股本,指公司发行的全部股份数量,包括流通股和非流通股。
float_share:流通股本,即可以在证券市场上自由买卖的股份数量。
free_share:自由流通股本,是指剔除了控股股东、战略投资者等持有的长期锁定股份后的流通股本,更能反映市场上实际可交易的股份数量。
total_mv:总市值,计算方法是 总股本 * 股价,它反映了公司在市场上的整体价值。
circ_mv:流通市值,计算公式为 流通股本 * 股价,代表了公司可在市场上自由交易的股份的总价值。

# 导入 tushare 库,tushare 是一个免费、开源的 python 财经数据接口包,可用于获取各类金融数据
import tushare as ts
import pandas as pd
# 从 datetime 模块导入 datetime 和 timedelta 类
# datetime 类用于处理日期和时间,timedelta 类用于表示时间间隔
from datetime import datetime, timedelta

# 设置 tushare 的 token,需要在 tushare 官网注册获取
# token 是使用 tushare 接口的身份凭证,只有设置了有效的 token 才能正常调用接口获取数据
ts.set_token('your_token')
# 创建 tushare 的 pro 接口对象,后续通过该对象调用各种数据接口
pro = ts.pro_api()

# 起始日期,指定从该日期开始获取 A 股数据
start_date = '20060101'
# 获取当前日期,并将其格式化为 'YYYYMMDD' 的字符串形式
# 这样可以动态地以当前日期作为数据获取的截止日期
end_date = datetime.today().strftime('%Y%m%d')

# 将起始日期字符串转换为 datetime 对象
# 方便后续进行日期的比较和计算
start = datetime.strptime(start_date, '%Y%m%d')
# 将结束日期字符串转换为 datetime 对象
end = datetime.strptime(end_date, '%Y%m%d')

# 循环遍历从起始日期到结束日期的每一天
# 初始化当前日期为起始日期
current_date = start
# 只要当前日期小于等于结束日期,就继续循环
while current_date <= end:
    # 将当前日期格式化为 'YYYYMMDD' 的字符串形式
    date_str = current_date.strftime('%Y%m%d')
    try:
        # 使用 pro.daily_basic 接口获取数据
        df_daily_basic = pro.daily_basic(trade_date=date_str)

        # 使用 pro.daily 接口获取数据
        df_daily = pro.daily(trade_date=date_str)
        if 'close' in df_daily.columns:
            df_daily = df_daily.drop(columns='close')
        if 'trade_date' in df_daily.columns:
            df_daily = df_daily.drop(columns='trade_date')
        # 合并数据,根据股票代码(ts_code)进行左连接合并
        merged_df = pd.merge(df_daily, df_daily_basic, on='ts_code', how='left')
        # 删除多余的列,保留合并前df_daily中的close和trade_date列,删除df_daily_basic中的同名列

        # 检查获取到的数据 DataFrame 是否为空
        if not merged_df.empty:
            # 若不为空,将数据保存为 CSV 文件,文件名以日期命名
            file_path =  f'D:/quantkt/data/stock/basic_and_daily_data/{date_str}_stock_data.csv'
            print(file_path)
            # 使用 pandas 的 to_csv 方法将数据保存为 CSV 文件,index=False 表示不保存索引列
            merged_df.to_csv(file_path, index=False)
            # 打印保存成功的提示信息
            print(f"{date_str} 的数据已成功保存到 {file_path}")
        else:
            # 若获取到的数据为空,打印提示信息,可能该日是非交易日
            print(f"未获取到 {date_str} 的股票数据,可能该日非交易日。")
    except Exception as e:
        # 若在请求数据或保存文件过程中出现异常,打印错误信息
        print(f"请求 {date_str} 数据或保存文件时出现错误: {e}")
    # 日期加一天,以便处理下一天的数据
    current_date += timedelta(days=1)

详情数据下载可来本人自建量化平台quantkt.com来获取

``` {智能估值体系V14.1优化版} 大盘过滤:=INDEXC>MA(INDEXC,60) AND INDEXC>MA(INDEXC,120); {动态PE优化} DYNPETTM:=IF(FINANCE(1)>3E8 AND FINANCE(4)>1.5E8, CLOSE/((FINANCE(1)/MAX(FINANCE(4),1.2E8)+1E-6)*0.81)* (1+0.18*INDUSTRYF(1013)),1000); {PB率优化} PB_RATE:=IF(FINANCE(34)>0.88 AND CLOSE>5.5, CLOSE/((FINANCE(34)*0.85+REF(FINANCE(34),1)*0.15)*0.97+1E-6),1000); {PEG计算优化} PEG_VAL:=DYNPETTM/MAX(FINANCE(30)/REF(MAX(FINANCE(30),0.01),4),1.35); {分形波动率V21} VAR_PERIOD:=IF(STD(CLOSE,89)/CLOSE<0.018,377, IF(STD(CLOSE,89)/CLOSE<0.04,233,89)); SLOW_LEN:=IF(STD(CLOSE,89)/CLOSE>0.2,INT(VAR_PERIOD*1.618),CEILING(VAR_PERIOD*2.118)); {行业轮动V14.1} HY_RET:=EMA((INDEXC/REF(INDEXC,5)-1)*100,5)*1.45; TRANS_MAT:=EMA((SUM((IND_RATIO>REF(IND_RATIO,5))*(REF(IND_RATIO,5)>REF(IND_RATIO,21)),21)+ SUM((IND_RATIO>REF(IND_RATIO,5))*(REF(IND_RATIO,5)>REF(IND_RATIO,34)),34))/2/ (SUM(REF(IND_RATIO,5)>REF(IND_RATIO,21),55)+1E-4),5)*1.18; {行业筛选V4.1} SECTOR_FLT:=SECTOR_STR>REF(SECTOR_STR,34)*1.25 AND CTOP_SECT AND CROSS(EMA(SECTOR_STR,5),EMA(SECTOR_STR,13)) AND SLOPE(SECTOR_STR,3)>SLOPE(SECTOR_STR,8)*1.42; {三维共振V7.1} DIF:=EMA(CLOSE,7)-EMA(CLOSE,18); DEA:=EMA(DIF,3); MACD_COND:=DIF>DEA AND DEA>REF(DEA,3)*1.05; {资金流向V6.1} BIGBUY:=SUM(IF(VOL/FINANCE(7)>=0.01 AND COUNT(VOL/FINANCE(7)>=0.008,3)=3, AMOUNT*0.85,0),3); FUNDFLOW:=(BIGBUY-BIGSELL)/FINANCE(7)*100*1.31; {情绪启动V4.1} 情绪启动:=CROSS(MARKET_SENT,1.42) AND COUNT(MARKET_SENT>1.18,3)>=2 AND CLOSE>EMA(CLOSE,233)*1.22; {终极信号V8.1} 盘后选股:=大盘过滤 AND DYNPETTM<8.5 AND PB_RATE<1.58 AND PEG_VAL<0.45 AND EVERY(CLOSE>EMA(CLOSE,55),10) AND FINANCE(30)/REF(MAX(FINANCE(30),0.01),4)>1.72 AND EVERY(VOL>MA(VOL,55)*1.42,5) AND MACD_COND AND CLOSE/EMA(CLOSE,55)>1.32 AND VOL/EMA(VOL,55)>1.62; {盘中预警V3.1} 盘中预警:CROSS(CLOSE,BOLL_UPPER) AND VOL>MA(VOL,34)*3.8 AND FUNDFLOW>REF(FUNDFLOW,1)*1.28 AND 情绪启动 AND CLOSE>HHV(HIGH,21) AND 大盘过滤; {资金流验证V13.1} LHB_DATA:=FINANCE(244)/CAPITAL*100; CAPITAL_INFLOW:=SUM(AMO,5)/SUM(AMO,21)>1.02 AND EVERY(V>REF(V,1)*1.28,5) AND (MAIN_FUND-REF(MAIN_FUND,3))/CAPITAL>0.22; {信号衰减模型V3.1} DECAY_WEIGHT:=EXP(-0.12*(BARSLAST(盘后选股))); SIGNAL_EMA:EMA(盘后选股*DECAY_WEIGHT,5); DRAWICON(盘后选股 AND 盘中预警, LOW, 1);```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析解答。我的问题是【使用Python构建回测系统测试选股代码的有效性?用2018-2024年全A股周期回测验证此代码选股逻辑的准确性胜率,评估月胜率达到多少?评估有效信号准确率达到多少?】,同时此代码还有什么可提升的空间,提出可行性的优化建议方案
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值