@oanda/labs-crowd-view-widget 1.0.36 → 1.0.37

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/dist/main/CrowdViewWidget/components/Chart/Chart.js +38 -74
  3. package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +3 -18
  5. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  6. package/dist/main/CrowdViewWidget/components/Chart/getOption.js +29 -53
  7. package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js +47 -0
  9. package/dist/main/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js.map +1 -0
  10. package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
  11. package/dist/main/CrowdViewWidget/components/Chart/utils.js +24 -22
  12. package/dist/main/CrowdViewWidget/components/Chart/utils.js.map +1 -1
  13. package/dist/module/CrowdViewWidget/components/Chart/Chart.js +39 -76
  14. package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  15. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +3 -18
  16. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  17. package/dist/module/CrowdViewWidget/components/Chart/getOption.js +29 -52
  18. package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  19. package/dist/module/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js +40 -0
  20. package/dist/module/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js.map +1 -0
  21. package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
  22. package/dist/module/CrowdViewWidget/components/Chart/utils.js +24 -22
  23. package/dist/module/CrowdViewWidget/components/Chart/utils.js.map +1 -1
  24. package/dist/types/CrowdViewWidget/components/Chart/getOption.d.ts +1 -114
  25. package/dist/types/CrowdViewWidget/components/Chart/getOrderPositionDataMock.d.ts +14 -0
  26. package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +1 -6
  27. package/package.json +3 -3
  28. package/src/CrowdViewWidget/components/Chart/Chart.tsx +32 -90
  29. package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +5 -22
  30. package/src/CrowdViewWidget/components/Chart/getOption.ts +45 -70
  31. package/src/CrowdViewWidget/components/Chart/getOrderPositionDataMock.ts +66 -0
  32. package/src/CrowdViewWidget/components/Chart/types.ts +4 -6
  33. package/src/CrowdViewWidget/components/Chart/utils.ts +23 -20
