You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需Excel,如何将DDE数据导入Pandas DataFrame?

不借助Excel将DDE数据导入Pandas DataFrame

要直接从DARTSCRDE DDE服务器获取数据并导入Pandas DataFrame,无需经过Excel,可通过Python的DDE客户端库实现,以下是具体方案:

核心思路

直接与DARTSCRDE DDE服务器建立通信,按照你提供的DDE链接格式(=DARTSCRDE|{TOPIC}!'{ID}'),批量获取指定合约的字段数据,最后组装成DataFrame。

步骤实现

1. 依赖库安装

使用pywin32库提供的DDE客户端能力,先安装依赖:

pip install pywin32 pandas

2. 完整代码示例

import win32com.client
import pandas as pd

# 定义需要获取的合约信息:(合约代码, 交易所, DDE标识ID)
contracts = [
    ("NIFTY23JUN18500CE", "NSE", "2060225_0"),
    ("NIFTY23JUN18500PE", "NSE", "2060226_0")
]

# 字段名与DDE主题的映射,对应你Excel中的列
field_mapping = {
    "LTP": "SYMBOL_TPRICE",
    "Qty.": "SYMBOL_VOLUME",
    "Chg": "SYMBOL_CHANGE",
    "% Chg": "SYMBOL_CHANGEPC",
    "Bid Qty": "SYMBOL_BIDQTY",
    "Bid": "SYMBOL_BID",
    "Ask": "SYMBOL_ASK",
    "Ask Qty": "SYMBOL_ASKQTY",
    "Total Bid": "SYMBOL_TOTBID",
    "Total Ask": "SYMBOL_TOTASK",
    "Open": "SYMBOL_OPEN",
    "P.Close": "SYMBOL_CLOSE",
    "Low": "SYMBOL_LOW",
    "High": "SYMBOL_HIGH",
    "T.Volume": "SYMBOL_TOTVOL",
    "Strike Price": "StrikePrice",
    "Exp. Date": "ExpDate"
}

# 存储所有合约数据的列表
data_records = []

for symbol, exchange, dde_id in contracts:
    # 初始化当前合约的基础数据
    record = {
        "Symbol": symbol,
        "Name": "",  # 示例中该字段为空,可根据实际补充
        "XCH": exchange
    }
    
    # 遍历每个字段,从DDE服务器获取数据
    for field_name, dde_topic in field_mapping.items():
        try:
            # 建立DDE客户端连接并请求数据
            dde_client = win32com.client.DDEClient("DARTSCRDE", dde_topic)
            raw_value = dde_client.Request(dde_id)
            
            # 尝试转换数据类型(数值型转成对应类型,非数值保持字符串)
            try:
                if "." in raw_value:
                    record[field_name] = float(raw_value)
                else:
                    record[field_name] = int(raw_value)
            except ValueError:
                record[field_name] = raw_value
                
        except Exception as e:
            print(f"获取{symbol}的{field_name}字段失败: {str(e)}")
            record[field_name] = None
    
    data_records.append(record)

# 转换为Pandas DataFrame
df = pd.DataFrame(data_records)
# 按原始列顺序调整DataFrame列顺序
df = df[["Symbol", "Name", "XCH", "LTP", "Qty.", "Chg", "% Chg", "Bid Qty", "Bid", "Ask", "Ask Qty", "Total Bid", "Total Ask", "Open", "P.Close", "Low", "High", "T.Volume", "Strike Price", "Exp. Date"]]

print(df)

关键注意事项

  • 确保提供DARTSCRDE服务的行情软件已启动,且DDE功能处于开启状态
  • DDE是Windows专属协议,此方案仅适用于Windows环境
  • 若win32com.client.DDEClient调用报错,可尝试改用win32com.client.Dispatch实现更底层的DDE通信
  • 数据类型转换逻辑可根据实际返回的数据格式调整(比如日期字段可能需要用datetime解析)

内容的提问来源于stack exchange,提问作者albee gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:07:11