maomomo-eth/tradingview-php-sdk 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

maomomo-eth/tradingview-php-sdk

Composer 安装命令:

composer require maomomo-eth/tradingview-php-sdk

包简介

TradingView Scanner 非官方接口 PHP SDK

README 文档

README

这是一个针对 TradingView Scanner 前端接口整理出来的 PHP SDK。它覆盖我们刚才分析过的几类接口:

  • /symbol:查询单个标的的价格、表现、技术评级、右侧详情字段。
  • /symbol_search/v3/:按关键词搜索 TradingView 标的,拿到 full_name 后可继续查询报价。
  • /{market}/scan:按标的列表或筛选条件批量查询 Scanner 数据。
  • /forex/scan?label-product=related-symbols:查询外汇相关标的。

重要说明:这些接口属于 TradingView 前端 Scanner 使用的非正式接口,不是 TradingView 官方承诺稳定的公开行情 API。请自用或低频使用,并做好缓存、重试、字段缺失兼容。不要在代码里写入 sessionidsessionid_sign 等登录 Cookie。

安装

通过 Composer 安装:

composer require maomomo-eth/tradingview-php-sdk

源码仓库:

git clone https://github.com/maomomo-eth/TradingView-PHP-SDK.git

也可以直接手动引入:

require __DIR__ . '/src/TradingViewException.php';
require __DIR__ . '/src/FieldGroups.php';
require __DIR__ . '/src/TradingViewClient.php';

快速开始

use TradingView\TradingViewClient;

$client = new TradingViewClient();

$quote = $client->getSymbolQuote('IBKR:CNHHKD');
print_r($quote);

运行内置示例:

cd php/examples
php .\basic.php

如果直连 TradingView 超时,可以通过环境变量或命令行参数传入代理:

$env:TRADINGVIEW_PROXY = "http://127.0.0.1:7890"
php .\basic.php

php .\basic.php socks5://127.0.0.1:1080

客户端配置

$client = new TradingViewClient([
    'base_url' => 'https://scanner.tradingview.com',
    'symbol_search_base_url' => 'https://symbol-search.tradingview.com',
    'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
    'origin' => 'https://cn.tradingview.com',
    'referer' => 'https://cn.tradingview.com/',
    'timeout' => 20,
    'connect_timeout' => 10,
    'verify_ssl' => true,
    'proxy' => null, // 支持字符串单代理或数组代理池
    'headers' => [],
]);
参数 类型 必填 默认值 说明
base_url string https://scanner.tradingview.com Scanner 接口基础地址
symbol_search_base_url string https://symbol-search.tradingview.com 标的搜索接口基础地址
user_agent string 内置浏览器 UA 请求 User-Agent
origin string https://cn.tradingview.com 请求 Origin
referer string https://cn.tradingview.com/ 请求 Referer
timeout int 20 总超时时间,单位秒
connect_timeout int 10 连接超时时间,单位秒
verify_ssl bool true 是否校验 SSL 证书
proxy string|array null null
headers array [] 默认额外请求头

代理配置

proxy 支持三种写法:

  1. 不配置或传 null:直连 TradingView。
  2. 传字符串:使用单个代理,兼容旧版写法。
  3. 传数组:使用代理池,可选择均衡模式或主备模式。

单代理示例:

$client = new TradingViewClient([
    'proxy' => 'http://127.0.0.1:7890',
]);

$client = new TradingViewClient([
    'proxy' => 'https://127.0.0.1:7890',
]);

$client = new TradingViewClient([
    'proxy' => 'socks5://127.0.0.1:1080',
]);

$client = new TradingViewClient([
    'proxy' => 's5://127.0.0.1:1080',
]);

代理地址支持带用户名密码:

http://user:pass@127.0.0.1:7890
https://user:pass@127.0.0.1:7890
socks5://user:pass@127.0.0.1:1080
s5://user:pass@127.0.0.1:1080

s5://socks5:// 的简写,SDK 会自动归一化。SOCKS5/S5 和 HTTPS 代理需要 PHP cURL 扩展;没有 cURL 扩展时,SDK 仅支持 HTTP 代理。