@@ -0,0 +1,40 @@
1
+ export const getOrderPositionDataMock = _ref => {
2
+ let {
3
+ min = 1.3,
4
+ max = 2.1,
5
+ bucketWidth = 0.005,
6
+ baseValue,
7
+ crossoverValue = baseValue
8
+ } = _ref;
9
+ const results = [];
10
+ const maxDistance = Math.max(baseValue - min, max - baseValue);
11
+ for (let currentPrice = min; currentPrice < max; currentPrice += bucketWidth) {
12
+ const distance = Math.abs(currentPrice - baseValue);
13
+ const proximityFactor = 1 - distance / maxDistance;
14
+ const strongProximityFactor = Math.pow(proximityFactor, 2);
15
+ let shortCountPercent;
16
+ let longCountPercent;
17
+ if (currentPrice === baseValue) {
18
+ shortCountPercent = Math.random() * 0.5;
19
+ longCountPercent = Math.random() * 0.5;
20
+ } else {
21
+ const maxDifference = 0.5;
22
+ const targetDifference = Math.random() * maxDifference * strongProximityFactor;
23
+ const baseRandom = Math.random() * (0.5 - targetDifference);
24
+ if (currentPrice < crossoverValue) {
25
+ shortCountPercent = baseRandom;
26
+ longCountPercent = baseRandom + targetDifference;
27
+ } else {
28
+ longCountPercent = baseRandom;
29
+ shortCountPercent = baseRandom + targetDifference;
30
+ }
31
+ }
32
+ results.push({
33
+ shortCountPercent: Math.round(shortCountPercent * 10000) / 10000,
34
+ longCountPercent: Math.round(longCountPercent * 10000) / 10000,
35
+ price: currentPrice
36
+ });
37
+ }
38
+ return results;
39
+ };
40
+ //# sourceMappingURL=getOrderPositionDataMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderPositionDataMock.js","names":["getOrderPositionDataMock","_ref","min","max","bucketWidth","baseValue","crossoverValue","results","maxDistance","Math","currentPrice","distance","abs","proximityFactor","strongProximityFactor","pow","shortCountPercent","longCountPercent","random","maxDifference","targetDifference","baseRandom","push","round","price"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOrderPositionDataMock.ts"],"sourcesContent":["export interface OrderPositionData {\n shortCountPercent: number;\n longCountPercent: number;\n price: number;\n}\n\ninterface GetOrderPositionDataMockParams {\n min?: number;\n max?: number;\n bucketWidth?: number;\n baseValue: number;\n crossoverValue?: number;\n}\n\nexport const getOrderPositionDataMock = ({\n min = 1.3,\n max = 2.1,\n bucketWidth = 0.005,\n baseValue,\n crossoverValue = baseValue,\n}: GetOrderPositionDataMockParams): OrderPositionData[] => {\n const results: OrderPositionData[] = [];\n\n const maxDistance = Math.max(baseValue - min, max - baseValue);\n\n for (\n let currentPrice = min;\n currentPrice < max;\n currentPrice += bucketWidth\n ) {\n const distance = Math.abs(currentPrice - baseValue);\n\n const proximityFactor = 1 - distance / maxDistance;\n const strongProximityFactor = Math.pow(proximityFactor, 2);\n\n let shortCountPercent: number;\n let longCountPercent: number;\n\n if (currentPrice === baseValue) {\n shortCountPercent = Math.random() * 0.5;\n longCountPercent = Math.random() * 0.5;\n } else {\n const maxDifference = 0.5;\n const targetDifference =\n Math.random() * maxDifference * strongProximityFactor;\n\n const baseRandom = Math.random() * (0.5 - targetDifference);\n\n if (currentPrice < crossoverValue) {\n shortCountPercent = baseRandom;\n longCountPercent = baseRandom + targetDifference;\n } else {\n longCountPercent = baseRandom;\n shortCountPercent = baseRandom + targetDifference;\n }\n }\n\n results.push({\n shortCountPercent: Math.round(shortCountPercent * 10000) / 10000,\n longCountPercent: Math.round(longCountPercent * 10000) / 10000,\n price: currentPrice,\n });\n }\n\n return results;\n};\n"],"mappings":"AAcA,OAAO,MAAMA,wBAAwB,GAAGC,IAAA,IAMmB;EAAA,IANlB;IACvCC,GAAG,GAAG,GAAG;IACTC,GAAG,GAAG,GAAG;IACTC,WAAW,GAAG,KAAK;IACnBC,SAAS;IACTC,cAAc,GAAGD;EACa,CAAC,GAAAJ,IAAA;EAC/B,MAAMM,OAA4B,GAAG,EAAE;EAEvC,MAAMC,WAAW,GAAGC,IAAI,CAACN,GAAG,CAACE,SAAS,GAAGH,GAAG,EAAEC,GAAG,GAAGE,SAAS,CAAC;EAE9D,KACE,IAAIK,YAAY,GAAGR,GAAG,EACtBQ,YAAY,GAAGP,GAAG,EAClBO,YAAY,IAAIN,WAAW,EAC3B;IACA,MAAMO,QAAQ,GAAGF,IAAI,CAACG,GAAG,CAACF,YAAY,GAAGL,SAAS,CAAC;IAEnD,MAAMQ,eAAe,GAAG,CAAC,GAAGF,QAAQ,GAAGH,WAAW;IAClD,MAAMM,qBAAqB,GAAGL,IAAI,CAACM,GAAG,CAACF,eAAe,EAAE,CAAC,CAAC;IAE1D,IAAIG,iBAAyB;IAC7B,IAAIC,gBAAwB;IAE5B,IAAIP,YAAY,KAAKL,SAAS,EAAE;MAC9BW,iBAAiB,GAAGP,IAAI,CAACS,MAAM,CAAC,CAAC,GAAG,GAAG;MACvCD,gBAAgB,GAAGR,IAAI,CAACS,MAAM,CAAC,CAAC,GAAG,GAAG;IACxC,CAAC,MAAM;MACL,MAAMC,aAAa,GAAG,GAAG;MACzB,MAAMC,gBAAgB,GACpBX,IAAI,CAACS,MAAM,CAAC,CAAC,GAAGC,aAAa,GAAGL,qBAAqB;MAEvD,MAAMO,UAAU,GAAGZ,IAAI,CAACS,MAAM,CAAC,CAAC,IAAI,GAAG,GAAGE,gBAAgB,CAAC;MAE3D,IAAIV,YAAY,GAAGJ,cAAc,EAAE;QACjCU,iBAAiB,GAAGK,UAAU;QAC9BJ,gBAAgB,GAAGI,UAAU,GAAGD,gBAAgB;MAClD,CAAC,MAAM;QACLH,gBAAgB,GAAGI,UAAU;QAC7BL,iBAAiB,GAAGK,UAAU,GAAGD,gBAAgB;MACnD;IACF;IAEAb,OAAO,CAACe,IAAI,CAAC;MACXN,iBAAiB,EAAEP,IAAI,CAACc,KAAK,CAACP,iBAAiB,GAAG,KAAK,CAAC,GAAG,KAAK;MAChEC,gBAAgB,EAAER,IAAI,CAACc,KAAK,CAACN,gBAAgB,GAAG,KAAK,CAAC,GAAG,KAAK;MAC9DO,KAAK,EAAEd;IACT,CAAC,CAAC;EACJ;EAEA,OAAOH,OAAO;AAChB,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport type { EChartsOption } from 'echarts';\n\nimport type { BookType } from '../../../gql/types/graphql';\nimport type { GranularityId } from '../../types';\n\ninterface ChartOptionsProps {\n xAxisData: string[];\n ordersPositionsChartData: [\n // timestamp\n string,\n // price\n number,\n // orders-positions sentiment\n number,\n ][];\n ordersPositionsBucketWidth: number;\n candlesSeriesData: [number, number, number, number][];\n}\n\nexport type GetOptionType = (props: ChartOptionsProps) => EChartsOption;\nexport interface GetResponsiveOptionsProps {\n isDark: boolean;\n}\n\nexport interface ChartProps {\n data: ChartOptionsProps;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n instrument: string;\n granularity: GranularityId;\n}\n\ninterface TransformDataForChartTypeProps {\n data: GetOrderPositionBooksQuery;\n granularity: GranularityId;\n}\n\nexport type TransformDataForChartType = (\n props: TransformDataForChartTypeProps\n) => ChartOptionsProps;\n\nexport interface GetLabelsDataProps {\n xAxisData: string[];\n isGreaterThanTwoWeeks: boolean;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts';\n\nimport type { BookType } from '../../../gql/types/graphql';\nimport type { GranularityId } from '../../types';\n\ninterface ChartOptionsProps {\n xAxisData: string[];\n ordersPositionsChartData: [\n // timestamp\n string,\n // price\n number,\n // orders-positions sentiment\n number,\n ][];\n ordersPositionsBucketWidth: number;\n candlesSeriesData: [number, number, number, number][];\n}\n\nexport type GetOptionType = (\n props: ChartOptionsProps,\n isDark: boolean\n) => EChartsOption;\n\nexport interface ChartProps {\n data: ChartOptionsProps;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n instrument: string;\n granularity: GranularityId;\n}\n\ninterface TransformDataForChartTypeProps {\n granularity: GranularityId;\n}\n\nexport type TransformDataForChartType = (\n props: TransformDataForChartTypeProps\n) => ChartOptionsProps;\n\nexport interface GetLabelsDataProps {\n xAxisData: string[];\n isGreaterThanTwoWeeks: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { colorMap } from '../../config';
2
2
  import { TimeSpanId } from '../../types';
