You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
5.5 KiB
167 lines
5.5 KiB
'use strict';
|
|
|
|
var _dataUpdater2 = _interopRequireDefault(dataUpdater);
|
|
|
|
var LastLength;
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
|
|
* JS API
|
|
*/
|
|
var datafeeds = function () {
|
|
|
|
/**
|
|
* JS API
|
|
* @param {*Object} vue vue实例
|
|
*/
|
|
function datafeeds(vue) {
|
|
_classCallCheck(this, datafeeds);
|
|
|
|
this.self = vue;
|
|
this.barsUpdater = new _dataUpdater2.default(this);
|
|
}
|
|
|
|
/**
|
|
* @param {*Function} callback 回调函数
|
|
* `onReady` should return result asynchronously.
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.onReady = function onReady(callback) {
|
|
var _this = this;
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
var configuration = _this.defaultConfiguration();
|
|
if (_this.self.getConfig) {
|
|
configuration = Object.assign(_this.defaultConfiguration(), _this.self.getConfig());
|
|
}
|
|
resolve(configuration);
|
|
}).then(function (data) {
|
|
return callback(data);
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @param {*String} symbolName 商品名称或ticker
|
|
* @param {*Function} onSymbolResolvedCallback 成功回调
|
|
* @param {*Function} onResolveErrorCallback 失败回调
|
|
* `resolveSymbol` should return result asynchronously.
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.resolveSymbol = function resolveSymbol(symbolName, onSymbolResolvedCallback, onResolveErrorCallback) {
|
|
var _this2 = this;
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
var symbolInfo = _this2.defaultSymbol();
|
|
if (_this2.self.getSymbol) {
|
|
symbolInfo = Object.assign(_this2.defaultSymbol(), _this2.self.getSymbol());
|
|
}
|
|
resolve(symbolInfo);
|
|
}).then(function (data) {
|
|
return onSymbolResolvedCallback(data);
|
|
}).catch(function (err) {
|
|
return onResolveErrorCallback(err);
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @param {*Object} symbolInfo 商品信息对象
|
|
* @param {*String} resolution 分辨率
|
|
* @param {*Number} rangeStartDate 时间戳、最左边请求的K线时间
|
|
* @param {*Number} rangeEndDate 时间戳、最右边请求的K线时间
|
|
* @param {*Function} onDataCallback 回调函数
|
|
* @param {*Function} onErrorCallback 回调函数
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.getBars = function getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onDataCallback, onErrorCallback) {
|
|
var onLoadedCallback = function onLoadedCallback(data) {
|
|
//if(data&&LastLength!=data.length){
|
|
if(data&&data.length){
|
|
onDataCallback(data, { noData: false });
|
|
}else{
|
|
onDataCallback([], { noData: true });
|
|
}
|
|
LastLength = data.length;
|
|
|
|
|
|
|
|
//或者可以这样写: data && data.length ? onDataCallback(data, { noData: true }) : onDataCallback([], { noData: true });
|
|
};
|
|
this.self.getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onLoadedCallback);
|
|
};
|
|
|
|
/**
|
|
* 订阅K线数据。图表库将调用onRealtimeCallback方法以更新实时数据
|
|
* @param {*Object} symbolInfo 商品信息
|
|
* @param {*String} resolution 分辨率
|
|
* @param {*Function} onRealtimeCallback 回调函数
|
|
* @param {*String} subscriberUID 监听的唯一标识符
|
|
* @param {*Function} onResetCacheNeededCallback (从1.7开始): 将在bars数据发生变化时执行
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.subscribeBars = function subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) {
|
|
this.barsUpdater.subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback);
|
|
};
|
|
|
|
/**
|
|
* 取消订阅K线数据
|
|
* @param {*String} subscriberUID 监听的唯一标识符
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.unsubscribeBars = function unsubscribeBars(subscriberUID) {
|
|
this.barsUpdater.unsubscribeBars(subscriberUID);
|
|
};
|
|
|
|
/**
|
|
* 默认配置
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.defaultConfiguration = function defaultConfiguration() {
|
|
//设置默认配置
|
|
return {
|
|
supports_search: false,
|
|
supports_group_request: false,
|
|
supported_resolutions: ['1', '5', '15', '30', '60', '1D', '1W', '1M'],
|
|
supports_marks: true,
|
|
supports_timescale_marks: true,
|
|
supports_time: true
|
|
};
|
|
};
|
|
|
|
/**
|
|
* 默认商品信息
|
|
*/
|
|
|
|
|
|
datafeeds.prototype.defaultSymbol = function defaultSymbol() {
|
|
return {
|
|
'name': this.self.symbol.toLocaleUpperCase(),
|
|
'timezone': 'Asia/Shanghai',
|
|
'minmov': 1,
|
|
'minmov2': 0,
|
|
'pointvalue': 1,
|
|
'fractional': false,
|
|
//设置周期
|
|
'session': '24x7',
|
|
'has_intraday': true,
|
|
'has_no_volume': false,
|
|
//设置是否支持周月线
|
|
"has_daily":true,
|
|
//设置是否支持周月线
|
|
"has_weekly_and_monthly":true,
|
|
'description': this.self.symbol.toLocaleUpperCase(),
|
|
//设置精度 100表示保留两位小数 1000三位 10000四位
|
|
'pricescale': 100,
|
|
'ticker': this.self.symbol.toLocaleUpperCase(),
|
|
'supported_resolutions': ['1', '5', '15', '30', '60', '240','1D', '5D', '1W', '1M']
|
|
};
|
|
};
|
|
|
|
return datafeeds;
|
|
}();
|
|
|