-
Notifications
You must be signed in to change notification settings - Fork 43
Home
shinny-mayanqiong edited this page Aug 3, 2020
·
3 revisions
tqsdk-js 是一个基于 DIFF (Differential Information Flow for Finance) 协议 的开源 JavaScript 库。
旨在帮助用户快速构建基于 DIFF 协议 的 Web 应用 / Nodejs 应用。
项目案例:
-
开源的 HTML5 期货行情交易终端(移动端版本,基于 Angular1.x) 【演示地址】 【Github 项目地址】
-
开源的 WEB 期货行情交易终端(桌面版本,基于 Vue) 【演示地址】 【Github 项目地址】
- 加载文件
<script src="tqsdk.js"></script>
- 实例化 tqsdk
var tqsdk = new TQSDK();
- 基于 es6 开发,项目根目录下运行
npm install tqsdk
- 新建
src/mytqsdk.js
import TQSDK from 'tqsdk'
let mytqsdk = new TQSDK() // 全局只使用一份实例即可
/**
* some codes
*/
export default mytqsdk
- 其他文件中使用
import mytqsdk from 'src/mytqsdk'
mytqsdk.on('ready', function(){
console.log('合约信息准备完毕!')
})
初始化过程,包括:
- 初始化合约服务
- 建立 websocket 链接(行情、交易)
var tqsdk = new TQSDK({
reconnectInterval, // websocket 最大重连时间间隔 默认 3000
reconnectMaxTimes // websocket 最大重连次数 默认 5
})
// 全部使用默认参数
var tqsdk = new TQSDK()
-
version
-
brokers null | [] 交易所列表
-
isQuotesInfoReady boolean 合约服务已准备就绪
-
quotesInfo {} 原始合约文件
-
dm datamanager
-
quotesWs 行情 ws
-
tradeWs 交易 ws
// 添加事件监听
tqsdk.on(eventName, cb)
// 取消事件监听
tqsdk.off(eventName, cb)
支持的事件:
eventName | cb 回调函数参数 | 事件触发说明 |
---|---|---|
ready | 收到合约基础数据 | |
rtn_brokers | (array) -- 期货公司列表 | 收到期货公司列表 |
notify | (object) -- 单个通知对象 | 收到通知对象 |
rtn_data | 数据更新(每一次数据更新触发) | |
error | error | 发生错误(目前只有一种:合约服务下载失败) |
tqsdk.subscribe_quote([string|array])
tqsdk.set_chart([object])
监听 rtn_data
事件,可以实时对行情数据变化作出响应。但是需要在相应组件 destory 的时候取消监听对应事件。
TQSDK - JS 封装为 Vue 插件,可以在组件中监听事件,不需要在单独取消监听。
import Vue from 'vue'
import TQSDK from 'tqsdk'
let tqsdk = new TQSDK()
const NOOP = () => {}
let tqVmEventMap = {}
let tqsdkRE = /^tqsdk:/
function mixinEvents(Vue) {
let on = Vue.prototype.$on
let emit = Vue.prototype.$emit
Vue.prototype.$on = function proxyOn(eventName, fn = NOOP) {
const vm = this
if (Array.isArray(eventName)) {
eventName.forEach((item) => vm.$on(item, fn));
} else if (tqsdkRE.test(eventName)) {
if (!tqVmEventMap[vm._uid]) tqVmEventMap[vm._uid] = {}
let tq_eventName = eventName.match(/^tqsdk:(.*)/)[1]
if (!tqVmEventMap[vm._uid][tq_eventName]) tqVmEventMap[vm._uid][tq_eventName] = []
tqVmEventMap[vm._uid][tq_eventName].push(fn)
tqsdk.on(tq_eventName, fn.bind(vm))
} else {
on.call(vm, eventName, fn)
}
return vm
}
}
function applyMixin(Vue) {
Vue.mixin({
beforeDestroy() {
const vm = this
const tqevents = tqVmEventMap[vm._uid] || {};
for (let eventName in tqevents) {
let eventsArr = tqevents[eventName]
eventsArr.forEach((fn) => {
tqsdk.removeEventListener(eventName, fn)
})
}
delete tqVmEventMap[vm._uid];
}
})
}
function plugin(Vue) {
if (VERSION < 2) {
console.error('[vue-event-proxy] only support Vue 2.0+');
return;
}
// Exit if the plugin has already been installed.
if (plugin.installed) return
plugin.installed = true
mixinEvents(Vue)
applyMixin(Vue)
}
Vue.use(plugin)
Vue.$tqsdk = tqsdk
Vue.prototype.$tqsdk = tqsdk
export default tqsdk;
Installation - FAQ - API Reference - DIFF 协议 - 天勤官网