@tradingaction/series 2.0.13

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 (119) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +5 -0
  3. package/lib/AlternateDataSeries.d.ts +5 -0
  4. package/lib/AlternateDataSeries.js +16 -0
  5. package/lib/AlternateDataSeries.js.map +1 -0
  6. package/lib/AlternatingFillAreaSeries.d.ts +77 -0
  7. package/lib/AlternatingFillAreaSeries.js +69 -0
  8. package/lib/AlternatingFillAreaSeries.js.map +1 -0
  9. package/lib/AreaOnlySeries.d.ts +42 -0
  10. package/lib/AreaOnlySeries.js +53 -0
  11. package/lib/AreaOnlySeries.js.map +1 -0
  12. package/lib/AreaSeries.d.ts +46 -0
  13. package/lib/AreaSeries.js +21 -0
  14. package/lib/AreaSeries.js.map +1 -0
  15. package/lib/BarSeries.d.ts +36 -0
  16. package/lib/BarSeries.js +91 -0
  17. package/lib/BarSeries.js.map +1 -0
  18. package/lib/BollingerSeries.d.ts +33 -0
  19. package/lib/BollingerSeries.js +59 -0
  20. package/lib/BollingerSeries.js.map +1 -0
  21. package/lib/CandlestickSeries.d.ts +65 -0
  22. package/lib/CandlestickSeries.js +115 -0
  23. package/lib/CandlestickSeries.js.map +1 -0
  24. package/lib/ElderRaySeries.d.ts +45 -0
  25. package/lib/ElderRaySeries.js +66 -0
  26. package/lib/ElderRaySeries.js.map +1 -0
  27. package/lib/GroupedBarSeries.d.ts +33 -0
  28. package/lib/GroupedBarSeries.js +22 -0
  29. package/lib/GroupedBarSeries.js.map +1 -0
  30. package/lib/KagiSeries.d.ts +45 -0
  31. package/lib/KagiSeries.js +108 -0
  32. package/lib/KagiSeries.js.map +1 -0
  33. package/lib/LineSeries.d.ts +84 -0
  34. package/lib/LineSeries.js +102 -0
  35. package/lib/LineSeries.js.map +1 -0
  36. package/lib/MACDSeries.d.ts +55 -0
  37. package/lib/MACDSeries.js +62 -0
  38. package/lib/MACDSeries.js.map +1 -0
  39. package/lib/OHLCSeries.d.ts +32 -0
  40. package/lib/OHLCSeries.js +67 -0
  41. package/lib/OHLCSeries.js.map +1 -0
  42. package/lib/OverlayBarSeries.d.ts +35 -0
  43. package/lib/OverlayBarSeries.js +71 -0
  44. package/lib/OverlayBarSeries.js.map +1 -0
  45. package/lib/PointAndFigureSeries.d.ts +33 -0
  46. package/lib/PointAndFigureSeries.js +92 -0
  47. package/lib/PointAndFigureSeries.js.map +1 -0
  48. package/lib/RSISeries.d.ts +68 -0
  49. package/lib/RSISeries.js +82 -0
  50. package/lib/RSISeries.js.map +1 -0
  51. package/lib/RenkoSeries.d.ts +42 -0
  52. package/lib/RenkoSeries.js +65 -0
  53. package/lib/RenkoSeries.js.map +1 -0
  54. package/lib/SARSeries.d.ts +34 -0
  55. package/lib/SARSeries.js +69 -0
  56. package/lib/SARSeries.js.map +1 -0
  57. package/lib/SVGComponent.d.ts +8 -0
  58. package/lib/SVGComponent.js +9 -0
  59. package/lib/SVGComponent.js.map +1 -0
  60. package/lib/ScatterSeries.d.ts +24 -0
  61. package/lib/ScatterSeries.js +60 -0
  62. package/lib/ScatterSeries.js.map +1 -0
  63. package/lib/StackedBarSeries.d.ts +44 -0
  64. package/lib/StackedBarSeries.js +157 -0
  65. package/lib/StackedBarSeries.js.map +1 -0
  66. package/lib/StochasticSeries.d.ts +39 -0
  67. package/lib/StochasticSeries.js +42 -0
  68. package/lib/StochasticSeries.js.map +1 -0
  69. package/lib/StraightLine.d.ts +38 -0
  70. package/lib/StraightLine.js +81 -0
  71. package/lib/StraightLine.js.map +1 -0
  72. package/lib/VolumeProfileSeries.d.ts +45 -0
  73. package/lib/VolumeProfileSeries.js +161 -0
  74. package/lib/VolumeProfileSeries.js.map +1 -0
  75. package/lib/index.d.ts +23 -0
  76. package/lib/index.js +24 -0
  77. package/lib/index.js.map +1 -0
  78. package/lib/markers/CircleMarker.d.ts +25 -0
  79. package/lib/markers/CircleMarker.js +35 -0
  80. package/lib/markers/CircleMarker.js.map +1 -0
  81. package/lib/markers/SquareMarker.d.ts +25 -0
  82. package/lib/markers/SquareMarker.js +37 -0
  83. package/lib/markers/SquareMarker.js.map +1 -0
  84. package/lib/markers/TriangleMarker.d.ts +27 -0
  85. package/lib/markers/TriangleMarker.js +89 -0
  86. package/lib/markers/TriangleMarker.js.map +1 -0
  87. package/lib/markers/index.d.ts +3 -0
  88. package/lib/markers/index.js +4 -0
  89. package/lib/markers/index.js.map +1 -0
  90. package/package.json +52 -0
  91. package/src/AlternateDataSeries.tsx +29 -0
  92. package/src/AlternatingFillAreaSeries.tsx +159 -0
  93. package/src/AreaOnlySeries.tsx +106 -0
  94. package/src/AreaSeries.tsx +95 -0
  95. package/src/BarSeries.tsx +151 -0
  96. package/src/BollingerSeries.tsx +90 -0
  97. package/src/CandlestickSeries.tsx +188 -0
  98. package/src/ElderRaySeries.tsx +99 -0
  99. package/src/GroupedBarSeries.tsx +48 -0
  100. package/src/KagiSeries.tsx +155 -0
  101. package/src/LineSeries.tsx +223 -0
  102. package/src/MACDSeries.tsx +110 -0
  103. package/src/OHLCSeries.tsx +116 -0
  104. package/src/OverlayBarSeries.tsx +115 -0
  105. package/src/PointAndFigureSeries.tsx +140 -0
  106. package/src/RSISeries.tsx +158 -0
  107. package/src/RenkoSeries.tsx +118 -0
  108. package/src/SARSeries.tsx +111 -0
  109. package/src/SVGComponent.tsx +13 -0
  110. package/src/ScatterSeries.tsx +105 -0
  111. package/src/StackedBarSeries.tsx +272 -0
  112. package/src/StochasticSeries.tsx +70 -0
  113. package/src/StraightLine.tsx +166 -0
  114. package/src/VolumeProfileSeries.tsx +247 -0
  115. package/src/index.ts +23 -0
  116. package/src/markers/CircleMarker.tsx +69 -0
  117. package/src/markers/SquareMarker.tsx +71 -0
  118. package/src/markers/TriangleMarker.tsx +131 -0
  119. package/src/markers/index.ts +3 -0