3
3
  import { CHART_HEIGHT } from './constants';
4
+ import { getOrderPositionDataMock } from './getOrderPositionDataMock';
4
5
  import { getPriceCandlesMock } from './getPriceCandlesMock';
5
6
  export const getRectColor = sentiment => {
6
7
  const colors = sentiment < 0 ? colorMap.short : colorMap.long;
@@ -58,19 +59,15 @@ const temporaryGranularityTimeSpanMap = {
58
59
  [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,
59
60
  [GranularityId.DAY_1]: TimeSpanId.MONTH_6
60
61
  };
61
- const mockOrderPositionDataForHistoricalData = (data, granularityId) => {
62
+ const mockXAxisData = granularityId => {
62
63
  const granularity = granularityInMilliseconds[granularityId];
63
64
  const timeSpan = timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];
64
- const currentTime = data.orderPositionBooks[0].time;
65
- const startDate = new Date(currentTime);
65
+ const currentTime = new Date();
66
+ const startDate = currentTime;
66
67
  const totalSteps = timeSpan / granularity;
67
68
  const orderPositionDataForHistorical = new Array(totalSteps).fill(null).map((_, index) => {
68
69
  const newDate = new Date(startDate.getTime() - index * granularity);
69
- return {
70
- time: `${newDate.toISOString().slice(0, 19)}Z`,
71
- buckets: data.orderPositionBooks[0].buckets,
72
- bucketWidth: data.orderPositionBooks[0].bucketWidth
73
- };
70
+ return `${newDate.toISOString().slice(0, 19)}Z`;
74
71
  }).reverse();
75
72
  return orderPositionDataForHistorical;
76
73
  };
@@ -116,37 +113,42 @@ export const isDifferenceGreaterThanTwoWeeks = (startDate, endDate) => {
116
113
  };
117
114
  export const transformDataForChart = _ref2 => {
118
115
  let {
119
- data,
120
116
  granularity
121
117
  } = _ref2;
122
- const mockedData = mockOrderPositionDataForHistoricalData(data, granularity);
123
- const xAxisData = mockedData.map(_ref3 => {
124
- let {
125
- time
126
- } = _ref3;
127
- return time;
118
+ const bucketWidth = 0.005;
119
+ const mockedXAxisData = mockXAxisData(granularity);
120
+ const mockedCandles = getPriceCandlesMock(mockedXAxisData.length);
121
+ const orderPositionData = mockedCandles.map((item, index) => {
122
+ return {
123
+ time: mockedXAxisData[index],
124
+ buckets: getOrderPositionDataMock({
125
+ baseValue: item.high,
126
+ bucketWidth,
127
+ crossoverValue: item.high + (Math.random() - 0.5) * 0.3
128
+ }),
129
+ bucketWidth: 0.005
130
+ };
128
131
  });
129
- const ordersPositionsChartData = mockedData.flatMap(_ref4 => {
132
+ const ordersPositionsChartData = orderPositionData.flatMap(_ref3 => {
130
133
  let {
131
134
  buckets,
132
135
  time
133
- } = _ref4;
136
+ } = _ref3;
134
137
  return buckets.map(bucket => [time, bucket.price, bucket.longCountPercent - bucket.shortCountPercent]);
135
138
  }).filter(item => Math.abs(item[2]) > 0.15);
136
- const mockedCandles = getPriceCandlesMock(xAxisData.length);
137
- const candlesSeriesData = mockedCandles.map(_ref5 => {
139
+ const candlesSeriesData = mockedCandles.map(_ref4 => {
138
140
  let {
139
141
  close,
140
142
  open,
141
143
  low,
142
144
  high
143
- } = _ref5;
145
+ } = _ref4;
144
146
  return [+close.toFixed(5), +open.toFixed(5), +low.toFixed(5), +high.toFixed(5)];
145
147
  });
146
148
  return {
147
- xAxisData,
149
+ xAxisData: mockedXAxisData,
148
150
  ordersPositionsChartData,
149
- ordersPositionsBucketWidth: mockedData[0].bucketWidth,
151
+ ordersPositionsBucketWidth: bucketWidth,
150
152
  candlesSeriesData,
151
153
  granularity
152
154
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["colorMap","TimeSpanId","CHART_HEIGHT","getPriceCandlesMock","getRectColor","sentiment","colors","short","long","absSentiment","Math","abs","GranularityId","timeSpansInMilliseconds","HOUR_1","HOUR_12","DAY_1","DAY_2","WEEK_1","WEEK_2","WEEK_3","MONTH_1","MONTH_3","MONTH_6","YEAR_1","YEAR_5","granularityInMilliseconds","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_4","temporaryGranularityTimeSpanMap","mockOrderPositionDataForHistoricalData","data","granularityId","granularity","timeSpan","currentTime","orderPositionBooks","time","startDate","Date","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","buckets","bucketWidth","reverse","getLabelData","_ref","xAxisData","isGreaterThanTwoWeeks","filter","record","arr","previousTimestamp","currentDate","previousDate","getDate","getMonth","item","name","toLocaleDateString","undefined","month","day","xAxis","y","silent","emphasis","disabled","label","fontFamily","fontSize","position","align","formatter","isDifferenceGreaterThanTwoWeeks","endDate","date1","date2","TWO_WEEKS_IN_MS","differenceInMs","transformDataForChart","_ref2","mockedData","_ref3","ordersPositionsChartData","flatMap","_ref4","bucket","price","longCountPercent","shortCountPercent","mockedCandles","length","candlesSeriesData","_ref5","close","open","low","high","toFixed","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\nimport { colorMap } from '../../config';\nimport { TimeSpanId } from '../../types';\nimport { CHART_HEIGHT } from './constants';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport type { GetLabelsDataProps, TransformDataForChartType } from './types';\n\nexport const getRectColor = (sentiment: number) => {\n const colors = sentiment < 0 ? colorMap.short : colorMap.long;\n const absSentiment = Math.abs(sentiment);\n\n if (absSentiment < 0.15) {\n return colors[3];\n }\n\n if (absSentiment < 0.25) {\n return colors[2];\n }\n\n if (absSentiment < 0.4) {\n return colors[1];\n }\n\n if (absSentiment >= 0.4) {\n return colors[0];\n }\n\n return 'transparent';\n};\n\nexport enum GranularityId {\n MINUTE_5 = 'MINUTE_5',\n MINUTE_15 = 'MINUTE_15',\n MINUTE_30 = 'MINUTE_30',\n HOUR_1 = 'HOUR_1',\n HOUR_4 = 'HOUR_4',\n DAY_1 = 'DAY_1',\n}\n\nconst timeSpansInMilliseconds: Record<TimeSpanId, number> = {\n [TimeSpanId.HOUR_1]: 60 * 60 * 1000,\n [TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,\n [TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,\n [TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,\n [TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000, // Approximation\n};\n\nconst granularityInMilliseconds: Record<GranularityId, number> = {\n [GranularityId.MINUTE_5]: 5 * 60 * 1000,\n [GranularityId.MINUTE_15]: 15 * 60 * 1000,\n [GranularityId.MINUTE_30]: 30 * 60 * 1000,\n [GranularityId.HOUR_1]: 60 * 60 * 1000,\n [GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,\n [GranularityId.DAY_1]: 24 * 60 * 60 * 1000,\n};\n\nconst temporaryGranularityTimeSpanMap: Record<GranularityId, TimeSpanId> = {\n [GranularityId.MINUTE_5]: TimeSpanId.DAY_2,\n [GranularityId.MINUTE_15]: TimeSpanId.WEEK_1,\n [GranularityId.MINUTE_30]: TimeSpanId.WEEK_2,\n [GranularityId.HOUR_1]: TimeSpanId.MONTH_1,\n [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,\n [GranularityId.DAY_1]: TimeSpanId.MONTH_6,\n};\n\nconst mockOrderPositionDataForHistoricalData = (\n data: GetOrderPositionBooksQuery,\n granularityId: GranularityId\n) => {\n const granularity = granularityInMilliseconds[granularityId];\n const timeSpan =\n timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];\n\n const currentTime = data.orderPositionBooks[0]!.time;\n\n const startDate = new Date(currentTime as string);\n const totalSteps = timeSpan / granularity;\n\n const orderPositionDataForHistorical = new Array(totalSteps)\n .fill(null)\n .map((_, index) => {\n const newDate = new Date(startDate.getTime() - index * granularity);\n\n return {\n time: `${newDate.toISOString().slice(0, 19)}Z`,\n buckets: data.orderPositionBooks[0]!.buckets,\n bucketWidth: data.orderPositionBooks[0]!.bucketWidth,\n };\n })\n .reverse();\n\n return orderPositionDataForHistorical;\n};\n\nexport const getLabelData = ({\n xAxisData,\n isGreaterThanTwoWeeks,\n}: GetLabelsDataProps) =>\n xAxisData\n .filter((record, index, arr) => {\n if (index === 0) {\n return false;\n }\n const previousTimestamp = arr[index - 1];\n const currentDate = new Date(record);\n const previousDate = new Date(previousTimestamp);\n\n return isGreaterThanTwoWeeks\n ? currentDate.getDate() !== previousDate.getDate()\n : currentDate.getMonth() !== previousDate.getMonth();\n })\n .map((item) => ({\n name: new Date(item).toLocaleDateString(undefined, {\n month: 'short',\n day: isGreaterThanTwoWeeks ? 'numeric' : undefined,\n }),\n xAxis: item,\n y: CHART_HEIGHT - 22,\n silent: true,\n emphasis: {\n disabled: true,\n },\n label: {\n fontFamily: 'Sofia W03',\n fontSize: 10,\n position: 'bottom',\n align: 'center',\n formatter: '{b}',\n },\n }));\n\nexport const isDifferenceGreaterThanTwoWeeks = (\n startDate: string,\n endDate: string\n) => {\n const date1 = new Date(startDate);\n const date2 = new Date(endDate);\n\n const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;\n\n const differenceInMs = Math.abs(date2.getTime() - date1.getTime());\n\n return differenceInMs < TWO_WEEKS_IN_MS;\n};\n\nexport const transformDataForChart: TransformDataForChartType = ({\n data,\n granularity,\n}) => {\n const mockedData = mockOrderPositionDataForHistoricalData(data, granularity);\n\n const xAxisData = mockedData.map(({ time }) => time);\n const ordersPositionsChartData = mockedData\n .flatMap(\n ({ buckets, time }) =>\n buckets.map((bucket) => [\n time,\n bucket!.price,\n bucket!.longCountPercent - bucket!.shortCountPercent,\n ]) as [string, number, number][]\n )\n .filter((item) => Math.abs(item[2]) > 0.15);\n\n const mockedCandles = getPriceCandlesMock(xAxisData.length);\n\n const candlesSeriesData: [number, number, number, number][] =\n mockedCandles.map(({ close, open, low, high }) => [\n +close.toFixed(5),\n +open.toFixed(5),\n +low.toFixed(5),\n +high.toFixed(5),\n ]);\n\n return {\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: mockedData[0]!.bucketWidth,\n candlesSeriesData,\n granularity,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["colorMap","TimeSpanId","CHART_HEIGHT","getOrderPositionDataMock","getPriceCandlesMock","getRectColor","sentiment","colors","short","long","absSentiment","Math","abs","GranularityId","timeSpansInMilliseconds","HOUR_1","HOUR_12","DAY_1","DAY_2","WEEK_1","WEEK_2","WEEK_3","MONTH_1","MONTH_3","MONTH_6","YEAR_1","YEAR_5","granularityInMilliseconds","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_4","temporaryGranularityTimeSpanMap","mockXAxisData","granularityId","granularity","timeSpan","currentTime","Date","startDate","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","reverse","getLabelData","_ref","xAxisData","isGreaterThanTwoWeeks","filter","record","arr","previousTimestamp","currentDate","previousDate","getDate","getMonth","item","name","toLocaleDateString","undefined","month","day","xAxis","y","silent","emphasis","disabled","label","fontFamily","fontSize","position","align","formatter","isDifferenceGreaterThanTwoWeeks","endDate","date1","date2","TWO_WEEKS_IN_MS","differenceInMs","transformDataForChart","_ref2","bucketWidth","mockedXAxisData","mockedCandles","length","orderPositionData","time","buckets","baseValue","high","crossoverValue","random","ordersPositionsChartData","flatMap","_ref3","bucket","price","longCountPercent","shortCountPercent","candlesSeriesData","_ref4","close","open","low","toFixed","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import { colorMap } from '../../config';\nimport { TimeSpanId } from '../../types';\nimport { CHART_HEIGHT } from './constants';\nimport { getOrderPositionDataMock } from './getOrderPositionDataMock';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport type { GetLabelsDataProps, TransformDataForChartType } from './types';\n\nexport const getRectColor = (sentiment: number) => {\n const colors = sentiment < 0 ? colorMap.short : colorMap.long;\n const absSentiment = Math.abs(sentiment);\n\n if (absSentiment < 0.15) {\n return colors[3];\n }\n\n if (absSentiment < 0.25) {\n return colors[2];\n }\n\n if (absSentiment < 0.4) {\n return colors[1];\n }\n\n if (absSentiment >= 0.4) {\n return colors[0];\n }\n\n return 'transparent';\n};\n\nexport enum GranularityId {\n MINUTE_5 = 'MINUTE_5',\n MINUTE_15 = 'MINUTE_15',\n MINUTE_30 = 'MINUTE_30',\n HOUR_1 = 'HOUR_1',\n HOUR_4 = 'HOUR_4',\n DAY_1 = 'DAY_1',\n}\n\nconst timeSpansInMilliseconds: Record<TimeSpanId, number> = {\n [TimeSpanId.HOUR_1]: 60 * 60 * 1000,\n [TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,\n [TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,\n [TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,\n [TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000, // Approximation\n};\n\nconst granularityInMilliseconds: Record<GranularityId, number> = {\n [GranularityId.MINUTE_5]: 5 * 60 * 1000,\n [GranularityId.MINUTE_15]: 15 * 60 * 1000,\n [GranularityId.MINUTE_30]: 30 * 60 * 1000,\n [GranularityId.HOUR_1]: 60 * 60 * 1000,\n [GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,\n [GranularityId.DAY_1]: 24 * 60 * 60 * 1000,\n};\n\nconst temporaryGranularityTimeSpanMap: Record<GranularityId, TimeSpanId> = {\n [GranularityId.MINUTE_5]: TimeSpanId.DAY_2,\n [GranularityId.MINUTE_15]: TimeSpanId.WEEK_1,\n [GranularityId.MINUTE_30]: TimeSpanId.WEEK_2,\n [GranularityId.HOUR_1]: TimeSpanId.MONTH_1,\n [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,\n [GranularityId.DAY_1]: TimeSpanId.MONTH_6,\n};\n\nconst mockXAxisData = (granularityId: GranularityId) => {\n const granularity = granularityInMilliseconds[granularityId];\n const timeSpan =\n timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];\n\n const currentTime = new Date();\n\n const startDate = currentTime;\n const totalSteps = timeSpan / granularity;\n\n const orderPositionDataForHistorical = new Array(totalSteps)\n .fill(null)\n .map((_, index) => {\n const newDate = new Date(startDate.getTime() - index * granularity);\n\n return `${newDate.toISOString().slice(0, 19)}Z`;\n })\n .reverse();\n\n return orderPositionDataForHistorical;\n};\n\nexport const getLabelData = ({\n xAxisData,\n isGreaterThanTwoWeeks,\n}: GetLabelsDataProps) =>\n xAxisData\n .filter((record, index, arr) => {\n if (index === 0) {\n return false;\n }\n const previousTimestamp = arr[index - 1];\n const currentDate = new Date(record);\n const previousDate = new Date(previousTimestamp);\n\n return isGreaterThanTwoWeeks\n ? currentDate.getDate() !== previousDate.getDate()\n : currentDate.getMonth() !== previousDate.getMonth();\n })\n .map((item) => ({\n name: new Date(item).toLocaleDateString(undefined, {\n month: 'short',\n day: isGreaterThanTwoWeeks ? 'numeric' : undefined,\n }),\n xAxis: item,\n y: CHART_HEIGHT - 22,\n silent: true,\n emphasis: {\n disabled: true,\n },\n label: {\n fontFamily: 'Sofia W03',\n fontSize: 10,\n position: 'bottom',\n align: 'center',\n formatter: '{b}',\n },\n }));\n\nexport const isDifferenceGreaterThanTwoWeeks = (\n startDate: string,\n endDate: string\n) => {\n const date1 = new Date(startDate);\n const date2 = new Date(endDate);\n\n const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;\n\n const differenceInMs = Math.abs(date2.getTime() - date1.getTime());\n\n return differenceInMs < TWO_WEEKS_IN_MS;\n};\n\nexport const transformDataForChart: TransformDataForChartType = ({\n granularity,\n}) => {\n const bucketWidth = 0.005;\n const mockedXAxisData = mockXAxisData(granularity);\n const mockedCandles = getPriceCandlesMock(mockedXAxisData.length);\n\n const orderPositionData = mockedCandles.map((item, index) => {\n return {\n time: mockedXAxisData[index],\n buckets: getOrderPositionDataMock({\n baseValue: item.high,\n bucketWidth,\n crossoverValue: item.high + (Math.random() - 0.5) * 0.3,\n }),\n bucketWidth: 0.005,\n };\n });\n\n const ordersPositionsChartData = orderPositionData\n .flatMap(\n ({ buckets, time }) =>\n buckets.map((bucket) => [\n time,\n bucket!.price,\n bucket!.longCountPercent - bucket!.shortCountPercent,\n ]) as [string, number, number][]\n )\n .filter((item) => Math.abs(item[2]) > 0.15);\n\n const candlesSeriesData: [number, number, number, number][] =\n mockedCandles.map(({ close, open, low, high }) => [\n +close.toFixed(5),\n +open.toFixed(5),\n +low.toFixed(5),\n +high.toFixed(5),\n ]);\n\n return {\n xAxisData: mockedXAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: bucketWidth,\n candlesSeriesData,\n granularity,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,115 +1,2 @@
1
- import type { GetOptionType, GetResponsiveOptionsProps } from './types';
2
- export declare const getDesktopOption: ({ isDark }: GetResponsiveOptionsProps) => {
3
- yAxis: {
4
- nameTextStyle: {
5
- align: string;
6
- padding: number[];
7
- };
8
- axisLabel: {
9
- margin: number;
10
- };
11
- };
12
- grid: {
13
- name: string;
14
- top: string;
15
- left: string;
16
- right: string;
17
- bottom: string;
18
- }[];
19
- graphic: ({
20
- top: number | undefined;
21
- bottom: number | undefined;
22
- left: number | undefined;
23
- right: number | undefined;
24
- shape: {
25
- x1: number;
26
- y1: number;
27
- x2: number;
28
- y2: number;
29
- };
30
- type: string;
31
- silent: boolean;
32
- z: number;
33
- style: {
34
- stroke: string;
35
- lineWidth: number;
36
- };
37
- } | {
38
- top: number;
39
- shape: {
40
- x1: number;
41
- y1: number;
42
- x2: number;
43
- y2: number;
44
- };
45
- type: string;
46
- silent: boolean;
47
- z: number;
48
- style: {
49
- stroke: string;
50
- lineWidth: number;
51
- };
52
- } | {
53
- right: number;
54
- shape: {
55
- x1: number;
56
- y1: number;
57
- x2: number;
58
- y2: number;
59
- };
60
- type: string;
61
- silent: boolean;
62
- z: number;
63
- style: {
64
- stroke: string;
65
- lineWidth: number;
66
- };
67
- } | {
68
- bottom: number;
69
- shape: {
70
- x1: number;
71
- y1: number;
72
- x2: number;
73
- y2: number;
74
- };
75
- type: string;
76
- silent: boolean;
77
- z: number;
78
- style: {
79
- stroke: string;
80
- lineWidth: number;
81
- };
82
- } | {
83
- left: number;
84
- shape: {
85
- x1: number;
86
- y1: number;
87
- x2: number;
88
- y2: number;
89
- };
90
- type: string;
91
- silent: boolean;
92
- z: number;
93
- style: {
94
- stroke: string;
95
- lineWidth: number;
96
- };
97
- } | {
98
- top: number;
99
- right: number;
100
- shape: {
101
- x1: number;
102
- y1: number;
103
- x2: number;
104
- y2: number;
105
- };
106
- type: string;
107
- silent: boolean;
108
- z: number;
109
- style: {
110
- stroke: string;
111
- lineWidth: number;
112
- };
113
- })[];
114
- };
1
+ import type { GetOptionType } from './types';
115
2
  export declare const getOption: GetOptionType;
@@ -0,0 +1,14 @@
1
+ export interface OrderPositionData {
2
+ shortCountPercent: number;
3
+ longCountPercent: number;
4
+ price: number;
5
+ }
6
+ interface GetOrderPositionDataMockParams {
7
+ min?: number;
8
+ max?: number;
9
+ bucketWidth?: number;
10
+ baseValue: number;
11
+ crossoverValue?: number;
12
+ }
13
+ export declare const getOrderPositionDataMock: ({ min, max, bucketWidth, baseValue, crossoverValue, }: GetOrderPositionDataMockParams) => OrderPositionData[];
14
+ export {};
@@ -1,4 +1,3 @@
1
- import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';
2
1
  import type { EChartsOption } from 'echarts';
3
2
  import type { BookType } from '../../../gql/types/graphql';
4
3
  import type { GranularityId } from '../../types';
@@ -12,10 +11,7 @@ interface ChartOptionsProps {
12
11
  ordersPositionsBucketWidth: number;
13
12
  candlesSeriesData: [number, number, number, number][];
14
13
  }
15
- export type GetOptionType = (props: ChartOptionsProps) => EChartsOption;
16
- export interface GetResponsiveOptionsProps {
17
- isDark: boolean;
18
- }
14
+ export type GetOptionType = (props: ChartOptionsProps, isDark: boolean) => EChartsOption;
19
15
  export interface ChartProps {
20
16
  data: ChartOptionsProps;
21
17
  }
@@ -25,7 +21,6 @@ export interface ChartWithDataProps {
25
21
  granularity: GranularityId;
26
22
  }
27
23
  interface TransformDataForChartTypeProps {
28
- data: GetOrderPositionBooksQuery;
29
24
  granularity: GranularityId;
30
25
  }
31
26
  export type TransformDataForChartType = (props: TransformDataForChartTypeProps) => ChartOptionsProps;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oanda/labs-crowd-view-widget",
3
- "version": "1.0.36",
3
+ "version": "1.0.37",
4
4
  "description": "Labs Crowd View Widget",
5
5
  "main": "dist/main/index.js",
6
6
  "module": "dist/module/index.js",
@@ -12,7 +12,7 @@
12
12
  "author": "OANDA",
13
13
  "license": "UNLICENSED",
14
14
  "dependencies": {
15
- "@oanda/labs-widget-common": "^1.0.218",
15
+ "@oanda/labs-widget-common": "^1.0.219",
16
16
  "@oanda/mono-i18n": "10.0.1",
17
17
  "graphql": "16.8.1"
18
18
  },
@@ -20,5 +20,5 @@
20
20
  "@graphql-codegen/cli": "5.0.0",
21
21
  "@graphql-codegen/client-preset": "4.1.0"
22
22
  },
23
- "gitHead": "7a07df3d3cadc0733696bb4579b520fe54eacee0"
23
+ "gitHead": "39a4ba7320ad2596a931ebc3b19cda09da14f9de"
24
24
  }
@@ -1,10 +1,10 @@
1
- import type { BaseChartRef } from '@oanda/labs-widget-common';
2
1
  import {
3
2
  BaseChart,
4
3
  getChartTheme,
5
4
  Theme,
6
5
  useLayoutProvider,
7
6
  } from '@oanda/labs-widget-common';
7
+ import type { EChartsType } from 'echarts';
8
8
  import { BarChart, CandlestickChart, CustomChart } from 'echarts/charts';
9
9
  import {
10
10
  DataZoomInsideComponent,
@@ -15,10 +15,10 @@ import {
15
15
  } from 'echarts/components';
16
16
  import * as echarts from 'echarts/core';
17
17
  import { CanvasRenderer } from 'echarts/renderers';
18
- import React, { useEffect, useRef } from 'react';
18
+ import React from 'react';
19
19
 
20
- import { CHART_HEIGHT, MAX_LABELS_COUNT } from './constants';
21
- import { getDesktopOption, getOption } from './getOption';
20
+ import { CHART_HEIGHT } from './constants';
21
+ import { getOption } from './getOption';
22
22
  import type { ChartProps } from './types';
23
23
  import { getLabelData, isDifferenceGreaterThanTwoWeeks } from './utils';
24
24
 
@@ -39,77 +39,33 @@ echarts.registerTheme('light_theme', getChartTheme(Theme.Light));
39
39
 
40
40
  const Chart = ({ data }: ChartProps) => {
41
41
  const { isDark } = useLayoutProvider();
42
- const echartRef = useRef<BaseChartRef | null>(null);
43
42
 
44
- useEffect(() => {
45
- if (echartRef.current) {
46
- const echartInstance = echartRef.current.getEchartsInstance();
47
-
48
- echartInstance.setOption(getDesktopOption({ isDark }));
49
-
50
- echartInstance.off('datazoom');
51
- echartInstance.on('datazoom', () => {
52
- const {
53
- dataZoom,
54
- // @ts-ignore
55
- title: { text },
56
- } = echartInstance.getOption();
57
-
58
- const { start, end } = (
59
- dataZoom as { start: number; end: number }[]
60
- )[0];
61
- const prevInterval = Number((text as string).split(',')[0]);
62
- const prevIsGreaterThanTwoWeeks = Boolean(
63
- Number((text as string).split(',')[1])
64
- );
65
-
66
- const visibleItemsCount = Math.round(
67
- (data.xAxisData.length * (end - start)) / 100
68
- );
69
-
70
- const interval =
71
- visibleItemsCount > MAX_LABELS_COUNT
72
- ? Math.floor(visibleItemsCount / MAX_LABELS_COUNT)
73
- : 0;
74
-
75
- if (interval !== prevInterval) {
76
- echartInstance.setOption({
77
- xAxis: {
78
- axisLabel: {
79
- interval,
80
- },
81
- },
82
- });
83
- }
43
+ return (
44
+ <BaseChart
45
+ chartHeight={CHART_HEIGHT}
46
+ echarts={echarts}
47
+ isDark={isDark}
48
+ lazyUpdate={true}
49
+ option={getOption(data, isDark)}
50
+ onEvents={{
51
+ datazoom: (_params: unknown, instance: EChartsType) => {
52
+ const { dataZoom } = instance.getOption();
84
53
 
85
- const visibleXAxisData = data.xAxisData.slice(
86
- (data.xAxisData.length * start) / 100,
87
- (data.xAxisData.length * end) / 100
88
- );
54
+ const { startValue, endValue } = (
55
+ dataZoom as { startValue: number; endValue: number }[]
56
+ )[0];
89
57
 
90
- const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(
91
- visibleXAxisData[0],
92
- visibleXAxisData[visibleXAxisData.length - 1]
93
- );
58
+ const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(
59
+ data.xAxisData[startValue],
60
+ data.xAxisData[endValue]
61
+ );
94
62
 
95
- if (isGreaterThanTwoWeeks !== prevIsGreaterThanTwoWeeks) {
96
63
  const labelsData = getLabelData({
97
64
  xAxisData: data.xAxisData,
98
65
  isGreaterThanTwoWeeks,
99
66
  });
100
67
 
101
- echartInstance.setOption({
102
- series: [
103
- {
104
- id: 'candlestick',
105
- markPoint: {
106
- data: labelsData,
107
- },
108
- },
109
- ],
110
- });
111
-
112
- echartInstance.setOption({
68
+ instance.setOption({
113
69
  xAxis: {
114
70
  axisLabel: {
115
71
  formatter: (value: string) => {
@@ -125,31 +81,17 @@ const Chart = ({ data }: ChartProps) => {
125
81
  },
126
82
  },
127
83
  },
84
+ series: [
85
+ {
86
+ id: 'candlestick',
87
+ markPoint: {
88
+ data: labelsData,
89
+ },
90
+ },
91
+ ],
128
92
  });
129
- }
130
-
131
- if (
132
- interval !== prevInterval ||
133
- isGreaterThanTwoWeeks !== prevIsGreaterThanTwoWeeks
134
- ) {
135
- echartInstance.setOption({
136
- title: {
137
- text: `${interval},${isGreaterThanTwoWeeks ? 1 : 0}`,
138
- },
139
- });
140
- }
141
- });
142
- }
143
- }, [echartRef, isDark, data]);
144
-
145
- return (
146
- <BaseChart
147
- ref={echartRef}
148
- chartHeight={CHART_HEIGHT}
149
- echarts={echarts}
150
- isDark={isDark}
151
- lazyUpdate={true}
152
- option={getOption(data)}
93
+ },
94
+ }}
153
95
  />
154
96
  );
155
97
  };
@@ -1,8 +1,3 @@
1
- import { useQuery } from '@apollo/client';
2
- import type {
3
- GetOrderPositionBooksQuery,
4
- GetOrderPositionBooksQueryVariables,
5
- } from '@oanda/labs-order-book-widget/src/gql/types/graphql';
6
1
  import {
7
2
  ChartError,
8
3
  Size,
@@ -13,7 +8,6 @@ import {
13
8
  import classnames from 'classnames';
14
9
  import React, { useMemo } from 'react';
15
10
 
16
- import { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';
17
11
  import { Chart } from './Chart';
18
12
  import type { ChartWithDataProps } from './types';
19
13
  import { transformDataForChart } from './utils';
@@ -26,24 +20,13 @@ const ChartWithData = ({
26
20
  const { size } = useLayoutProvider();
27
21
  const isDesktop = size === Size.DESKTOP;
28
22
 
29
- const { loading, data, error } = useQuery<
30
- GetOrderPositionBooksQuery,
31
- GetOrderPositionBooksQueryVariables
32
- >(getOrderPositionBooks, {
33
- variables: {
34
- instrument,
35
- bookType,
36
- recentHours: 1,
37
- },
38
- fetchPolicy: 'network-only',
39
- });
40
-
41
- const isError = !!error;
23
+ const isError = false;
24
+ const loading = false;
42
25
 
43
26
  const transformedData = useMemo(() => {
44
- if (!data) return undefined;
45
- return transformDataForChart({ data, granularity });
46
- }, [data, granularity]);
27
+ return transformDataForChart({ granularity });
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
29
+ }, [instrument, granularity, bookType]);
47
30
 
48
31
  return (
49
32
  <>