通达信量化tdxquant快速开始第一个策略

按软件说明(步骤分解 | 通达信量化平台),运行第一个策略,出现问题小结如下:

一.找不到要导入的库文件,tqcenter.py,把通达信安装目录的这个文件粘贴到与"涨幅选"同一个目录下,又提示找不到TPythClient.dll,还是不行,又提示缺失依赖环境,tdxrpcx64.dll,都找到了,都复制到工作目录下了,还是不能运行.最终原因是用通达信安装目录下的位置里的这些,不要拷贝,拷贝了也没有用..

二.指定的板块,默认的是"通达信88",这是其系统自带的板块,可以直接用中文名,如果是自定义的板块,则必须用其简称,不能用汉字,只能用汉字的拼音首字母替代汉字.

说来简单,但也花了好长时间还是用cursor的agent帮助解决的.这个agent能力很强.比国产的DB要好用.

下面是原有涨幅选股.py修改后的内容:

# 策略说明:如果运行时间点价格高出昨收5%, 则进入涨幅选股板块,否则清空该板块
import sys
from pathlib import Path

# 必须使用通达信安装目录下的 tqcenter(DLL/配置在 PYPlugins 内),勿用项目内拷贝
TDX_USER = Path(r'E:\zd_itrend_138\PYPlugins\user')
sys.path.insert(0, str(TDX_USER))

import pandas as pd
import numpy as np
from datetime import datetime
from tqcenter import tq

# 初始化tq(需先启动并登录通达信客户端)
tq.initialize(__file__)

# 1. 基础配置
# 自定义板块须传「简称代码」+ block_type=1(中文名无效)
# 「我的国度260813」对应简称:WDGD260813
sector_code = 'WDGD260813'
batch_codes = tq.get_stock_list_in_sector(sector_code, block_type=1)
if not batch_codes:
    tq.close()
    raise RuntimeError(
        f"板块「{sector_code}」成分股为空。自定义板块请用简称代码且 block_type=1;"
        "并确认通达信已登录且该板块有成分股。"
    )
print(f"股票池「{sector_code}」: {len(batch_codes)} 只")
start_time = "20251025"                                  # 数据起始日期
target_end = datetime.now().strftime("%Y%m%d")           # 数据结束日期(当前日期)
target_gain = 5.0                                        # 目标涨幅(%),可修改
target_block_name = 'ZFXG'                               # 目标自定义板块简称

# 2. 获取并整理收盘价数据
df_real = tq.get_market_data(
    field_list=['Close'],
    stock_list=batch_codes,
    start_time=start_time,
    end_time=target_end,
    dividend_type='front',  # 前复权
    period='1d',            # 日线
    fill_data=True          # 填充缺失数据
)
# 转换为「日期×股票代码」的收盘价宽表
close_df = tq.price_df(df_real, 'Close', column_names=batch_codes)

# 3. 核心:计算当日相较于昨日的涨幅(%)
# 昨日收盘价(向下平移1行)
prev_close = close_df.shift(1)
# 计算涨幅:(当日收盘价 - 昨日收盘价) / 昨日收盘价 × 100%
daily_gain = (close_df - prev_close) / prev_close * 100

# 4. 筛选符合条件的股票(最新交易日涨幅超target_gain%)
latest_date = daily_gain.index[-1]              # 最新交易日
latest_daily_gain = daily_gain.loc[latest_date] # 每只股票最新交易日的涨幅
# 筛选条件:涨幅 > target_gain%(排除NaN,避免数据异常)
target_stocks = latest_daily_gain[latest_daily_gain > target_gain].sort_values(ascending=False)
target_stocks_list = target_stocks.index.tolist()  # 提取符合条件的股票代码列表

# 5. 结果输出与自定义板块操作(可按需注释)
print(f"\n=== 筛选结果(交易日 {latest_date.strftime('%Y-%m-%d')},涨幅>{target_gain}%)===")
print(f"板块股票数: {len(batch_codes)},当日最高涨幅: {latest_daily_gain.max():.2f}%")
if not target_stocks.empty:
    # ===================== 模块1:打印筛选结果 =====================
    print("【模块1:打印筛选结果】")
    print(f"符合条件的股票共 {len(target_stocks)} 只:")
    print(f"{'股票代码':<12} {'昨日收盘价':<12} {'当日收盘价':<12} {'当日涨幅':<10}")
    print("-" * 50)
    for stock_code, gain in target_stocks.items():
        prev_price = prev_close.loc[latest_date, stock_code]
        curr_price = close_df.loc[latest_date, stock_code]
        print(f"{stock_code:<12} {prev_price:<12.2f} {curr_price:<12.2f} {gain:<.2f}%")
    print("-" * 50)

    # ===================== 模块2:添加至自定义板块 =====================
    try:
        print("【模块2:自定义板块操作】")
        tq.send_user_block(block_code=target_block_name, stock_list=target_stocks_list, show=True)
        print(f"✅ 已成功将股票添加至自定义板块「{target_block_name}」")
    except Exception as e:
        print(f"❌ 添加自定义板块失败:{e}")
    print("-" * 50)



else:
    # ===================== 模块1:打印空结果 =====================
    print("【模块1:打印筛选结果】")
    print(f"暂无当日涨幅>{target_gain}%的股票")
    print("-" * 50)

    # ===================== 模块2:清空自定义选板块 =====================
    try:
        print("【模块2:自定义板块操作】")
        tq.send_user_block(block_code=target_block_name, stock_list=[], show=True)
        print(f"✅ 已清空自定义板块「{target_block_name}」")
    except Exception as e:
        print(f"❌ 清空自定义板块失败:{e}")
    print("-" * 50)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值