均衡模式适合多个等价代理节点分摊请求:

$client = new TradingViewClient([
    'proxy' => [
        'mode' => 'balance',
        'proxies' => [
            'http://127.0.0.1:7890',
            'http://127.0.0.1:7891',
            'socks5://127.0.0.1:1080',
        ],
    ],
]);

主备模式会优先使用主代理;主代理不可用时,再切换到备用代理:

$client = new TradingViewClient([
    'proxy' => [
        'mode' => 'failover',
        'primary' => 'http://127.0.0.1:7890',
        'backup' => [
            'socks5://127.0.0.1:1080',
            'http://127.0.0.1:7891',
        ],
    ],
]);
类型 必填 适用模式 说明
mode string 代理池 balance 表示均衡模式,failover 表示主备模式
proxies string[] balance 可用代理地址列表
primary string failover 主代理地址
backup string[] failover 备用代理地址列表,按配置顺序尝试

mode 也兼容 balancedround_robinround-robin均衡 以及 primary_backupprimary-backupbackup主备 等别名。

常用字段

报价字段

name, description, close, bid, ask, change, change_abs, update_mode

表现字段

change, Perf.5D, Perf.W, Perf.1M, Perf.6M, Perf.YTD, Perf.Y, Perf.5Y, Perf.10Y, Perf.All

技术评级字段

Recommend.Other, Recommend.All, Recommend.MA

右侧详情字段

price_52_week_high, price_52_week_low, sector, country, market, Low.1M, High.1M,
Perf.W, Perf.1M, Perf.3M, Perf.6M, Perf.Y, Perf.YTD, Recommend.All,
average_volume_10d_calc, average_volume_30d_calc, nav_discount_premium,
open_interest, country_code_fund, iv, underlying_symbol, delta, gamma, rho,
theta, vega, theoPrice

方法文档

__construct(array $options = [])

创建客户端。

入参:

参数 类型 必填 说明
$options array 客户端配置,字段见“客户端配置”

出参:

类型 说明
TradingViewClient 客户端实例

异常:

异常 说明
TradingViewException headers 配置不是数组时抛出

searchSymbols(string $text, array $options = []): array

搜索 TradingView 标的,对应:

GET https://symbol-search.tradingview.com/symbol_search/v3/

适合按用户输入搜索股票、加密货币、外汇等标的。返回结果中的 full_name 通常可以直接作为后续 getSymbolQuotescanSymbols 的标的代码,例如 BINANCE:BTCUSDTNASDAQ:AAPLOANDA:EURUSD

入参:

参数 类型 必填 说明
$text string 搜索关键词,例如 BTCAAPLEURUSD
$options array 可选参数

$options

类型 必填 默认值 说明
exchange string '' 交易所过滤,例如 BINANCENASDAQOANDA,空字符串表示不限
search_type string null undefined
type string null
lang string zh 返回语言
hl bool|int|string true 是否高亮命中,默认会传 hl=1
domain string production TradingView 域环境
enable_grouping bool|string true 是否启用分组
sort_by_country string null CN
promo bool|string true 是否返回推广结果
extra_query array [] 额外查询参数,最后合并,可覆盖默认参数
headers array [] 本次请求额外请求头

出参:

类型 说明
array TradingView 标的搜索原始 JSON 解码结果

示例:

$results = $client->searchSymbols('BTC', [
    'search_type' => 'crypto',
    'exchange' => 'BINANCE',
    'lang' => 'zh',
]);

foreach ($results as $item) {
    echo ($item['full_name'] ?? '') . PHP_EOL;
}

getSymbolFields(string $symbol, array $fields, array $options = []): array

查询单个标的的指定字段,对应:

GET https://scanner.tradingview.com/symbol

入参:

参数 类型 必填 说明
$symbol string TradingView 标的代码,例如 IBKR:CNHHKDOANDA:EURUSD
$fields string[] 字段名列表,例如 closebidaskPerf.1M
$options array 可选参数

