@yuants/vendor-trading-view 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,13 +1,10 @@
1
- import { UUID, convertDurationToOffset, decodePath, formatTime } from '@yuants/utils';
2
1
  import { createSeriesProvider } from '@yuants/data-series';
3
2
  import { Terminal } from '@yuants/protocol';
3
+ import { convertDurationToOffset, decodePath, formatTime } from '@yuants/utils';
4
4
  import { Observable, firstValueFrom } from 'rxjs';
5
5
  //@ts-ignore
6
6
  import TradingView from '@mathieuc/tradingview';
7
- const terminal = new Terminal(process.env.HOST_URL, {
8
- terminal_id: process.env.TERMINAL_ID || `TradingView/${UUID()}`,
9
- name: '@yuants/vendor-trading-view',
10
- });
7
+ const terminal = Terminal.fromNodeEnv();
11
8
  const DURATION_TO_TRADINGVIEW_PERIOD = {
12
9
  PT1M: '1',
13
10
  PT3M: '3',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { UUID, convertDurationToOffset, decodePath, formatTime } from '@yuants/utils';\nimport { IOHLC } from '@yuants/data-ohlc';\nimport { createSeriesProvider } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { Observable, firstValueFrom } from 'rxjs';\n//@ts-ignore\nimport TradingView from '@mathieuc/tradingview';\n\nconst terminal = new Terminal(process.env.HOST_URL!, {\n terminal_id: process.env.TERMINAL_ID || `TradingView/${UUID()}`,\n name: '@yuants/vendor-trading-view',\n});\n\nconst DURATION_TO_TRADINGVIEW_PERIOD: Record<string, string> = {\n PT1M: '1',\n PT3M: '3',\n PT5M: '5',\n PT15M: '15',\n PT30M: '30',\n PT45M: '45',\n PT1H: '60',\n PT2H: '120',\n PT3H: '180',\n PT4H: '240',\n P1D: '1D',\n P1W: '1W',\n P1M: '1M',\n P3M: '3M',\n P6M: '6M',\n P1Y: '12M',\n};\n\ncreateSeriesProvider(terminal, {\n tableName: 'ohlc',\n series_id_prefix_parts: ['TradingView'],\n reversed: false,\n serviceOptions: { concurrent: +(process.env.CONCURRENCY || 2) },\n queryFn: async ({ series_id, started_at, ended_at }) => {\n const [datasource_id, product_id, duration] = decodePath(series_id);\n const offset = convertDurationToOffset(duration);\n if (!offset) throw new Error(`Unsupported duration: ${duration}`);\n\n const timeframe = DURATION_TO_TRADINGVIEW_PERIOD[duration];\n if (!timeframe) throw new Error(`Unsupported timeframe: ${duration}`);\n\n const range = Math.ceil((ended_at - started_at) / offset);\n if (range <= 0) {\n throw `range=${range} is invalid`;\n }\n\n console.info(\n formatTime(Date.now()),\n 'queryChartRequest',\n JSON.stringify({ series_id, product_id, duration, range }),\n );\n\n const data = await firstValueFrom(\n new Observable<IOHLC[]>((subscriber) => {\n const client = new TradingView.Client();\n const chart = new client.Session.Chart();\n chart.setMarket(product_id, {\n timeframe,\n range,\n to: ended_at,\n });\n chart.onError((e: any) => {\n subscriber.error(e);\n });\n chart.onUpdate(() => {\n const rawPeriods: any[] = chart.periods;\n if (rawPeriods.length !== 0) {\n const periods = rawPeriods.map(\n (v): IOHLC => ({\n series_id,\n created_at: formatTime(v.time * 1000),\n datasource_id,\n product_id,\n duration,\n closed_at: formatTime(v.time * 1000 + offset),\n open: `${v.open}`,\n high: `${v.max}`,\n low: `${v.min}`,\n close: `${v.close}`,\n volume: `${v.volume}`,\n open_interest: '0',\n }),\n );\n subscriber.next(periods);\n subscriber.complete();\n }\n });\n return () => {\n client.end();\n };\n }),\n );\n\n console.info(\n formatTime(Date.now()),\n 'queryChartResponse',\n JSON.stringify({\n series_id,\n product_id,\n duration,\n data_length: data.length,\n }),\n );\n\n return data;\n },\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOHLC } from '@yuants/data-ohlc';\nimport { createSeriesProvider } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { convertDurationToOffset, decodePath, formatTime } from '@yuants/utils';\nimport { Observable, firstValueFrom } from 'rxjs';\n//@ts-ignore\nimport TradingView from '@mathieuc/tradingview';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst DURATION_TO_TRADINGVIEW_PERIOD: Record<string, string> = {\n PT1M: '1',\n PT3M: '3',\n PT5M: '5',\n PT15M: '15',\n PT30M: '30',\n PT45M: '45',\n PT1H: '60',\n PT2H: '120',\n PT3H: '180',\n PT4H: '240',\n P1D: '1D',\n P1W: '1W',\n P1M: '1M',\n P3M: '3M',\n P6M: '6M',\n P1Y: '12M',\n};\n\ncreateSeriesProvider(terminal, {\n tableName: 'ohlc',\n series_id_prefix_parts: ['TradingView'],\n reversed: false,\n serviceOptions: { concurrent: +(process.env.CONCURRENCY || 2) },\n queryFn: async ({ series_id, started_at, ended_at }) => {\n const [datasource_id, product_id, duration] = decodePath(series_id);\n const offset = convertDurationToOffset(duration);\n if (!offset) throw new Error(`Unsupported duration: ${duration}`);\n\n const timeframe = DURATION_TO_TRADINGVIEW_PERIOD[duration];\n if (!timeframe) throw new Error(`Unsupported timeframe: ${duration}`);\n\n const range = Math.ceil((ended_at - started_at) / offset);\n if (range <= 0) {\n throw `range=${range} is invalid`;\n }\n\n console.info(\n formatTime(Date.now()),\n 'queryChartRequest',\n JSON.stringify({ series_id, product_id, duration, range }),\n );\n\n const data = await firstValueFrom(\n new Observable<IOHLC[]>((subscriber) => {\n const client = new TradingView.Client();\n const chart = new client.Session.Chart();\n chart.setMarket(product_id, {\n timeframe,\n range,\n to: ended_at,\n });\n chart.onError((e: any) => {\n subscriber.error(e);\n });\n chart.onUpdate(() => {\n const rawPeriods: any[] = chart.periods;\n if (rawPeriods.length !== 0) {\n const periods = rawPeriods.map(\n (v): IOHLC => ({\n series_id,\n created_at: formatTime(v.time * 1000),\n datasource_id,\n product_id,\n duration,\n closed_at: formatTime(v.time * 1000 + offset),\n open: `${v.open}`,\n high: `${v.max}`,\n low: `${v.min}`,\n close: `${v.close}`,\n volume: `${v.volume}`,\n open_interest: '0',\n }),\n );\n subscriber.next(periods);\n subscriber.complete();\n }\n });\n return () => {\n client.end();\n };\n }),\n );\n\n console.info(\n formatTime(Date.now()),\n 'queryChartResponse',\n JSON.stringify({\n series_id,\n product_id,\n duration,\n data_length: data.length,\n }),\n );\n\n return data;\n },\n});\n"]}
package/lib/index.js CHANGED
@@ -3,16 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const utils_1 = require("@yuants/utils");
7
6
  const data_series_1 = require("@yuants/data-series");
8
7
  const protocol_1 = require("@yuants/protocol");
8
+ const utils_1 = require("@yuants/utils");
9
9
  const rxjs_1 = require("rxjs");
10
10
  //@ts-ignore
11
11
  const tradingview_1 = __importDefault(require("@mathieuc/tradingview"));
12
- const terminal = new protocol_1.Terminal(process.env.HOST_URL, {
13
- terminal_id: process.env.TERMINAL_ID || `TradingView/${(0, utils_1.UUID)()}`,
14
- name: '@yuants/vendor-trading-view',
15
- });
12
+ const terminal = protocol_1.Terminal.fromNodeEnv();
16
13
  const DURATION_TO_TRADINGVIEW_PERIOD = {
17
14
  PT1M: '1',
18
15
  PT3M: '3',
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { UUID, convertDurationToOffset, decodePath, formatTime } from '@yuants/utils';\nimport { IOHLC } from '@yuants/data-ohlc';\nimport { createSeriesProvider } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { Observable, firstValueFrom } from 'rxjs';\n//@ts-ignore\nimport TradingView from '@mathieuc/tradingview';\n\nconst terminal = new Terminal(process.env.HOST_URL!, {\n terminal_id: process.env.TERMINAL_ID || `TradingView/${UUID()}`,\n name: '@yuants/vendor-trading-view',\n});\n\nconst DURATION_TO_TRADINGVIEW_PERIOD: Record<string, string> = {\n PT1M: '1',\n PT3M: '3',\n PT5M: '5',\n PT15M: '15',\n PT30M: '30',\n PT45M: '45',\n PT1H: '60',\n PT2H: '120',\n PT3H: '180',\n PT4H: '240',\n P1D: '1D',\n P1W: '1W',\n P1M: '1M',\n P3M: '3M',\n P6M: '6M',\n P1Y: '12M',\n};\n\ncreateSeriesProvider(terminal, {\n tableName: 'ohlc',\n series_id_prefix_parts: ['TradingView'],\n reversed: false,\n serviceOptions: { concurrent: +(process.env.CONCURRENCY || 2) },\n queryFn: async ({ series_id, started_at, ended_at }) => {\n const [datasource_id, product_id, duration] = decodePath(series_id);\n const offset = convertDurationToOffset(duration);\n if (!offset) throw new Error(`Unsupported duration: ${duration}`);\n\n const timeframe = DURATION_TO_TRADINGVIEW_PERIOD[duration];\n if (!timeframe) throw new Error(`Unsupported timeframe: ${duration}`);\n\n const range = Math.ceil((ended_at - started_at) / offset);\n if (range <= 0) {\n throw `range=${range} is invalid`;\n }\n\n console.info(\n formatTime(Date.now()),\n 'queryChartRequest',\n JSON.stringify({ series_id, product_id, duration, range }),\n );\n\n const data = await firstValueFrom(\n new Observable<IOHLC[]>((subscriber) => {\n const client = new TradingView.Client();\n const chart = new client.Session.Chart();\n chart.setMarket(product_id, {\n timeframe,\n range,\n to: ended_at,\n });\n chart.onError((e: any) => {\n subscriber.error(e);\n });\n chart.onUpdate(() => {\n const rawPeriods: any[] = chart.periods;\n if (rawPeriods.length !== 0) {\n const periods = rawPeriods.map(\n (v): IOHLC => ({\n series_id,\n created_at: formatTime(v.time * 1000),\n datasource_id,\n product_id,\n duration,\n closed_at: formatTime(v.time * 1000 + offset),\n open: `${v.open}`,\n high: `${v.max}`,\n low: `${v.min}`,\n close: `${v.close}`,\n volume: `${v.volume}`,\n open_interest: '0',\n }),\n );\n subscriber.next(periods);\n subscriber.complete();\n }\n });\n return () => {\n client.end();\n };\n }),\n );\n\n console.info(\n formatTime(Date.now()),\n 'queryChartResponse',\n JSON.stringify({\n series_id,\n product_id,\n duration,\n data_length: data.length,\n }),\n );\n\n return data;\n },\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOHLC } from '@yuants/data-ohlc';\nimport { createSeriesProvider } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { convertDurationToOffset, decodePath, formatTime } from '@yuants/utils';\nimport { Observable, firstValueFrom } from 'rxjs';\n//@ts-ignore\nimport TradingView from '@mathieuc/tradingview';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst DURATION_TO_TRADINGVIEW_PERIOD: Record<string, string> = {\n PT1M: '1',\n PT3M: '3',\n PT5M: '5',\n PT15M: '15',\n PT30M: '30',\n PT45M: '45',\n PT1H: '60',\n PT2H: '120',\n PT3H: '180',\n PT4H: '240',\n P1D: '1D',\n P1W: '1W',\n P1M: '1M',\n P3M: '3M',\n P6M: '6M',\n P1Y: '12M',\n};\n\ncreateSeriesProvider(terminal, {\n tableName: 'ohlc',\n series_id_prefix_parts: ['TradingView'],\n reversed: false,\n serviceOptions: { concurrent: +(process.env.CONCURRENCY || 2) },\n queryFn: async ({ series_id, started_at, ended_at }) => {\n const [datasource_id, product_id, duration] = decodePath(series_id);\n const offset = convertDurationToOffset(duration);\n if (!offset) throw new Error(`Unsupported duration: ${duration}`);\n\n const timeframe = DURATION_TO_TRADINGVIEW_PERIOD[duration];\n if (!timeframe) throw new Error(`Unsupported timeframe: ${duration}`);\n\n const range = Math.ceil((ended_at - started_at) / offset);\n if (range <= 0) {\n throw `range=${range} is invalid`;\n }\n\n console.info(\n formatTime(Date.now()),\n 'queryChartRequest',\n JSON.stringify({ series_id, product_id, duration, range }),\n );\n\n const data = await firstValueFrom(\n new Observable<IOHLC[]>((subscriber) => {\n const client = new TradingView.Client();\n const chart = new client.Session.Chart();\n chart.setMarket(product_id, {\n timeframe,\n range,\n to: ended_at,\n });\n chart.onError((e: any) => {\n subscriber.error(e);\n });\n chart.onUpdate(() => {\n const rawPeriods: any[] = chart.periods;\n if (rawPeriods.length !== 0) {\n const periods = rawPeriods.map(\n (v): IOHLC => ({\n series_id,\n created_at: formatTime(v.time * 1000),\n datasource_id,\n product_id,\n duration,\n closed_at: formatTime(v.time * 1000 + offset),\n open: `${v.open}`,\n high: `${v.max}`,\n low: `${v.min}`,\n close: `${v.close}`,\n volume: `${v.volume}`,\n open_interest: '0',\n }),\n );\n subscriber.next(periods);\n subscriber.complete();\n }\n });\n return () => {\n client.end();\n };\n }),\n );\n\n console.info(\n formatTime(Date.now()),\n 'queryChartResponse',\n JSON.stringify({\n series_id,\n product_id,\n duration,\n data_length: data.length,\n }),\n );\n\n return data;\n },\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-trading-view",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "bin": "lib/cli.js",
5
5
  "files": [
6
6
  "dist",
package/temp/image-tag CHANGED
@@ -1 +1 @@
1
- sha-ce64c6e1e39a4fa9772693657fea0e6d6b7a0212
1
+ sha-d874a227bb05de1a2b679ef0cd689955dcfb72dd
@@ -1,16 +1,16 @@
1
1
  {
2
- "apps/vendor-trading-view/CHANGELOG.json": "3ddb753b7d7262dcf01721d31ea4ac3de1d15194",
3
- "apps/vendor-trading-view/CHANGELOG.md": "5c485440033bffe95966333be3fdf58a0f9cf15d",
2
+ "apps/vendor-trading-view/CHANGELOG.json": "bc27af3c4787822b8a8235cebe55d5cf8b1d9f48",
3
+ "apps/vendor-trading-view/CHANGELOG.md": "b5d42e1f9f5525b3fa41f1ce3725a879a71a0652",
4
4
  "apps/vendor-trading-view/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
5
5
  "apps/vendor-trading-view/build/Dockerfile": "7816c8d8a127707ee40487326bbde4bcfbb6280d",
6
6
  "apps/vendor-trading-view/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
7
7
  "apps/vendor-trading-view/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
8
8
  "apps/vendor-trading-view/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
9
9
  "apps/vendor-trading-view/etc/vendor-trading-view.api.md": "341d99a0258ce3dff77a871b518a458d33bb3df5",
10
- "apps/vendor-trading-view/package.json": "3f2bf91dbf3c3e8f754c894aee20fb37234c82be",
10
+ "apps/vendor-trading-view/package.json": "c46a0ac5204eced8d772d369cb97b36b82e4eebd",
11
11
  "apps/vendor-trading-view/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
12
12
  "apps/vendor-trading-view/src/extension.ts": "452b7d7f0ee1b60de27648ae107f10cd683b2c48",
13
- "apps/vendor-trading-view/src/index.ts": "27beb01d12cb4e78cd60f6c92d030096352078b3",
13
+ "apps/vendor-trading-view/src/index.ts": "be3c727ebe6e6bfad920f66d3d75b39a91e1a755",
14
14
  "apps/vendor-trading-view/tsconfig.json": "c96157f0fbf3503af6f84e03a0df4ac624a82d47",
15
15
  "apps/vendor-trading-view/.rush/temp/shrinkwrap-deps.json": "c7628aefb2275d409bfbd57b3355bd5f24683160",
16
16
  "libraries/protocol/temp/package-deps.json": "d326f24867d9ae3fef16ff84ba537eabb7c8adf0",