vue 中 使用 tradingview
加载页面时初始化方法: mounted
可以在 mounted 方法中调用 methods 的中的方法
使用 data 中的数据时,在每个方法的开始推荐先定义 var that = this
现在还不明白开始时为什么执行两次 resolveSymbol 方法
不要纠结页面的数据怎么获取到某个方法中的,它自己就获取了。例如 resolveSymbol 方法,根据商品名称解析商品信息。你在输入框中输入某个商品时,值自动被 resolveSymbol 方法获取。
在 gerBar 方法中,执行回调函数的时候,eg: settimeout(callback, 1000)让其 1 秒后执行,因为 若去后台获取数据采用 axios.post() 是异步的。
开始时 执行顺序:
createChartData -> subscribeSymbol -> unsubscribeSymbol -> TradingView.onready -> onChartReady -> onReady(图表雏形) -> resolveSymbol -> getBar
切换商品时顺序:
searchSymbols -> resolveSymbol -> getBar
1 <!-- TradingView Widget BEGIN -->2 <html>
3 <head>
4 <link rel="icon" href="https://static.jianshukeji.com/highcharts/images/favicon.ico">
5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
7 <script src="//unpkg.com/vue/dist/vue.js"></script>
8 <script src="//unpkg.com/element-ui@2.4.11/lib/index.js"></script>
9 <script src="https://img.hcharts.cn/highcharts/highcharts.js"></script>
10 <script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>
11 <script src="https://img.hcharts.cn/highcharts/modules/series-label.js"></script>
12 <script src="https://img.hcharts.cn/highcharts/modules/oldie.js"></script>
13 <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
14 <link rel="stylesheet" type="text/css" href="//unpkg.com/element-ui@2.4.11/lib/theme-chalk/index.css">
15 <script type="text/javascript" src="/static/charting_library-master/charting_library/charting_library.min.js"></script>
16 <script type="text/javascript" src="/static/charting_library-master/datafeeds/udf/dist/polyfills.js"></script>
17 <script type="text/javascript" src="/static/charting_library-master/datafeeds/udf/dist/bundle.js"></script>
18 </head>
19
20 <body>
21 <div id="app">
22 <el-button type="primary" @click="getVal('M1905')">M1905</el-button>
23 <el-button type="primary" @click="getVal('C1905')">C1905</el-button>
24 <el-button type="primary" @click="getVal('RB1905')">RB1905</el-button>
25 <el-button type="primary" @click="getVal('A1905')">A1905</el-button>
26 </div>
27 <div id="tv_chart_container"></div>
28
29 </body>
30 <!-- 先引入 Vue -->
31 <script src="/static/js/vue.min.js"></script>
32 <script src="/static/js/axios.min.js"></script>
33 <!-- 引入组件库 -->
34 <script src="/static/js/index.js"></script>
35 <script src="http://cdn.hcharts.cn/highcharts/modules/data.js"></script>
36 <script type="text/javascript">
37
38 var host = window.location;
39
40 var vm = new Vue({
41 el: 'tv_chart_container',
42 mounted: function () {
43 var that = this;
44 that.chart_data = that.createChartData();
45 TradingView.onready(function () {
46 that.chart = window.tvWidget = new TradingView.widget({
47 symbol: 'M1905',
48 height: '900',
49 width: '1500',
50 interval: that.interval,
51 toolbar_bg: '#c5c5c8',
52 timezone: 'Asia/Shanghai',
53 time_frames: [
54 {text: "1h", resolution: "1"},
55 {text: "6h", resolution: "15"},
56 {text: "1d", resolution: "30"},
57 {text: "3d", resolution: "30"},
58 {text: "1w", resolution: "30"},
59 {text: "1m", resolution: "1D"},
60 {text: "3m", resolution: "1D"},
61 {text: "6m", resolution: "3D"},
62 {text: "1y", resolution: "1W"},
63 {text: "100y", resolution: "W", description: "All", title: "All"},
64 ],
65 container_id: 'tv_chart_container',
66 library_path: '/static/charting_library-master/charting_library/',
67 locale: 'zh',
68 //datafeed: new Datafeeds.UDFCompatibleDatafeed("https://demo_feed.tradingview.com"),
69 datafeed: that.chart_data,
70 disabled_features: [
71 'volume_force_overlay',// 成交量与k线分离
72 //'header_symbol_search',// 允许搜索商品
73 ],
74 overrides: {
75 //'volumePaneSize': 'small', //成交量高度设置,可选值 large, medium, small, tiny
76 //'mainSeriesProperties.priceAxisProperties.autoScale':false,
77 //'mainSeriesProperties.priceLineColor': '#001bff',
78 //'mainSeriesProperties.priceLineWidth': 5,
79 }
80 });
81 that.chart.onChartReady(function () {
82 //that.chart.chart().createStudy('MA Cross', false, false); // K线图添加初始化曲线
83 });
84 });
85
86 },
87 data: function () {
88 return {
89 chart_data: null,
90 chart: null,
91 symbol:null,
92 symbolAndInterval: null,
93 dataBar: [],
94 interval: 'D',
95 inDayResolutions: ['1', '5', '15', '30'],
96 symInfo: [
97 {
98 "name": 'M1905',
99 "timezone": "Asia/Shanghai",
100 "pricescale": 500,
101 "minmov": 1,
102 "ticker": 'M1905',
103 "description": "DIdontKnow",
104 "session": "0900-1630",
105 "type": "stock",
106 "has_intraday": true,
107 "intraday_multipliers": this.inDayResolutions,
108 "has_weekly_and_monthly": false,
109 },
110 {
111 "name": 'C1905',
112 "timezone": "Asia/Shanghai",
113 "pricescale": 100,
114 "exchange": "NYSE",
115 "point": 2,
116 "minmov": 1,
117 "ticker": 'C1905',
118 "description": "BOEIGN CO",
119 "session": "24x7",
120 "type": "bitcoin",
121 "has_intraday": true,//是否具有日内分钟数据,为true 则所在周期在intraday_multipliers数组中提供
122 "intraday_multipliers": this.inDayResolutions,
123 "has_weekly_and_monthly": false,
124 "has_no_volume": false,
125 "regular_session": "24x7"
126 },
127 {
128 "name": 'A1905',
129 "timezone": "Asia/Shanghai",
130 "pricescale": 100,
131 "exchange": "NYSE",
132 "point": 2,
133 "minmov": 1,
134 "ticker": 'A1905',
135 "description": "BOEIGN CO",
136 "session": "24x7",
137 "type": "bitcoin",
138 "has_intraday": true,//是否具有日内分钟数据,为true 则所在周期在intraday_multipliers数组中提供
139 "intraday_multipliers": this.inDayResolutions,
140 "has_weekly_and_monthly": false,
141 "has_no_volume": false,
142 "regular_session": "24x7"
143 },
144 {
145 "name": 'RB1905',
146 "timezone": "Asia/Shanghai",
147 "pricescale": 100,
148 "exchange": "NYSE",
149 "point": 2,
150 "minmov": 1,
151 "ticker": 'RB1905',
152 "description": "BOEIGN CO",
153 "session": "24x7",
154 "type": "bitcoin",
155 "has_intraday": true,//是否具有日内分钟数据,为true 则所在周期在intraday_multipliers数组中提供
156 "intraday_multipliers": this.inDayResolutions,
157 "has_weekly_and_monthly": false,
158 "has_no_volume": false,
159 "regular_session": "24x7"
160 },
161 ],
162 searchList: [
163 {
164 "symbol": "M1905",
165 "full_name": "NYSE:M1905",
166 "description": "BOEING CO",
167 "exchange": "Cboe BZX",
168 "ticker": "M1905",
169 "type": "stock"
170 },
171 {
172 "symbol": "C1905",
173 "full_name": "NYSE:C1905",
174 "description": "THE CHEMOURS COMPANY LLC",
175 "exchange": "Cboe BZX",
176 "ticker": "C1905",
177 "type": "stock"
178 },
179 {
180 "symbol": "RB1905",
181 "full_name": "NYSE:RB1905",
182 "description": "DOMINION ENERGY INC",
183 "exchange": "Cboe BZX",
184 "ticker": "RB1905",
185 "type": "stock"
186 },
187 {
188 "symbol": "A1905",
189 "full_name": "NYSE:A1905",
190 "description": "EL PASO ELECTRIC CO",
191 "exchange": "Cboe BZX",
192 "ticker": "A1905",
193 "type": "stock"
194 },
195 ],
196 supported_resolutions: ['1', '5', '15', '30', 'D', 'W', 'M'],
197 }
198 },
199 methods: {
200 createChartData: function () {
201 var that = this;
202 Datafeeds.Container = function () {
203 //this._configuration=configurationData
204 that._configuration = {
205 supports_search: false,
206 supports_group_request: false,
207 exchanges: [{value: 'DV', name: 'NYSE', desc: 'DeVry Education Group Inc.'}],
208 supported_resolutions: that.supported_resolutions,
209 supports_marks: false,
210 supports_time: false,
211 supports_timescale_marks: false,
212 symbols_types: [{name: 'Ny', value: 'dv'}],
213 }
214 }
215 Datafeeds.Container.prototype.onReady = function (callback) {
216 if (that._configuration) {
217 setTimeout(function () {
218 callback(that._configuration);
219 }, 1000);
220 }
221 }
222 Datafeeds.Container.prototype.resolveSymbol = function (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) {
223 var symInfoTemp = null;
224 if (symbolName == 'M1905')
225 symInfoTemp = that.symInfo[0]
226 else if (symbolName == 'C1905')
227 symInfoTemp = that.symInfo[1];
228 else if (symbolName == 'A1905')
229 symInfoTemp = that.symInfo[2];
230 else symInfoTemp = that.symInfo[3];
231 setTimeout(function () {
232 onSymbolResolvedCallback(symInfoTemp);//商品信息
233 }, 0);
234 }
235 Datafeeds.Container.prototype.searchSymbols = function (userInput, exchange, symbolType, onResultReadyCallback) {
236 setTimeout(function () {
237 onResultReadyCallback(that.searchList);
238 }, 0)
239 }
240 Datafeeds.Container.prototype.getBars = function (symbolInfo, resolution, timeFrom, timeTo, onDataCallback) {
241 console.log("resolution: "+resolution);
242 console.log("timeFrom: "+timeFrom);
243 console.log("timeTo: "+timeTo);
244 that.interval = resolution;
245 that.symbol = symbolInfo.name;
246 that.changeSearch(that.symbol, that.interval, timeFrom, timeTo);
247 setTimeout(function () {
248 onDataCallback(that.dataBar);//商品数据
249 },1500);
250 }
251 Datafeeds.Container.prototype.subscribeBars = function (symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) {
252 }
253 Datafeeds.Container.prototype.unsubscribeBars = function (subscribeUID) {
254 }
255 return new Datafeeds.Container;
256 },
257 changeSearch: function (symbolName, resolution, timeFrom, timeTo) {
258 var that = this;
259 axios.post(host+'getChartData', {
260 symbolName: symbolName,
261 resolution: resolution,
262 timeFrom: timeFrom,
263 timeTo: timeTo,
264 }).then(res => {
265 if(res.data.result_code == "success"){
266 var chartData = res.data.data;
267 that.dataBar.splice(0, that.dataBar.length);
268 for (var i = 0; i < chartData.chartDataTime.length; i++) {
269 var time = chartData.chartDataTime[i];
270 var high = chartData.chartDataHigh[i];
271 var low = chartData.chartDataLow[i];
272 var close = chartData.chartDataClose[i];
273 var open = chartData.chartDataOpen[i];
274 var volume = chartData.chartDataVolume[i];
275 that.dataBar.push({
276 time: time,
277 close: close,
278 open: open,
279 high: high,
280 low: low,
281 volume: volume
282 })
283 }
284 }
285 });
286
287 },
288
289 },
290 watch: {
291 symbol: function(val){
292 var that = this;
293 that.chart.setSymbol(that.symbol, that.interval, function () {
294
295 });
296 }
297 }
298 });
299 var ap = {
300 data: function () {
301 return {
302
303 }
304 },
305 methods: {
306 getVal: function (symbol) {
307 vm.symbol = symbol;
308 }
309 }
310 };
311 var Ctor = Vue.extend(ap);
312 new Ctor().$mount('#app');
313
314 </script>
315 <style>
316 #app{
317 float: right;
318 margin-right: 10%;
319 }
320 </style>
321 </html>
TradingView
工作需要,点击按钮进行切换商品: 如图
以上是 vue 中 使用 tradingview 的全部内容, 来源链接: utcz.com/z/378549.html