第四天:5天免费搭建个人量化平台 - 实时数据

第四天:5天免费搭建个人量化平台 - 实时数据

1、数据来源

现在市面有许多实时行情数据源,免费或低廉获取数据有不同途径:

(1)CTP方式:

	个人直接电话向交易账户的证券商的客服专员获取,一般1-2周可以获得系统 CTP主中心的公网IP地址、内网地址、交易端口、行情端口、brokeID、授权编码等信息。

	自行编程接口获取秒级行情数据,包括但不限于期货、期货期权、普通股票、融资融券、股票期权等,也能获取智能报单指令,例如特殊价格类型、金额报单、目标调仓、自动处理今仓和昨仓等等, 
   代码下载: https://download.csdn.net/download/weixin_41192839/20813659

(2)第三方API方式:

	a. 可使用第三方的SDK或开源代码(如AlgoPlus,PyTdx,VNPY)自行编程开发接口及数据解析,可以免费获取秒级行情数据。

	b. 市面有不少量化平台提供API提供日、月、年级别(免费)、或分钟级别(可能要收费,大约5k-20k每年不等)。如 

JQData: https://www.joinquant.com/help/api/help#name:JQData

RQData:https://www.ricequant.com/doc/rqdata/python/

2、数据处理和交互

图表库 是基于 JavaScript 编写的图表库,使用UDF时,自身具有直接获取数据服务器数据的能力,使用WS直接调用jsapi时,需要编写获取数据的前端代码。

支持数据的处理,一般是用 JavaScript 针对返回的 JSON 数据、字符串数据进行数组、对象的操作,最终转换成 图表库 需要的格式。

图表可以用两种方式接收数据:

使用推模型技术实时更新,例如通过WebSocket。这样你的图表将会自动更新价格。为了达到这个目的,必须使用JavaScript API并且准备好自己的传输方法。
使用拉模型/脉冲(pulse)/刷新为基础进行更新(如当今大多数基于Web的图表),其中图表数据每X秒更新一次(图表客户端将要求服务器模拟推模型更新),或者被用户手动重新加载。 为此,请使用UDF协议并编写自己的datafeed包装类。

Adog采用已经建立的HTTP服务,从已建立的数据库中获取数据并响应图表库请求。

3、数据配置

创建new TradingView.widget(xx)
datafeed属性,创建一个class

	datafeed: new Datafeeds.UDFCompatibleDatafeed("http://127.0.0.1:8001")

	"http://127.0.0.1:8001" 填写后台服务地址及端口

4. API调用

API文档源于:https://aitrade.ga/books/tradingview/book/UDF.html

Datafeed 配置数据

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),将使用默认配置。 这样::

{ supports_search: false, supports_group_request: true, supported_resolutions: [“1”, “5”, “15”, “30”, “60”, “1D”, “1W”, “1M”], supports_marks: false, supports_time: true }

商品集合信息

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(mapped toSymbolInfo.session)
supported-resolutions
force-session-rebuild
has-daily
intraday-multipliers
has-fractional-volume(obsolete)
volume_precision
has-weekly-and-monthly
has-empty-bars

示例:以下是对datafeed的响应示例GET /symbol_info?group=NYSE(数据为手工制造):

{ symbol: [“AAPL”, “MSFT”, “SPX”], description: [“Apple Inc”, “Microsoft corp”, “S&P 500 index”], exchange-listed: “NYSE”, exchange-traded: “NYSE”, minmov: 1, minmov2: 0, pricescale: [1, 1, 100], has-dwm: true, has-intraday: true, has-no-volume: [false, false, true] type: [“stock”, “stock”, “index”], ticker: [“AAPL~0”, “MSFT~0”, “$SPX500”], timezone: “America/New_York”, session-regular: “0900-1600”, }

Remark 1: 如果您的datafeed配置supports_group_request:true或根本没有响应配置请求,则将使用此调用。

Remark 2: 如果您的datafeed 被请求不支持的集合(如果您对请求#1(支持的集合)的响应是正确的),则会发生404错误)。

Remark 3: 使用此模式(获取大量的商品数据)在浏览器中存储一些用户不需要的数据。 因此,如果您的商品列表有多个项目,请考虑支持商品搜索/单个商品解析。

商品解析

Request:GET /symbols?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=&type=&exchange=&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,则将执行此调用。

K线柱

Request: GET /history?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&resolution=&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: 价格应作为数字传递,而不是使用字符串。

例:

{ s: “ok”, t: [1386493512, 1386493572, 1386493632, 1386493692], c: [42.1, 43.4, 44.3, 42.8] }

{ s: “no_data”, nextTime: 1386493512 }

{ s: “ok”, t: [1386493512, 1386493572, 1386493632, 1386493692], c: [42.1, 43.4, 44.3, 42.8], o: [41.0, 42.9, 43.7, 44.5], h: [43.0, 44.1, 44.8, 44.5], l: [40.4, 42.1, 42.8, 42.3], v: [12000, 18500, 24000, 45000] }

nextTime是怎么工作的

假设您以周期= 1观看图表,并且Library要求您以[2015年4月3日16:00 UTC + 0,2015年4月3日19:00 UTC + 0]为范围,向纽约证券交易所请求股票数据。 4月3日为受难节,交易所休假。 Library假定你会作出如下响应:

{ s: “no_data”, nextTime: 1428001140000 //2015年4月2日 18:59:00 GMT+0 }

因此nextTime是一个从Library的原始请求边界的左侧(在假想时间线上)的K线柱时间。

所有省略的价格将被视为等于收盘价。

标识

Request:GET /marks?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&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相似,但每个属性都被视为表的列,如上所述。

{ id: [array of ids], time: [array of times], color: [array of colors], text: [array of texts], label: [array of labels], labelFontColor: [array of label font colors], minSize: [array of minSizes], }

Remark: 备注:如果您的datafeed在传输的配置数据中发送了supports_marks:true,则会调用此方法。

时间刻度标记

Request:GET /timescale_marks?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&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: truein 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:

{ “s”: “ok”, “d”: [{ “s”: “ok”, “n”: “NYSE:AA”, “v”: { “ch”: “+0.16”, “chp”: “0.98”, “short_name”: “AA”, “exchange”: “NYSE”, “description”: “Alcoa Inc. Common”, “lp”: “16.57”, “ask”: “16.58”, “bid”: “16.57”, “open_price”: “16.25”, “high_price”: “16.60”, “low_price”: “16.25”, “prev_close_price”: “16.41”, “volume”: “4029041” } }, { “s”: “ok”, “n”: “NYSE:F”, “v”: { “ch”: “+0.15”, “chp”: “0.89”, “short_name”: “F”, “exchange”: “NYSE”, “description”: “Ford Motor Compan”, “lp”: “17.02”, “ask”: “17.03”, “bid”: “17.02”, “open_price”: “16.74”, “high_price”: “17.08”, “low_price”: “16.74”, “prev_close_price”: “16.87”, “volume”: “7713782” } }] }

构造函数

Datafeeds.UDFCompatibleDatafeed = function(datafeedURL, updateFrequency, protocolVersion)

datafeedURL

这是一个数据服务器的URL,它将得到请求和返回数据。

updateFrequency(更新频率)

这是一个有周期的实时数据请求,datafeed将以毫秒为单位发送到服务器。 默认值为10000(10秒)。

关注公众号"期权量化adog” 、知识星球"adog量化和AI", 下载相关资料/源码和数据。
http://adog.net.cn在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿岛格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值