$options

类型 必填 默认值 说明
no_404 bool true 找不到标的时是否避免 HTTP 404
label_product string null 不传
headers array [] 本次请求额外请求头

出参:

类型 说明
array TradingView 原始 JSON 解码结果;字段由 TradingView 返回决定

示例:

$data = $client->getSymbolFields('IBKR:CNHHKD', [
    'name',
    'description',
    'close',
    'bid',
    'ask',
]);

getSymbolQuote(string $symbol, array $fields = FieldGroups::QUOTE_FIELDS, array $options = []): array

查询单个标的当前报价。

入参:

参数 类型 必填 默认值 说明
$symbol string TradingView 标的代码
$fields string[] FieldGroups::QUOTE_FIELDS 报价字段列表
$options array [] 透传给 getSymbolFields

出参:

类型 说明
array 单标的报价原始返回

默认字段:

name, description, close, bid, ask, change, change_abs, update_mode

getSymbolDetails(string $symbol, array $fields = FieldGroups::DETAIL_FIELDS, array $options = []): array

查询单个标的右侧详情字段。

入参:

参数 类型 必填 默认值 说明
$symbol string TradingView 标的代码
$fields string[] FieldGroups::DETAIL_FIELDS 详情字段列表
$options array [] 透传给 getSymbolFields

出参:

类型 说明
array 单标的详情原始返回

getSymbolPerformance(string $symbol, array $fields = FieldGroups::PERFORMANCE_FIELDS, array $options = []): array

查询单个标的周期表现。

入参:

参数 类型 必填 默认值 说明
$symbol string TradingView 标的代码
$fields string[] FieldGroups::PERFORMANCE_FIELDS 表现字段列表
$options array [] 透传给 getSymbolFields

出参:

类型 说明
array 单标的表现原始返回

字段含义:

字段 说明
change 当日涨跌幅
Perf.5D 5 日表现
Perf.W 周表现
Perf.1M 1 个月表现
Perf.6M 6 个月表现
Perf.YTD 年初至今表现
Perf.Y 1 年表现
Perf.5Y 5 年表现
Perf.10Y 10 年表现
Perf.All 全历史表现

getSymbolTechnicals(string $symbol, array $fields = FieldGroups::TECHNICAL_FIELDS, array $options = []): array

查询单个标的技术评级。

入参:

参数 类型 必填 默认值 说明
$symbol string TradingView 标的代码
$fields string[] FieldGroups::TECHNICAL_FIELDS 技术评级字段列表
$options array [] 透传给 getSymbolFields

出参:

类型 说明
array 单标的技术评级原始返回

字段含义:

字段 说明
Recommend.Other 振荡指标综合建议
Recommend.MA 移动平均线综合建议
Recommend.All 总体技术评级

评级数值通常在 -11 之间,可用 convertRecommendValue 转成文字。

scan(string $market, array $payload, ?string $labelProduct = null, array $options = []): array

调用通用 Scanner 批量筛选接口,对应:

POST https://scanner.tradingview.com/{market}/scan

入参:

参数 类型 必填 说明
$market string 市场路径,例如 forexcryptoamericahongkong
$payload array POST JSON 请求体
$labelProduct string null
$options array 可选参数

$options

类型 必填 默认值 说明
headers array [] 本次请求额外请求头

出参:

类型 说明
array Scanner 原始返回,通常包含 totalCountdata

常见返回:

{
  "totalCount": 1,
  "data": [
    {
      "s": "OANDA:EURUSD",
      "d": ["EURUSD", "EUR/USD", 1.15674]
    }
  ]
}

scanSymbols(string $market, array $tickers, array $columns, array $options = []): array

按标的列表批量查询字段。

入参:

参数 类型 必填 说明
$market string 市场路径,例如 forex
$tickers string[] 标的列表,例如 OANDA:EURUSD
$columns string[] 返回字段列表;返回 data[].d 顺序与此一致
$options array 可选参数

$options