@@ -0,0 +1,102 @@
1
+ import { getClosestItemIndexes, getStrokeDasharrayCanvas, getAxisCanvas, getMouseCanvas, GenericChartComponent, } from "@tradingaction/core";
2
+ import { line } from "d3-shape";
3
+ import * as React from "react";
4
+ /**
5
+ * `LineSeries` component.
6
+ */
7
+ export class LineSeries extends React.Component {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.drawOnCanvas = (lineDash) => (ctx, moreProps) => {
11
+ const { connectNulls, yAccessor, hoverStrokeWidth = LineSeries.defaultProps.hoverStrokeWidth, defined = LineSeries.defaultProps.defined, curve, canvasClip, strokeStyle, strokeWidth = LineSeries.defaultProps.strokeWidth, } = this.props;
12
+ const { xAccessor, xScale, chartConfig, plotData, hovering } = moreProps;
13
+ if (!chartConfig) {
14
+ console.warn("LineSeries received no chartConfig, is it inside of a Chart?");
15
+ return;
16
+ }
17
+ const { yScale } = chartConfig;
18
+ if (canvasClip !== undefined) {
19
+ ctx.save();
20
+ canvasClip(ctx, moreProps);
21
+ }
22
+ ctx.lineWidth = hovering ? hoverStrokeWidth : strokeWidth;
23
+ if (strokeStyle !== undefined) {
24
+ ctx.strokeStyle = strokeStyle;
25
+ }
26
+ if (lineDash !== undefined) {
27
+ ctx.setLineDash(lineDash);
28
+ }
29
+ const dataSeries = line()
30
+ .x((d) => Math.round(xScale(xAccessor(d))))
31
+ .y((d) => Math.round(yScale(yAccessor(d))));
32
+ if (curve !== undefined) {
33
+ dataSeries.curve(curve);
34
+ }
35
+ if (!connectNulls) {
36
+ dataSeries.defined((d) => defined(yAccessor(d)));
37
+ }
38
+ ctx.beginPath();
39
+ dataSeries.context(ctx)(plotData);
40
+ ctx.stroke();
41
+ if (canvasClip !== undefined) {
42
+ ctx.restore();
43
+ }
44
+ };
45
+ this.isHover = (moreProps) => {
46
+ const { highlightOnHover, yAccessor, hoverTolerance = LineSeries.defaultProps.hoverTolerance } = this.props;
47
+ if (!highlightOnHover) {
48
+ return false;
49
+ }
50
+ const { chartConfig: { yScale, origin }, xAccessor, mouseXY, currentItem, xScale, plotData, } = moreProps;
51
+ const [x, y] = mouseXY;
52
+ const radius = hoverTolerance;
53
+ const { left, right } = getClosestItemIndexes(plotData, xScale.invert(x), xAccessor);
54
+ if (left === right) {
55
+ const cy = yScale(yAccessor(currentItem)) + origin[1];
56
+ const cx = xScale(xAccessor(currentItem)) + origin[0];
57
+ const hovering1 = Math.pow(x - cx, 2) + Math.pow(y - cy, 2) < Math.pow(radius, 2);
58
+ return hovering1;
59
+ }
60
+ else {
61
+ const l = plotData[left];
62
+ const r = plotData[right];
63
+ const x1 = xScale(xAccessor(l)) + origin[0];
64
+ const y1 = yScale(yAccessor(l)) + origin[1];
65
+ const x2 = xScale(xAccessor(r)) + origin[0];
66
+ const y2 = yScale(yAccessor(r)) + origin[1];
67
+ // y = m * x + b
68
+ const m /* slope */ = (y2 - y1) / (x2 - x1);
69
+ const b /* y intercept */ = -1 * m * x1 + y1;
70
+ const desiredY = Math.round(m * x + b);
71
+ const hovering2 = y >= desiredY - radius && y <= desiredY + radius;
72
+ return hovering2;
73
+ }
74
+ };
75
+ }
76
+ render() {
77
+ const { highlightOnHover, onClick, onContextMenu, onDoubleClick, onHover, onUnHover, strokeDasharray } = this.props;
78
+ const hoverProps = highlightOnHover || onHover || onUnHover
79
+ ? {
80
+ isHover: this.isHover,
81
+ drawOn: ["mousemove", "pan"],
82
+ canvasToDraw: getMouseCanvas,
83
+ }
84
+ : {
85
+ drawOn: ["pan"],
86
+ canvasToDraw: getAxisCanvas,
87
+ };
88
+ const lineDash = getStrokeDasharrayCanvas(strokeDasharray);
89
+ return (React.createElement(GenericChartComponent, Object.assign({ canvasDraw: this.drawOnCanvas(lineDash), onClickWhenHover: onClick, onDoubleClickWhenHover: onDoubleClick, onContextMenuWhenHover: onContextMenu, onHover: onHover, onUnHover: onUnHover }, hoverProps)));
90
+ }
91
+ }
92
+ LineSeries.defaultProps = {
93
+ connectNulls: false,
94
+ defined: (d) => d !== undefined && !isNaN(d),
95
+ hoverStrokeWidth: 4,
96
+ hoverTolerance: 6,
97
+ highlightOnHover: false,
98
+ strokeDasharray: "Solid",
99
+ strokeStyle: "#2196f3",
100
+ strokeWidth: 1,
101
+ };
102
+ //# sourceMappingURL=LineSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineSeries.js","sourceRoot":"","sources":["../src/LineSeries.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { ScaleContinuousNumeric, ScaleTime } from "d3-scale";
2
+ import * as React from "react";
3
+ export interface MACDSeriesProps {
4
+ readonly className?: string;
5
+ readonly clip?: boolean;
6
+ readonly fillStyle?: {
7
+ divergence: string;
8
+ };
9
+ readonly strokeStyle?: {
10
+ macd: string;
11
+ signal: string;
12
+ zero: string;
13
+ };
14
+ readonly widthRatio?: number;
15
+ readonly width?: number | ((props: {
16
+ widthRatio: number;
17
+ }, moreProps: any) => number);
18
+ readonly yAccessor: (data: any) => {
19
+ divergence: number;
20
+ signal: number;
21
+ macd: number;
22
+ } | undefined;
23
+ readonly zeroLineStroke?: string;
24
+ readonly zeroLineOpacity?: number;
25
+ }
26
+ /**
27
+ * The MACD turns two trend-following indicators, moving averages, into a momentum oscillator by subtracting the longer moving average from the shorter one.
28
+ */
29
+ export declare class MACDSeries extends React.Component<MACDSeriesProps> {
30
+ static defaultProps: {
31
+ className: string;
32
+ clip: boolean;
33
+ fillStyle: {
34
+ divergence: string;
35
+ };
36
+ strokeStyle: {
37
+ macd: string;
38
+ signal: string;
39
+ zero: string;
40
+ };
41
+ widthRatio: number;
42
+ width: <T>(props: {
43
+ widthRatio: number;
44
+ }, moreProps: {
45
+ xAccessor: (datum: T) => number | Date;
46
+ xScale: ScaleContinuousNumeric<number, number, never> | ScaleTime<number, number, never>;
47
+ plotData: T[];
48
+ }) => number;
49
+ };
50
+ render(): JSX.Element;
51
+ private readonly yAccessorForDivergenceBase;
52
+ private readonly yAccessorForDivergence;
53
+ private readonly yAccessorForSignal;
54
+ private readonly yAccessorForMACD;
55
+ }
@@ -0,0 +1,62 @@
1
+ import * as React from "react";
2
+ import { BarSeries } from "./BarSeries";
3
+ import { LineSeries } from "./LineSeries";
4
+ import { StraightLine } from "./StraightLine";
5
+ /**
6
+ * The MACD turns two trend-following indicators, moving averages, into a momentum oscillator by subtracting the longer moving average from the shorter one.
7
+ */
8
+ export class MACDSeries extends React.Component {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.yAccessorForDivergenceBase = (xScale, yScale) => {
12
+ return yScale(0);
13
+ };
14
+ this.yAccessorForDivergence = (d) => {
15
+ const { yAccessor } = this.props;
16
+ const dataItem = yAccessor(d);
17
+ if (dataItem !== undefined) {
18
+ return dataItem.divergence;
19
+ }
20
+ return undefined;
21
+ };
22
+ this.yAccessorForSignal = (d) => {
23
+ const { yAccessor } = this.props;
24
+ const dataItem = yAccessor(d);
25
+ if (dataItem !== undefined) {
26
+ return dataItem.signal;
27
+ }
28
+ return undefined;
29
+ };
30
+ this.yAccessorForMACD = (d) => {
31
+ const { yAccessor } = this.props;
32
+ const dataItem = yAccessor(d);
33
+ if (dataItem !== undefined) {
34
+ return dataItem.macd;
35
+ }
36
+ return undefined;
37
+ };
38
+ }
39
+ render() {
40
+ const { className, clip, fillStyle = MACDSeries.defaultProps.fillStyle, strokeStyle = MACDSeries.defaultProps.strokeStyle, widthRatio, width, } = this.props;
41
+ return (React.createElement("g", { className: className },
42
+ React.createElement(BarSeries, { baseAt: this.yAccessorForDivergenceBase, width: width, widthRatio: widthRatio, fillStyle: fillStyle.divergence, clip: clip, yAccessor: this.yAccessorForDivergence }),
43
+ React.createElement(LineSeries, { yAccessor: this.yAccessorForMACD, strokeStyle: strokeStyle.macd }),
44
+ React.createElement(LineSeries, { yAccessor: this.yAccessorForSignal, strokeStyle: strokeStyle.signal }),
45
+ React.createElement(StraightLine, { strokeStyle: strokeStyle.zero, yValue: 0 })));
46
+ }
47
+ }
48
+ MACDSeries.defaultProps = {
49
+ className: "react-financial-charts-macd-series",
50
+ clip: true,
51
+ fillStyle: {
52
+ divergence: "rgba(70, 130, 180, 0.6)",
53
+ },
54
+ strokeStyle: {
55
+ macd: "#0093FF",
56
+ signal: "#D84315",
57
+ zero: "rgba(0, 0, 0, 0.3)",
58
+ },
59
+ widthRatio: 0.5,
60
+ width: BarSeries.defaultProps.width,
61
+ };
62
+ //# sourceMappingURL=MACDSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MACDSeries.js","sourceRoot":"","sources":["../src/MACDSeries.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoB9C;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK,CAAC,SAA0B;IAAhE;;QA2CqB,+BAA0B,GAAG,CAC1C,MAA0E,EAC1E,MAA8C,EAChD,EAAE;YACA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC;QAEe,2BAAsB,GAAG,CAAC,CAAM,EAAE,EAAE;YACjD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACxB,OAAO,QAAQ,CAAC,UAAU,CAAC;aAC9B;YAED,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QAEe,uBAAkB,GAAG,CAAC,CAAM,EAAE,EAAE;YAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACxB,OAAO,QAAQ,CAAC,MAAM,CAAC;aAC1B;YAED,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;QAEe,qBAAgB,GAAG,CAAC,CAAM,EAAE,EAAE;YAC3C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACxB,OAAO,QAAQ,CAAC,IAAI,CAAC;aACxB;YAED,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;IACN,CAAC;IAlEU,MAAM;QACT,MAAM,EACF,SAAS,EACT,IAAI,EACJ,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,EAC7C,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,EACjD,UAAU,EACV,KAAK,GACR,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,OAAO,CACH,2BAAG,SAAS,EAAE,SAAS;YACnB,oBAAC,SAAS,IACN,MAAM,EAAE,IAAI,CAAC,0BAA0B,EACvC,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,CAAC,UAAU,EAC/B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,IAAI,CAAC,sBAAsB,GACxC;YACF,oBAAC,UAAU,IAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,GAAI;YAC/E,oBAAC,UAAU,IAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,GAAI;YACnF,oBAAC,YAAY,IAAC,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAI,CAC1D,CACP,CAAC;IACN,CAAC;;AAxCa,uBAAY,GAAG;IACzB,SAAS,EAAE,oCAAoC;IAC/C,IAAI,EAAE,IAAI;IACV,SAAS,EAAE;QACP,UAAU,EAAE,yBAAyB;KACxC;IACD,WAAW,EAAE;QACT,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,oBAAoB;KAC7B;IACD,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK;CACtC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import * as React from "react";
2
+ interface IOHLC {
3
+ readonly close?: number;
4
+ readonly high?: number;
5
+ readonly low?: number;
6
+ readonly open?: number;
7
+ }
8
+ export interface OHLCSeriesProps {
9
+ readonly clip?: boolean;
10
+ readonly stroke?: string | ((datum: any) => string);
11
+ readonly strokeWidth?: number;
12
+ readonly yAccessor: (datum: any) => IOHLC;
13
+ }
14
+ export declare class OHLCSeries extends React.Component<OHLCSeriesProps> {
15
+ static defaultProps: {
16
+ yAccessor: (d: any) => {
17
+ open: any;
18
+ high: any;
19
+ low: any;
20
+ close: any;
21
+ };
22
+ classNames: (d: any) => "up" | "down" | "firstbar";
23
+ stroke: (d: any) => "#26a69a" | "#ef5350" | "#000000";
24
+ strokeWidth: number;
25
+ clip: boolean;
26
+ };
27
+ render(): JSX.Element;
28
+ private readonly drawOnCanvas;
29
+ private readonly getOHLCBars;
30
+ private readonly drawBarDataOnCanvas;
31
+ }
32
+ export {};
@@ -0,0 +1,67 @@
1
+ import { group } from "d3-array";
2
+ import * as React from "react";
3
+ import { functor, isDefined, getAxisCanvas, GenericChartComponent } from "@tradingaction/core";
4
+ export class OHLCSeries extends React.Component {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.drawOnCanvas = (ctx, moreProps) => {
8
+ const { xAccessor, xScale, chartConfig: { yScale }, plotData, } = moreProps;
9
+ const barData = this.getOHLCBars(this.props, xAccessor, xScale, yScale, plotData);
10
+ this.drawBarDataOnCanvas(ctx, barData);
11
+ };
12
+ this.getOHLCBars = (props, xAccessor, xScale, yScale, plotData) => {
13
+ const { stroke: strokeProp, strokeWidth: strokeWidthProp = 1, yAccessor } = props;
14
+ const strokeFunc = functor(strokeProp);
15
+ const width = xScale(xAccessor(plotData[plotData.length - 1])) - xScale(xAccessor(plotData[0]));
16
+ const barWidth = Math.max(1, Math.round(width / (plotData.length - 1) / 2) - 1.5);
17
+ const strokeWidth = Math.min(barWidth, strokeWidthProp);
18
+ const bars = plotData
19
+ .filter((d) => yAccessor(d).close !== undefined)
20
+ .map((d) => {
21
+ const ohlc = yAccessor(d);
22
+ const x = Math.round(xScale(xAccessor(d)));
23
+ const y1 = yScale(ohlc.high);
24
+ const y2 = yScale(ohlc.low);
25
+ const openX1 = x - barWidth;
26
+ const openX2 = x + strokeWidth / 2;
27
+ const openY = yScale(ohlc.open);
28
+ const closeX1 = x - strokeWidth / 2;
29
+ const closeX2 = x + barWidth;
30
+ const closeY = yScale(ohlc.close);
31
+ const stroke = strokeFunc(d);
32
+ return { x, y1, y2, openX1, openX2, openY, closeX1, closeX2, closeY, stroke };
33
+ });
34
+ return { barWidth, strokeWidth, bars };
35
+ };
36
+ this.drawBarDataOnCanvas = (ctx, barData) => {
37
+ const { strokeWidth, bars } = barData;
38
+ const wickNest = group(bars, (d) => d.stroke);
39
+ ctx.lineWidth = strokeWidth;
40
+ wickNest.forEach((values, key) => {
41
+ ctx.strokeStyle = key;
42
+ values.forEach((d) => {
43
+ ctx.beginPath();
44
+ ctx.moveTo(d.x, d.y1);
45
+ ctx.lineTo(d.x, d.y2);
46
+ ctx.moveTo(d.openX1, d.openY);
47
+ ctx.lineTo(d.openX2, d.openY);
48
+ ctx.moveTo(d.closeX1, d.closeY);
49
+ ctx.lineTo(d.closeX2, d.closeY);
50
+ ctx.stroke();
51
+ });
52
+ });
53
+ };
54
+ }
55
+ render() {
56
+ const { clip } = this.props;
57
+ return (React.createElement(GenericChartComponent, { canvasToDraw: getAxisCanvas, canvasDraw: this.drawOnCanvas, clip: clip, drawOn: ["pan"] }));
58
+ }
59
+ }
60
+ OHLCSeries.defaultProps = {
61
+ yAccessor: (d) => ({ open: d.open, high: d.high, low: d.low, close: d.close }),
62
+ classNames: (d) => (isDefined(d.absoluteChange) ? (d.absoluteChange > 0 ? "up" : "down") : "firstbar"),
63
+ stroke: (d) => (isDefined(d.absoluteChange) ? (d.absoluteChange > 0 ? "#26a69a" : "#ef5350") : "#000000"),
64
+ strokeWidth: 1,
65
+ clip: true,
66
+ };
67
+ //# sourceMappingURL=OHLCSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OHLCSeries.js","sourceRoot":"","sources":["../src/OHLCSeries.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { ScaleContinuousNumeric, ScaleTime } from "d3-scale";
2
+ import * as React from "react";
3
+ export interface OverlayBarSeriesProps {
4
+ readonly baseAt?: number | ((xScale: ScaleContinuousNumeric<number, number> | ScaleTime<number, number>, yScale: ScaleContinuousNumeric<number, number>, datum: any) => number);
5
+ readonly direction?: "up" | "down";
6
+ readonly stroke?: boolean;
7
+ readonly width?: any;
8
+ readonly widthRatio?: number;
9
+ readonly fillStyle?: string | ((data: any, y: number) => string);
10
+ readonly yAccessor: ((datum: any) => number | undefined)[];
11
+ readonly xScale?: ScaleContinuousNumeric<number, number>;
12
+ readonly yScale?: ScaleContinuousNumeric<number, number>;
13
+ readonly plotData?: number[];
14
+ readonly clip?: boolean;
15
+ }
16
+ export declare class OverlayBarSeries extends React.Component<OverlayBarSeriesProps> {
17
+ static defaultProps: {
18
+ baseAt: (xScale: ScaleContinuousNumeric<number, number>, yScale: ScaleContinuousNumeric<number, number>) => any;
19
+ clip: boolean;
20
+ direction: string;
21
+ stroke: boolean;
22
+ fillStyle: string;
23
+ widthRatio: number;
24
+ width: <T>(props: {
25
+ widthRatio: number;
26
+ }, moreProps: {
27
+ xAccessor: (datum: T) => number | Date;
28
+ xScale: ScaleContinuousNumeric<number, number, never> | ScaleTime<number, number, never>;
29
+ plotData: T[];
30
+ }) => number;
31
+ };
32
+ render(): JSX.Element;
33
+ private readonly drawOnCanvas;
34
+ private readonly getBars;
35
+ }
@@ -0,0 +1,71 @@
1
+ import { merge } from "d3-array";
2
+ import * as React from "react";
3
+ import { first, functor, getAxisCanvas, GenericChartComponent, plotDataLengthBarWidth } from "@tradingaction/core";
4
+ import { drawOnCanvas2 } from "./StackedBarSeries";
5
+ export class OverlayBarSeries extends React.Component {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.drawOnCanvas = (ctx, moreProps) => {
9
+ const bars = this.getBars(moreProps);
10
+ drawOnCanvas2(this.props, ctx, bars);
11
+ };
12
+ this.getBars = (moreProps) => {
13
+ const { xScale, xAccessor, chartConfig: { yScale }, plotData, } = moreProps;
14
+ const { baseAt, fillStyle, stroke, yAccessor } = this.props;
15
+ const getFill = functor(fillStyle);
16
+ const getBase = functor(baseAt);
17
+ const widthFunctor = functor(this.props.width);
18
+ const width = widthFunctor(this.props, moreProps);
19
+ const offset = Math.floor(0.5 * width);
20
+ const bars = plotData.map((d) => {
21
+ const innerBars = yAccessor
22
+ .map((eachYAccessor, i) => {
23
+ const yValue = eachYAccessor(d);
24
+ if (yValue === undefined) {
25
+ return undefined;
26
+ }
27
+ const xValue = xAccessor(d);
28
+ const x = Math.round(xScale(xValue)) - offset;
29
+ const y = yScale(yValue);
30
+ return {
31
+ height: 0,
32
+ width: offset * 2,
33
+ x,
34
+ y,
35
+ stroke: stroke ? getFill(d, i) : "none",
36
+ fillStyle: getFill(d, i),
37
+ i,
38
+ };
39
+ })
40
+ .filter((yValue) => yValue !== undefined);
41
+ let b = getBase(xScale, yScale, d);
42
+ let h;
43
+ for (let i = innerBars.length - 1; i >= 0; i--) {
44
+ h = b - innerBars[i].y;
45
+ if (h < 0) {
46
+ innerBars[i].y = b;
47
+ h = -1 * h;
48
+ }
49
+ innerBars[i].height = h;
50
+ b = innerBars[i].y;
51
+ }
52
+ return innerBars;
53
+ });
54
+ return merge(bars);
55
+ };
56
+ }
57
+ render() {
58
+ const { clip } = this.props;
59
+ return (React.createElement(GenericChartComponent, { canvasToDraw: getAxisCanvas, canvasDraw: this.drawOnCanvas, clip: clip, drawOn: ["pan"] }));
60
+ }
61
+ }
62
+ OverlayBarSeries.defaultProps = {
63
+ baseAt: (xScale, yScale) => first(yScale.range()),
64
+ clip: true,
65
+ direction: "up",
66
+ stroke: false,
67
+ fillStyle: "#4682B4",
68
+ widthRatio: 0.5,
69
+ width: plotDataLengthBarWidth,
70
+ };
71
+ //# sourceMappingURL=OverlayBarSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverlayBarSeries.js","sourceRoot":"","sources":["../src/OverlayBarSeries.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ export interface PointAndFigureSeriesProps {
3
+ readonly className?: string;
4
+ readonly clip?: boolean;
5
+ readonly fill?: {
6
+ up: string;
7
+ down: string;
8
+ };
9
+ readonly stroke?: {
10
+ up: string;
11
+ down: string;
12
+ };
13
+ readonly strokeWidth?: number;
14
+ }
15
+ export declare class PointAndFigureSeries extends React.Component<PointAndFigureSeriesProps> {
16
+ static defaultProps: {
17
+ className: string;
18
+ strokeWidth: number;
19
+ stroke: {
20
+ up: string;
21
+ down: string;
22
+ };
23
+ fill: {
24
+ up: string;
25
+ down: string;
26
+ };
27
+ clip: boolean;
28
+ };
29
+ render(): JSX.Element;
30
+ private readonly drawOnCanvas;
31
+ private readonly getColumns;
32
+ private readonly drawOnCanvasPrivate;
33
+ }
@@ -0,0 +1,92 @@
1
+ import * as React from "react";
2
+ import { isDefined, isNotDefined, getAxisCanvas, GenericChartComponent } from "@tradingaction/core";
3
+ export class PointAndFigureSeries extends React.Component {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.drawOnCanvas = (ctx, moreProps) => {
7
+ const { xAccessor, xScale, chartConfig: { yScale }, plotData, } = moreProps;
8
+ const columns = this.getColumns(xScale, xAccessor, yScale, plotData);
9
+ this.drawOnCanvasPrivate(ctx, this.props, columns);
10
+ };
11
+ this.getColumns = (xScale, xAccessor, yScale, plotData) => {
12
+ const width = xScale(xAccessor(plotData[plotData.length - 1])) - xScale(xAccessor(plotData[0]));
13
+ const columnWidth = width / (plotData.length - 1);
14
+ let anyBox;
15
+ let j = 0;
16
+ while (isNotDefined(anyBox)) {
17
+ if (isDefined(plotData[j].close)) {
18
+ anyBox = plotData[j].boxes[0];
19
+ }
20
+ else {
21
+ break;
22
+ }
23
+ j++;
24
+ }
25
+ const boxHeight = Math.abs(yScale(anyBox.open) - yScale(anyBox.close));
26
+ const columns = plotData
27
+ .filter((d) => isDefined(d.close))
28
+ .map((d) => {
29
+ const boxes = d.boxes.map((box) => ({
30
+ columnWidth,
31
+ boxHeight,
32
+ open: yScale(box.open),
33
+ close: yScale(box.close),
34
+ }));
35
+ const xOffset = xScale(xAccessor(d)) - columnWidth / 2;
36
+ return {
37
+ boxes,
38
+ direction: d.direction,
39
+ offset: [xOffset, 0],
40
+ };
41
+ });
42
+ return columns;
43
+ };
44
+ this.drawOnCanvasPrivate = (ctx, props, columns) => {
45
+ const { stroke, fill, strokeWidth } = props;
46
+ ctx.lineWidth = strokeWidth;
47
+ columns.forEach((col) => {
48
+ const [offsetX, offsetY] = col.offset;
49
+ col.boxes.forEach((box) => {
50
+ if (col.direction > 0) {
51
+ ctx.fillStyle = fill.up;
52
+ ctx.strokeStyle = stroke.up;
53
+ ctx.beginPath();
54
+ ctx.moveTo(offsetX, offsetY + box.open);
55
+ ctx.lineTo(offsetX + box.columnWidth, offsetY + box.close);
56
+ ctx.moveTo(offsetX, offsetY + box.close);
57
+ ctx.lineTo(offsetX + box.columnWidth, offsetY + box.open);
58
+ ctx.stroke();
59
+ }
60
+ else {
61
+ ctx.fillStyle = fill.down;
62
+ ctx.strokeStyle = stroke.down;
63
+ ctx.beginPath();
64
+ const [x, y] = [offsetX + box.columnWidth / 2, offsetY + box.open + box.boxHeight / 2];
65
+ const [rx, ry] = [box.columnWidth / 2, box.boxHeight / 2];
66
+ ctx.ellipse(x, y, rx, ry, 0, 0, 2 * Math.PI);
67
+ ctx.stroke();
68
+ }
69
+ });
70
+ });
71
+ ctx.stroke();
72
+ };
73
+ }
74
+ render() {
75
+ const { clip } = this.props;
76
+ return (React.createElement(GenericChartComponent, { clip: clip, canvasDraw: this.drawOnCanvas, canvasToDraw: getAxisCanvas, drawOn: ["pan"] }));
77
+ }
78
+ }
79
+ PointAndFigureSeries.defaultProps = {
80
+ className: "react-financial-charts-point-and-figure",
81
+ strokeWidth: 1,
82
+ stroke: {
83
+ up: "#6BA583",
84
+ down: "#FF0000",
85
+ },
86
+ fill: {
87
+ up: "none",
88
+ down: "none",
89
+ },
90
+ clip: true,
91
+ };
92
+ //# sourceMappingURL=PointAndFigureSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointAndFigureSeries.js","sourceRoot":"","sources":["../src/PointAndFigureSeries.tsx"],"names":[],"mappings":"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"}