diff --git a/src/libs/osmos.js b/src/libs/osmos.js index 8a6f403b..3b19c790 100644 --- a/src/libs/osmos.js +++ b/src/libs/osmos.js @@ -1,3 +1,10 @@ +/* + * @Description: file + * @Autor: dingyiming + * @Date: 2021-11-22 21:20:10 + * @LastEditors: dingyiming + * @LastEditTime: 2021-11-23 11:19:51 + */ import fetch from 'node-fetch' import { getLocalChains } from './data/data' @@ -15,20 +22,31 @@ export default class OsmosAPI { async getOHCL4Pairs(from, to) { this.exe_time = '' return Promise.all( - [fetch(`https://api.coingecko.com/api/v3/coins/${from}/ohlc?vs_currency=usd&days=7`).then(res => res.json()), - fetch(`https://api.coingecko.com/api/v3/coins/${to}/ohlc?vs_currency=usd&days=7`).then(res => res.json())], + [fetch(`https://api.coingecko.com/api/v3/coins/${from}/ohlc?vs_currency=usd&days=1`).then(res => res.json()), + fetch(`https://api.coingecko.com/api/v3/coins/${to}/ohlc?vs_currency=usd&days=1`).then(res => res.json())], ).then(ohlc => { - const output = [] console.log(ohlc) + const output = [] ohlc[0].forEach((e, i) => { - console.log(e, i, ohlc[1][i]) const price = [e[0]] for (let j = 1; j <= 4; j += 1) { - price.push(e[j] / ohlc[1][i][j]) + price.push(e[j] / ohlc?.[1]?.[i]?.[j]) } output.push(price) }) - return output + const result = [] + for (let i = 0; i < output.length; i += 1) { + const itemArr = output[i] + result.push({ + time: itemArr[0], + volume: 0, + open: itemArr[1], + high: itemArr[2], + low: itemArr[3], + close: itemArr[4], + }) + } + return result }) } diff --git a/src/views/OsmosisTrade.vue b/src/views/OsmosisTrade.vue index 9cf3d182..f6c6a09e 100644 --- a/src/views/OsmosisTrade.vue +++ b/src/views/OsmosisTrade.vue @@ -61,7 +61,7 @@
-
- + { - console.log(data) - }) + this.$http.osmosis.getOHCL4Pairs( + this.$http.osmosis.getCoinGeckoId(base), + this.$http.osmosis.getCoinGeckoId(target), + ) + .then(data => { + this.klineData = data + }) }, beforeRouteUpdate(to, from, next) { const { base, target } = to.params diff --git a/src/views/components/kline/KlineTheme.js b/src/views/components/kline/KlineTheme.js new file mode 100644 index 00000000..4f3a4f5d --- /dev/null +++ b/src/views/components/kline/KlineTheme.js @@ -0,0 +1,42 @@ +/* eslint-disable */ +// 白色主题 +export const TRADINGVIEW_THEME_LIGHT = { + bg: '#fff', + crosshair: '#888888', + short: '#ea0070', + shortFill: '#ea0070', + long: '#70a800', + longFill: '#70a800', + cta: '#FBFBFB', + ctaHighlight: '#F5F5F5', + alert: '#FFD506', + category: 'light', + grid: '#EFF3F6', + lineColor: '#555', + textColor: '#999', + maLine: '#f0b90b', + ma1: '#ffc200', + ma2: '#6600cc', + ma3: '#cc0066', +}; + +// 黑色主题 +export const TRADINGVIEW_THEME_DARK = { + bg: '#283046', + grid: '#333', + lineColor: '#28343C', + short: '#ea5455', + shortFill: '#ea5455', + long: '#28c76f', + longFill: '#28c76f', + crosshair: '#626c73', + cta: '#363D52', + ctaHighlight: '#414A67', + alert: '#FFD506', + category: 'dark', + textColor: '#999', + maLine: '#f5bc00', + ma1: '#ffc200', + ma2: '#ff00ff', + ma3: '#cc0066', +}; diff --git a/src/views/components/kline/datafeed.js b/src/views/components/kline/datafeed.js index 307759a5..5611e04a 100644 --- a/src/views/components/kline/datafeed.js +++ b/src/views/components/kline/datafeed.js @@ -46,7 +46,7 @@ class DataFeeds { onReady(callback) { const defaultConfiguration = { symbols_type: [], - supported_resolutions: ['1', '5', '15', '30', '60', '240', '1D', '1M'], + supported_resolutions: ['30', '240', '1D'], supports_marks: true, supports_timescale_marks: false, supports_time: false, @@ -121,7 +121,7 @@ class DataFeeds { has_empty_bars: true, description: '', has_intraday: true, - supported_resolutions: ['1', '5', '15', '30', '60', '120', '240', '360', '1D'], + supported_resolutions: ['30','240', '1D'], pricescale: 100000000, // 价格精度 volume_precision: 3, // 数量精度 symbol: symbolName, diff --git a/src/views/components/kline/index.vue b/src/views/components/kline/index.vue index f13cd421..aa3fff93 100644 --- a/src/views/components/kline/index.vue +++ b/src/views/components/kline/index.vue @@ -10,6 +10,7 @@ import pako from 'pako' import { widget, version } from './charting_library/charting_library' import DataFeeds from './datafeed' +import { TRADINGVIEW_THEME_LIGHT, TRADINGVIEW_THEME_DARK } from './KlineTheme'; const toDouble = time => { if (String(time).length < 2) return `0${time}` @@ -17,8 +18,15 @@ const toDouble = time => { } export default { + props: { + list: [], + }, + data() { + return { + themeLocal: 'dark' + } + }, mounted() { - console.log(version()) const store = { ws: new WebSocket('wss://api.huobipro.com/ws'), @@ -49,26 +57,27 @@ export default { volume: data.amount, }) } - - store.onDataCallback(datas, { noData: !datas.length }) + console.log(this.list); + store.onDataCallback(this.list, { noData: !this.list.length }) } - if (res.tick) { - const data = res.tick + // if (res.tick) { + // const data = res.tick - store.onRealTimeCallback({ - time: data.id * 1000, - volume: data.amount, - close: data.close, - open: data.open, - high: data.high, - low: data.low, - }) - } + // store.onRealTimeCallback({ + // time: data.id * 1000, + // volume: data.amount, + // close: data.close, + // open: data.open, + // high: data.high, + // low: data.low, + // }) + // } } reader.readAsArrayBuffer(e.data) } + const tradingViewStyle = (this.themeLocal === 'dark' ? TRADINGVIEW_THEME_DARK : TRADINGVIEW_THEME_LIGHT); const tv = new widget({ debug: false, @@ -85,34 +94,79 @@ export default { datafeed: new DataFeeds(store), theme: 'Dark', favorites: { - intervals: ['1', '5', '15', '30', '60', '240', '1D'], - }, - customFormatters: { - timeFormatter: { - format: date => { - const _format_str = '%h:%m' - return _format_str.replace('%h', toDouble(date.getUTCHours()), 2).replace('%m', toDouble(date.getUTCMinutes()), 2).replace('%s', date.getUTCSeconds(), 2) - }, - }, - dateFormatter: { - format: date => `${date.getUTCFullYear()}-${toDouble(date.getUTCMonth() + 1)}-${toDouble(date.getUTCDate())}`, - }, - }, + intervals: ['30', '240', '1D'], + }, disabled_features: [ // 禁用功能 - 'header_symbol_search', - 'symbol_search_hot_key', - 'header_compare', - 'header_undo_redo', - 'header_screenshot', 'volume_force_overlay', + 'left_toolbar', + 'timeframes_toolbar', + 'header_symbol_search', + 'header_compare', + // 'header_fullscreen_button', + 'header_widget', + // 'use_localstorage_for_settings', + 'save_chart_properties_to_local_storage', + // 'header_chart_type', + // 'display_market_status', + 'symbol_search_hot_key', + 'compare_symbol', + 'border_around_the_chart', + 'remove_library_container_border', + 'symbol_info', + // 'header_interval_dialog_button', + // 'show_interval_dialog_on_key_press', + 'volume_force_overlay', + // 'header_resolutions', + // 'legend_context_menu', + // new + 'symbol_info', + 'pane_context_menu', ], enabled_features: [ // 启用的功能 - 'dont_show_boolean_study_arguments', // 是否隐藏指标参数 - 'hide_last_na_study_output', // 隐藏最后一次指标输出 - 'same_data_requery', - 'side_toolbar_in_fullscreen_mode', - 'adaptive_logo', + 'hide_left_toolbar_by_default', + 'pane_context_menu', + 'hide_last_na_study_output', + 'dont_show_boolean_study_arguments', ], + + overrides: { + 'paneProperties.background': tradingViewStyle.bg, + 'symbolWatermarkProperties.transparency': 85, + 'scalesProperties.backgroundColor': '#151a1e', + 'scalesProperties.textColor': '#888', + + 'paneProperties.vertGridProperties.color': tradingViewStyle.grid, + 'paneProperties.horzGridProperties.color': tradingViewStyle.grid, + 'paneProperties.crossHairProperties.color': + tradingViewStyle.crosshair, + 'scalesProperties.lineColor': tradingViewStyle.lineColor, + 'symbolWatermarkProperties.color': 'rgba(0, 0, 0, 0)', + + 'mainSeriesProperties.style': 1, + + // Candles styles + 'mainSeriesProperties.candleStyle.upColor': tradingViewStyle.long, + 'mainSeriesProperties.candleStyle.downColor': tradingViewStyle.short, + 'mainSeriesProperties.candleStyle.drawWick': true, + 'mainSeriesProperties.candleStyle.drawBorder': true, + 'mainSeriesProperties.candleStyle.borderColor': '#C400CB', + 'mainSeriesProperties.candleStyle.borderUpColor': + tradingViewStyle.long, + 'mainSeriesProperties.candleStyle.borderDownColor': + tradingViewStyle.short, + 'mainSeriesProperties.candleStyle.wickUpColor': tradingViewStyle.long, + 'mainSeriesProperties.candleStyle.wickDownColor': + tradingViewStyle.short, + + 'study_Overlay@tv-basicstudies.barStyle.upColor': 'blue', + 'study_Overlay@tv-basicstudies.barStyle.downColor': 'blue', + + 'study_Overlay@tv-basicstudies.lineStyle.color': 'blue', + + 'study_Overlay@tv-basicstudies.areaStyle.color1': 'blue', + 'study_Overlay@tv-basicstudies.areaStyle.color2': 'blue', + 'study_Overlay@tv-basicstudies.areaStyle.linecolor': 'blue', + }, }) tv.onChartReady(() => { @@ -134,5 +188,4 @@ export default { \ No newline at end of file