类型 必填 默认值 说明
range int[] [0, count($tickers)] 返回范围
types array [] symbols.query.types
label_product string null null
sort array null null
ignore_unknown_fields bool 不传 是否忽略未知字段
lang string 不传 返回语言,例如 zh
headers array [] 本次请求额外请求头

出参:

类型 说明
array Scanner 原始返回,通常包含 totalCountdata

示例:

$columns = ['name', 'description', 'close', 'bid', 'ask'];
$data = $client->scanSymbols('forex', ['OANDA:EURUSD'], $columns);

查询美股:

$columns = ['name', 'description', 'close', 'change', 'change_abs', 'volume', 'market_cap_basic'];
$scan = $client->scanSymbols('america', ['NASDAQ:AAPL', 'NASDAQ:MSFT', 'NASDAQ:TSLA'], $columns, [
    'lang' => 'zh',
]);
$rows = $client->mapScanRows($scan, $columns);
print_r($rows);

查询加密货币:

$columns = ['name', 'description', 'close', 'change', 'change_abs', 'volume', '24h_vol_cmc'];
$scan = $client->scanSymbols('crypto', ['BINANCE:BTCUSDT', 'BINANCE:ETHUSDT'], $columns, [
    'lang' => 'zh',
]);
$rows = $client->mapScanRows($scan, $columns);
print_r($rows);

getForexQuotes(array $tickers, array $columns = FieldGroups::QUOTE_FIELDS, array $options = []): array

批量查询外汇报价,是 scanSymbols('forex', ...) 的快捷方法。

入参:

参数 类型 必填 默认值 说明
$tickers string[] 外汇标的列表,例如 OANDA:EURUSDFX_IDC:USDCNH
$columns string[] FieldGroups::QUOTE_FIELDS 返回字段列表
$options array [] 透传给 scanSymbols

出参:

类型 说明
array Scanner 原始返回,通常包含 totalCountdata

scanForexRelatedSymbols(string $currencyId, string $excludeName, array $counterCurrencies = [...], string $exchange = 'FX_IDC', array $columns = FieldGroups::RELATED_SYMBOL_COLUMNS, int $limit = 11, array $options = []): array

查询与指定外汇货币相关的标的,复刻 label-product=related-symbols 的请求逻辑。

入参:

参数 类型 必填 默认值 说明
$currencyId string TradingView 货币 ID,例如离岸人民币是 XTVCNH
$excludeName string 需要排除的标的名称,例如 CNHHKD
$counterCurrencies string[] ['USD','EUR','JPY','GBP','CHF','CNY'] 相关货币范围
$exchange string FX_IDC 数据源或交易所
$columns string[] FieldGroups::RELATED_SYMBOL_COLUMNS 返回字段列表
$limit int 11 返回数量上限
$options array [] 可选参数

$options

类型 必填 默认值 说明
lang string zh 返回语言
label_product string null related-symbols
headers array [] 本次请求额外请求头

出参:

类型 说明
array Scanner 原始返回,通常包含 totalCountdata

示例:

$columns = ['name', 'type', 'exchange', 'description', 'close'];
$data = $client->scanForexRelatedSymbols(
    'XTVCNH',
    'CNHHKD',
    ['USD', 'EUR', 'JPY', 'GBP', 'CHF', 'CNY'],
    'FX_IDC',
    $columns
);

筛选逻辑:

type = forex
exchange = FX_IDC
name != CNHHKD

并且:
currency_id = XTVCNH 且 base_currency_id 在 USD/EUR/JPY/GBP/CHF/CNY 内
或:
base_currency_id = XTVCNH 且 currency_id 在 USD/EUR/JPY/GBP/CHF/CNY 内

mapScanRows(array $response, array $columns): array

把 Scanner 返回的 data[].d 数组映射成字段名。

入参:

参数 类型 必填 说明
$response array scanscanSymbolsgetForexQuotes 等方法的原始返回
$columns string[] 请求时使用的 columns,顺序必须一致

出参:

类型 说明
array[] 映射后的行数组

返回行结构:

类型 说明
symbol string null
raw array 原始 d 数组
其他字段名 mixed $columns 映射后的字段值

示例:

$columns = ['name', 'description', 'close'];
$scan = $client->scanSymbols('forex', ['OANDA:EURUSD'], $columns);
$rows = $client->mapScanRows($scan, $columns);

convertRecommendValue(float|int|null $value): string

把技术评级数值转换成英文建议文本。

入参:

参数 类型 必填 说明
$value float|int|null Recommend.* 字段值

出参:

类型 说明
string Strong SellSellNeutralBuyStrong BuyN/A

转换规则:

数值范围 返回文本
null N/A
<= -0.5 Strong Sell
> -0.5 且 <= -0.1 Sell
> -0.1 且 < 0.1 Neutral
>= 0.1 且 < 0.5 Buy
>= 0.5 Strong Buy

错误处理

所有请求错误、HTTP 非 2xx、JSON 解码错误都会抛出:

TradingView\TradingViewException

示例:

try {
    $data = $client->getSymbolQuote('IBKR:CNHHKD');
} catch (TradingView\TradingViewException $e) {
    echo $e->getMessage();
}

我们刚才分析过的接口总结

标的搜索

GET https://symbol-search.tradingview.com/symbol_search/v3/?text=BTC&hl=1&exchange=&lang=zh&search_type=undefined&domain=production&enable_grouping=true&sort_by_country=CN&promo=true

适合搜索 TradingView 可识别的股票、加密货币、外汇等标的。生产环境建议缓存搜索结果,并优先保存 full_name 作为后续报价查询用的最终标识。

单标的价格与详情

GET https://scanner.tradingview.com/symbol?symbol=IBKR%3ACNHHKD&fields=name,description,close,bid,ask,change,change_abs,update_mode&no_404=true

适合查单个 symbol 的当前价、买价、卖价、涨跌幅、右侧详情字段。

单标的表现

GET https://scanner.tradingview.com/symbol?symbol=IBKR%3ACNHHKD&fields=change,Perf.5D,Perf.W,Perf.1M,Perf.6M,Perf.YTD,Perf.Y,Perf.5Y,Perf.10Y,Perf.All&no_404=true&label-product=symbols-performance

适合查当日、5 日、周、月、年初至今、1 年、5 年、10 年、全历史表现。

单标的技术评级

GET https://scanner.tradingview.com/symbol?symbol=IBKR%3ACNHHKD&fields=Recommend.Other,Recommend.All,Recommend.MA&no_404=true&label-product=symbols-technicals

适合查振荡指标、移动平均线、总体技术评级。

批量报价

POST https://scanner.tradingview.com/forex/scan
POST https://scanner.tradingview.com/america/scan
POST https://scanner.tradingview.com/crypto/scan

请求体示例:

{
  "symbols": {
    "tickers": ["OANDA:EURUSD"],
    "query": {
      "types": []
    }
  },
  "columns": ["name", "description", "close", "bid", "ask"],
  "range": [0, 1]
}

适合一次查询多个标的。常用市场路径包括 forex 外汇、america 美股、crypto 加密货币、hongkong 港股等。

相关外汇标的

POST https://scanner.tradingview.com/forex/scan?label-product=related-symbols

适合查与某个货币相关的一组外汇对,例如与 XTVCNH 相关的 USDCNHEURCNHCNHJPY 等。

注意事项

  • 不要把浏览器复制出来的 Cookie 写入 SDK,尤其是 sessionidsessionid_sign
  • searchSymbols 是搜索接口,不是全量标的下载接口;如果要初始化列表,建议按关键词或候选列表分批搜索并缓存。
  • label-product 主要表示 TradingView 页面模块来源,真正决定字段的是 fieldscolumns
  • /symbol 更适合单个标的;/{market}/scan 更适合批量查询和筛选。
  • Scanner 返回字段可能变化,生产环境应对缺失字段、空值、HTTP 失败做兼容。
  • 这不是官方稳定 API,频率过高可能失败或被限制。

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-12

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固