3-3、UDF
最后更新于
最后更新于
这是啥?: Universal Data Feed 通用数据反馈,基于HTTP协议的旨在以简单有效的方式向图表库提供数据。 我该怎么使用它?: 您应该创建小型的HTTP服务,让它从您的数据库中获取数据并响应图表库请求。
Datafeed 响应通常可以被视为表。例如,关于交易所的商品列表的响应,可以被视为每个商品代表一行,并有存在一些列(minimal_price_movement,description,has_intraday等)。每个列可以是一个数组(因此,它将为每个表的行提供单独的值)。但是当所有表的行具有相同的列值时,可能会出现这种情况:列的值可以是单独的JSON响应。
例如:
让我们假设我们已经请求了名称为NYSE(纽约证券交易所)的商品列表。响应(伪格式)可能像这样
如果我们试图将这个回应设想成一张表,那么它就像这样
Symbol(商品代码) | min_price_move(最小价格变动) | 描述 |
---|---|---|
Request:GET /config
Response: 图表库期望接收与JS API调用setup()相同结构的JSON数据。 此外,还应该有2个附加属性::
supports_search: 设置这一选项为true
如果你的datafed 支持商品查询和人商品解析逻辑。
supports_group_request: 设置这一选项为true
如果您的datafeed只提供所有商品集合的完整信息,并且无法进行商品搜索或单个商品解析。
supports_search
和supports_group_request
两者之中有只有一个可以为true
。
Remark: 如果你的datafeed 没有实现这个调用(根本不响应或发送404),将使用默认配置。 这样::
Request:GET /symbol_info?group=<group_name>
group_name
: string
Example:GET /symbol_info?group=NYSE
Response: 预期响应是具有以下列出的属性的对象。 每个属性都被视为表的一列,如上所述(请参见表式响应)。响应结构与SymbolInfo类似(但不等于),因此有关所有字段的详细信息,请参见其描述。
symbol
description
exchange-listed/exchange-traded
minmovement/minmov(注意:minmov已被弃用,并将在未来的版本中被删除)
minmovement2/minmov2(注意:minmov2已被弃用,并将在未来的版本中被删除)
fractional
pricescale
has-intraday
has-no-volume
type
ticker
timezone
session-regular(映射到SymbolInfo.session
)
session-holidays
corrections
supported-resolutions
force-session-rebuild
has-daily
intraday-multipliers
has-fractional-volume(过时的)
volume_precision
has-weekly-and-monthly
has-empty-bars
示例:以下是对datafeed的响应示例GET /symbol_info?group=NYSE
(数据为手工制造):
Remark 1: 如果您的datafeed配置supports_group_request:true或根本没有响应配置请求,则将使用此调用。
Remark 2: 如果您的datafeed 被请求不支持的集合(如果您对请求#1(支持的集合)的响应是正确的),则会发生404错误)。
Remark 3: 使用此模式(获取大量的商品数据)在浏览器中存储一些用户不需要的数据。 因此,如果您的商品列表有多个项目,请考虑支持商品搜索/单个商品解析。
Request:GET /symbols?symbol=<symbol>
symbol
: string. 商品名称或者代码.
例:GET /symbols?symbol=AAL
,GET /symbols?symbol=NYSE:MSFT
Response: JSON包含的对象与SymbolInfo完全一样
Remark: 如果您的datafeed配置supports_group_request:false 和 supports_search:true,则将执行此调用。
Request:GET /search?query=<query>&type=<type>&exchange=<exchange>&limit=<limit>
query
: string. 用户在商品搜索编辑框中输入的文本
type
: string. 您的后台支持的类型之一
exchange
: string. 您的后台支持的交易所之一
limit
: integer. 响应最大项目数
例:GET /search?query=AA&type=stock&exchange=NYSE&limit=15
Response: 响应将是调用JS API后返回的一个数组类型的商品记录
Remark: 如果您的datafeed配置supports_group_request:false 和 supports_search:true,则将执行此调用。
Request: GET /history?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&resolution=<resolution>&countback=<countback>
symbol
: 商品ID
from
: unix timestamp (UTC) 最左侧所需K线的 unix 时间戳
to
: unix timestamp (UTC) 最右边的所需K线(不包括在内)
resolution
: string
countback
: 以 to
开头的k线(优先级高于 from
)。 如果设置了 countback
,则应该忽略 from
。
例: GET /history?symbol=BEAM~0&resolution=D&from=1386493512&to=1395133512&countback=500
Response: 响应的预期是一个对象,下面列出了一些属性。每个属性都被视为表的列,如上所述。
s: 状态码。 预期值:ok
|error
|no_data
errmsg: 错误消息。只在s = 'error'时出现
t: K线时间. unix时间戳 (UTC)
c: 收盘价
o: 开盘价 (可选)
h: 最高价 (可选)
l: 最低价(可选)
v: 成交量 (可选)
nextTime: 下一个K线柱的时间 如果在请求期间无数据 (状态码为no_data
) (可选)
Remark: bar time 对于日K线时间应以 00:00 UTC为起点。 图表库会根据SymbolInfo的Session来对齐时间。
Remark: K线时间对于月K线柱为这个月的第一个交易日,除去时间的部分。
Remark: 价格应作为数字传递,而不是使用字符串。
例:
nextTime
是怎么工作的
假设您以周期= 1观看图表,并且Library要求您以[2015年4月3日16:00 UTC + 0,2015年4月3日19:00 UTC + 0]为范围,向纽约证券交易所请求股票数据。 4月3日为受难节,交易所休假。 Library假定你会作出如下响应:
因此nextTime
是一个从Library的原始请求边界的左侧(在假想时间线上)的K线柱时间。
所有省略的价格将被视为等于收盘价。
Request:GET /marks?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&resolution=<resolution>
symbol
: symbol name or ticker.
from
: unix timestamp (UTC) or leftmost visible bar
to
: unix timestamp (UTC) or rightmost visible bar
resolution
: string
Response: 响应预期是一个对象,下面列出了一些属性。此对象与JS API中的respective response相似,但每个属性都被视为表的列,如上所述。
Remark: 备注:如果您的datafeed在传输的配置数据中发送了supports_marks:true,则会调用此方法。
Request:GET /timescale_marks?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&resolution=<resolution>
symbol
: symbol name or ticker.
from
: unix timestamp (UTC) or leftmost visible bar
to
: unix timestamp (UTC) or rightmost visible bar
resolution
: string
Response: 响应预期为一个具有下列属性的数组对象。
id
: unique identifier of a mark
color
: rgba color
label
: 显示在圆圈中的文字
time
: unix time
tooltip
: 提示文本
Remark: This call will be requested if your datafeed sentsupports_timescale_marks: true
in configuration data.
Request:GET /time
Response: 数字unix时间没有毫秒。 例: 1445324591
Request:GET /quotes?symbols=<ticker_name_1>,<ticker_name_2>,...,<ticker_name_n>
Example:GET /quotes?symbols=NYSE%3AAA%2CNYSE%3AF%2CNasdaqNM%3AAAPL
Response: Response is an object.
s: status code for request. Expected values:ok
|error
errmsg: error message for client
d:symbols data array
Example:
Datafeeds.UDFCompatibleDatafeed = function(datafeedURL, updateFrequency, protocolVersion)
这是一个数据服务器的URL,它将得到请求和返回数据。
这是一个有周期的实时数据请求,datafeed将以毫秒为单位发送到服务器。 默认值为10000(10秒)。
MSFT
0.1
Microsoft corp.
AAPL
0.1
Apple Inc
FB
0.1
GOOG
0.1