使用pytdx获取历史股票行情

先看效果

获取从2010年01月01日-2024年09月30日的股票数据
在这里插入图片描述

pytdx基础

https://blog.youkuaiyun.com/firexiaHouse/article/details/142687052?spm=1001.2014.3001.5501

获取历史股票行情

    def get_k_data(self, code, start, end):
        logging.info("获取历史股票行情")
        if self.api.connect(self.ip, int(self.port)):
            df = self.api.get_k_data(code, start, end)
            return df.to_dict('records') or []
        return []

在这里插入图片描述

将历史数据存入数据库

    def create_history_individual_stock(self, stock_id, date_from, date_to, page):
        """

        """
        start = timeit.default_timer()
        if not date_from:
            date_from = date.today() - timedelta(days=30)
        else:
            date_from = datetime.strptime(date_from, '%Y-%m-%d').date()
        if not date_to:
            date_to = date.today()
        else:
            date_to = datetime.strptime(date_to, '%Y-%m-%d').date()
        if date_from > date_to:
            return
        tdx_client = self.env['tdx.service'].get_tdx_client()
        history_k_data = tdx_client.get_k_data(
            stock_id.code, date_from.strftime('%Y-%m-%d'), date_to.strftime('%Y-%m-%d')
        )
        individual_stock_data = []
        for security_data in history_k_data:
            if security_data is None:
                continue
            stock_date = datetime.strptime(security_data.get('date'), '%Y-%m-%d').date()
            stock_vals = self.prepare_history_individual_stock_vals(security_data)
            stock_vals.update({
                'stock_id': stock_id.id,
                'stock_date': stock_date,
            })
            individual_stock_data.append(stock_vals)
        self.env['individual.stock'].create(individual_stock_data)
        end = timeit.default_timer()
        logging.info('获取历史股票行情, 第%s页,总计条数:%s, 总计用时:%s', page, len(individual_stock_data),
                     end - start)
### 使用 PyTDX 获取和处理历史逐笔成交数据 PyTDX 是一个用于获取中国股票市场实时行情、K线数据以及逐笔成交数据的 Python 庢库。以下是关于如何使用 PyTDX获取和处理历史逐笔成交数据的具体方法。 #### 安装依赖 在开始之前,需要安装 `pytdx` 库。可以通过以下命令完成安装: ```bash pip install pytdx ``` #### 数据获取与处理示例代码 下面是一个完整的示例代码,展示如何通过 PyTDX 获取某只股票的历史逐笔成交数据,并对其进行简单的分析: ```python from pytdx.hq import TdxHq_API, TDXParams import pandas as pd # 初始化 API 对象 api = TdxHq_API() try: # 连接到服务器 if api.connect('119.147.212.81', 7709): # 替换为可用的 IP 和端口 stock_code = '600519' # 股票代码,例如贵州茅台 market_id = TDXParams.MARKET_SH if stock_code.startswith(('5', '6', '9')) else TDXParams.MARKET_SZ # 获取指定日期的逐笔成交数据 date = 20231010 # 格式 YYYYMMDD data = api.get_transaction_data(market=market_id, code=stock_code, start=0, count=8000, date=date) # 断开连接 api.disconnect() if not data: print(f"未能获取 {stock_code} 的逐笔成交数据") else: df = pd.DataFrame(data) # 列名映射以便于理解 column_mapping = { 'price': '价格', 'volume': '成交量(股)', 'direction': '买卖方向', 'hour': '时间' } df.rename(columns=column_mapping, inplace=True) # 时间转换 df['时间'] = df['时间'].apply(lambda x: f"{date}{str(x).zfill(6)}") # 补全时间为YYYYMMDDHHmmss格式 df['时间'] = pd.to_datetime(df['时间'], format='%Y%m%d%H%M%S') # 输出前几条记录查看结果 print(df.head()) except Exception as e: print(f"发生错误:{e}") finally: if api.is_connected(): api.disconnect() ``` 上述代码实现了以下几个功能: - **初始化 API 并建立连接**[^1]。 - **设置目标市场的 ID**(区分上证和深证)[^2]。 - **调用 `get_transaction_data` 方法来获取逐笔成交数据**[^3]。 - 将返回的数据转化为 Pandas DataFrame 方便后续操作。 - 映射列名为更易读的形式,并对时间字段进行了标准化处理。 #### 关键点说明 1. **IP 地址的选择** 需要选择合适的前置机地址来进行数据请求。可以参考官方文档或其他资源寻找稳定的服务节点列表[^4]。 2. **参数解释** - `start`: 开始位置索引,默认从第 0 笔记录开始抓取。 - `count`: 单次最多能拉取的数量上限通常不超过 8000 条。 - `date`: 指定查询哪一天的数据,需按照整数形式传入 (如 20231010)。 3. **数据清洗** 原始数据中的某些字段可能不符合常规习惯,比如时间戳仅提供 HHMMSS 形式的数值,因此需要额外加工使其成为标准的时间序列对象。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值