UNPKG

kline

Version:

本项目基于某K线插件做了一些封装和二次开发,使插件更加易用,方便后来的开发者.

224 lines (204 loc) 7.75 kB
import {ChartManager} from './chart_manager' import {Control} from './control' import Kline from './kline' import {Template} from './templates' export class Chart { static strPeriod = { 'zh-cn': { 'line': '(分时)', '1min': '(1分钟)', '5min': '(5分钟)', '15min': '(15分钟)', '30min': '(30分钟)', '1hour': '(1小时)', '1day': '(日线)', '1week': '(周线)', '3min': '(3分钟)', '2hour': '(2小时)', '4hour': '(4小时)', '6hour': '(6小时)', '12hour': '(12小时)', '3day': '(3天)' }, 'en-us': { 'line': '(Line)', '1min': '(1m)', '5min': '(5m)', '15min': '(15m)', '30min': '(30m)', '1hour': '(1h)', '1day': '(1d)', '1week': '(1w)', '3min': '(3m)', '2hour': '(2h)', '4hour': '(4h)', '6hour': '(6h)', '12hour': '(12h)', '3day': '(3d)' }, 'zh-tw': { 'line': '(分時)', '1min': '(1分鐘)', '5min': '(5分鐘)', '15min': '(15分鐘)', '30min': '(30分鐘)', '1hour': '(1小時)', '1day': '(日線)', '1week': '(周線)', '3min': '(3分鐘)', '2hour': '(2小時)', '4hour': '(4小時)', '6hour': '(6小時)', '12hour': '(12小時)', '3day': '(3天)' } }; constructor() { this._data = null; this._charStyle = "CandleStick"; this._depthData = { array: null, asks_count: 0, bids_count: 0, asks_si: 0, asks_ei: 0, bids_si: 0, bids_ei: 0 }; this.strIsLine = false; this._range = Kline.instance.range; this._symbol = Kline.instance.symbol; } setTitle() { let lang = ChartManager.instance.getLanguage(); let title = Kline.instance.symbolName; title += ' '; title += this.strIsLine ? Chart.strPeriod[lang]['line'] : Chart.strPeriod[lang][this._range]; title += (this._contract_unit + '/' + this._money_type).toUpperCase(); ChartManager.instance.setTitle('frame0.k0', title); } setSymbol(symbol) { this._symbol = symbol; this.updateDataAndDisplay(); } updateDataAndDisplay() { Kline.instance.symbol = this._symbol; Kline.instance.range = this._range; ChartManager.instance.setCurrentDataSource('frame0.k0', this._symbol + '.' + this._range); ChartManager.instance.setNormalMode(); let f = Kline.instance.chartMgr.getDataSource("frame0.k0").getLastDate(); $('.symbol-title>a').text(Kline.instance.symbolName); if (f === -1) { Kline.instance.requestParam = Control.setHttpRequestParam(Kline.instance.symbol, Kline.instance.range, Kline.instance.limit, null); Control.requestData(true); } else { Kline.instance.requestParam = Control.setHttpRequestParam(Kline.instance.symbol, Kline.instance.range, null, f.toString()); Control.requestData(); } ChartManager.instance.redraw('All', false); } setCurrentContractUnit(contractUnit) { this._contract_unit = contractUnit; this.updateDataAndDisplay(); } setCurrentMoneyType(moneyType) { this._money_type = moneyType; this.updateDataAndDisplay(); } setCurrentPeriod(period) { this._range = Kline.instance.periodMap[period]; if (Kline.instance.type === "stomp" && Kline.instance.stompClient.ws.readyState === 1) { Kline.instance.subscribed.unsubscribe(); Kline.instance.subscribed = Kline.instance.stompClient.subscribe(Kline.instance.subscribePath + '/' + Kline.instance.symbol + '/' + this._range, Control.subscribeCallback); } this.updateDataAndDisplay(); Kline.instance.onRangeChange(this._range); } updateDataSource(data) { this._data = data; ChartManager.instance.updateData("frame0.k0", this._data); } updateDepth(array) { if (array === null) { this._depthData.array = []; ChartManager.instance.redraw('All', false); return; } if (!array.asks || !array.bids || array.asks === '' || array.bids === '') return; let _data = this._depthData; _data.array = []; for (let i = 0; i < array.asks.length; i++) { let data = {}; data.rate = array.asks[i][0]; data.amount = array.asks[i][1]; _data.array.push(data); } for (let i = 0; i < array.bids.length; i++) { let data = {}; data.rate = array.bids[i][0]; data.amount = array.bids[i][1]; _data.array.push(data); } _data.asks_count = array.asks.length; _data.bids_count = array.bids.length; _data.asks_si = _data.asks_count - 1; _data.asks_ei = 0; _data.bids_si = _data.asks_count - 1; _data.bids_ei = _data.asks_count + _data.bids_count - 2; for (let i = _data.asks_si; i >= _data.asks_ei; i--) { if (i === _data.asks_si && _data.array[i] !== undefined) { _data.array[i].amounts = _data.array[i].amount; } else if(_data.array[i + 1] !== undefined) { _data.array[i].amounts = _data.array[i + 1].amounts + _data.array[i].amount; } } for (let i = _data.bids_si; i <= _data.bids_ei; i++) { if (i === _data.bids_si && _data.array[i] !== undefined) { _data.array[i].amounts = _data.array[i].amount; } else if (_data.array[i - 1] !== undefined) { _data.array[i].amounts = _data.array[i - 1].amounts + _data.array[i].amount; } } ChartManager.instance.redraw('All', false); } setMainIndicator(indicName) { this._mainIndicator = indicName; if (indicName === 'NONE') { ChartManager.instance.removeMainIndicator('frame0.k0'); } else { ChartManager.instance.setMainIndicator('frame0.k0', indicName); } ChartManager.instance.redraw('All', true); } setIndicator(index, indicName) { if (indicName === 'NONE') { let index = 2; if (Template.displayVolume === false) index = 1; let areaName = ChartManager.instance.getIndicatorAreaName('frame0.k0', index); if (areaName !== '') ChartManager.instance.removeIndicator(areaName); } else { let index = 2; if (Template.displayVolume === false) index = 1; let areaName = ChartManager.instance.getIndicatorAreaName('frame0.k0', index); if (areaName === '') { Template.createIndicatorChartComps('frame0.k0', indicName); } else { ChartManager.instance.setIndicator(areaName, indicName); } } ChartManager.instance.redraw('All', true); } addIndicator(indicName) { ChartManager.instance.addIndicator(indicName); ChartManager.instance.redraw('All', true); } removeIndicator(indicName) { let areaName = ChartManager.instance.getIndicatorAreaName(2); ChartManager.instance.removeIndicator(areaName); ChartManager.instance.redraw('All', true); }; }