@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,65 @@
1
+ import { ScaleContinuousNumeric, ScaleTime } from "d3-scale";
2
+ import * as React from "react";
3
+ export interface ICandle {
4
+ readonly x: number;
5
+ readonly y: number;
6
+ readonly height: number;
7
+ readonly fill: string;
8
+ readonly stroke: string;
9
+ readonly direction: number;
10
+ readonly width: number;
11
+ readonly wick: {
12
+ readonly stroke: string;
13
+ readonly x: number;
14
+ readonly y1: number;
15
+ readonly y2: number;
16
+ readonly y3: number;
17
+ readonly y4: number;
18
+ };
19
+ }
20
+ export interface CandlestickSeriesProps {
21
+ readonly candleStrokeWidth?: number;
22
+ readonly clip?: boolean;
23
+ readonly fill?: string | ((data: any) => string);
24
+ readonly stroke?: string | ((data: any) => string);
25
+ readonly wickStroke?: string | ((data: any) => string);
26
+ readonly width?: number | ((props: CandlestickSeriesProps, moreProps: any) => number);
27
+ readonly widthRatio?: number;
28
+ readonly yAccessor: (data: any) => {
29
+ open: number;
30
+ high: number;
31
+ low: number;
32
+ close: number;
33
+ } | undefined;
34
+ readonly onClickWhenHover?: (e: React.MouseEvent, moreProps: any) => void;
35
+ readonly onDoubleClickWhenHover?: (e: React.MouseEvent, moreProps: any) => void;
36
+ readonly onDoubleClick?: (e: React.MouseEvent, moreProps: any) => void;
37
+ readonly onContextMenu?: (e: React.MouseEvent, moreProps: any) => void;
38
+ readonly onClickOutside?: (e: React.MouseEvent, moreProps: any) => void;
39
+ }
40
+ export declare class CandlestickSeries extends React.Component<CandlestickSeriesProps> {
41
+ static defaultProps: {
42
+ candleStrokeWidth: number;
43
+ clip: boolean;
44
+ fill: (d: any) => "#26a69a" | "#ef5350";
45
+ stroke: string;
46
+ wickStroke: (d: any) => "#26a69a" | "#ef5350";
47
+ width: <T>(props: {
48
+ widthRatio: number;
49
+ }, moreProps: {
50
+ xAccessor: (datum: T) => number | Date;
51
+ xScale: ScaleContinuousNumeric<number, number, never> | ScaleTime<number, number, never>;
52
+ plotData: T[];
53
+ }) => number;
54
+ widthRatio: number;
55
+ yAccessor: (d: any) => {
56
+ open: any;
57
+ high: any;
58
+ low: any;
59
+ close: any;
60
+ };
61
+ };
62
+ render(): JSX.Element;
63
+ private readonly drawOnCanvas;
64
+ private readonly getCandleData;
65
+ }
@@ -0,0 +1,115 @@
1
+ import { functor, getAxisCanvas, GenericChartComponent, plotDataLengthBarWidth } from "@tradingaction/core";
2
+ import { group } from "d3-array";
3
+ import * as React from "react";
4
+ export class CandlestickSeries extends React.Component {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.drawOnCanvas = (ctx, moreProps) => {
8
+ const { candleStrokeWidth = CandlestickSeries.defaultProps.candleStrokeWidth } = this.props;
9
+ const { xScale, chartConfig: { yScale }, plotData, xAccessor, } = moreProps;
10
+ const candleData = this.getCandleData(xAccessor, xScale, yScale, plotData);
11
+ const wickNest = group(candleData, (d) => d.wick.stroke);
12
+ wickNest.forEach((values, key) => {
13
+ ctx.fillStyle = key;
14
+ values.forEach((each) => {
15
+ const d = each.wick;
16
+ ctx.fillRect(d.x - 0.5, d.y1, 1, d.y2 - d.y1);
17
+ ctx.fillRect(d.x - 0.5, d.y3, 1, d.y4 - d.y3);
18
+ });
19
+ });
20
+ const candleNest = group(candleData, (d) => d.stroke,
21
+ // @ts-ignore typings are incorrect for d3-array
22
+ (d) => d.fill);
23
+ candleNest.forEach((strokeValues, strokeKey) => {
24
+ if (strokeKey !== "none") {
25
+ // @ts-ignore
26
+ ctx.strokeStyle = strokeKey;
27
+ ctx.lineWidth = candleStrokeWidth;
28
+ }
29
+ strokeValues.forEach((values, key) => {
30
+ // @ts-ignore
31
+ ctx.fillStyle = key;
32
+ // @ts-ignore
33
+ values.forEach((d) => {
34
+ if (d.width <= 1) {
35
+ ctx.fillRect(d.x - 0.5, d.y, 1, d.height);
36
+ }
37
+ else if (d.height === 0) {
38
+ ctx.fillRect(d.x - 0.5, d.y, d.width, 1);
39
+ }
40
+ else {
41
+ ctx.fillRect(d.x - 0.5, d.y, d.width, d.height);
42
+ if (strokeKey !== "none") {
43
+ ctx.strokeRect(d.x, d.y, d.width, d.height);
44
+ }
45
+ }
46
+ });
47
+ });
48
+ });
49
+ };
50
+ this.getCandleData = (xAccessor, xScale, yScale, plotData) => {
51
+ const { fill: fillProp, stroke: strokeProp, yAccessor, wickStroke: wickStrokeProp } = this.props;
52
+ const fill = functor(fillProp);
53
+ const stroke = functor(strokeProp);
54
+ const wickStroke = functor(wickStrokeProp);
55
+ const widthFunctor = functor(this.props.width);
56
+ const width = widthFunctor(this.props, {
57
+ xScale,
58
+ xAccessor,
59
+ plotData,
60
+ });
61
+ const offset = 0.5 * width;
62
+ return plotData
63
+ .filter((d) => {
64
+ const ohlc = yAccessor(d);
65
+ if (ohlc === undefined) {
66
+ return false;
67
+ }
68
+ return true;
69
+ })
70
+ .map((d) => {
71
+ const ohlc = yAccessor(d);
72
+ if (ohlc === undefined) {
73
+ return undefined;
74
+ }
75
+ const xValue = xAccessor(d);
76
+ const x = xScale(xValue);
77
+ const y = Math.round(yScale(Math.max(ohlc.open, ohlc.close)));
78
+ const height = Math.max(1, Math.round(Math.abs(yScale(ohlc.open) - yScale(ohlc.close))));
79
+ return {
80
+ x: x - offset,
81
+ y,
82
+ wick: {
83
+ stroke: wickStroke(ohlc),
84
+ x,
85
+ y1: Math.round(yScale(ohlc.high)),
86
+ y2: y,
87
+ y3: y + height,
88
+ y4: Math.round(yScale(ohlc.low)),
89
+ },
90
+ height,
91
+ width: offset * 2,
92
+ fill: fill(ohlc),
93
+ stroke: stroke(ohlc),
94
+ direction: ohlc.close - ohlc.open,
95
+ };
96
+ })
97
+ .filter((d) => d !== undefined);
98
+ };
99
+ }
100
+ render() {
101
+ const { clip } = this.props;
102
+ return (React.createElement(GenericChartComponent, { clip: clip, canvasDraw: this.drawOnCanvas, canvasToDraw: getAxisCanvas, drawOn: ["pan", "mousemove"], onClickWhenHover: this.props.onClickWhenHover, onDoubleClickWhenHover: this.props.onDoubleClickWhenHover, onDoubleClick: this.props.onDoubleClick, onContextMenu: this.props.onContextMenu, onClickOutside: this.props.onClickOutside, key: "candle" }));
103
+ }
104
+ }
105
+ CandlestickSeries.defaultProps = {
106
+ candleStrokeWidth: 0.5,
107
+ clip: true,
108
+ fill: (d) => (d.close > d.open ? "#26a69a" : "#ef5350"),
109
+ stroke: "none",
110
+ wickStroke: (d) => (d.close > d.open ? "#26a69a" : "#ef5350"),
111
+ width: plotDataLengthBarWidth,
112
+ widthRatio: 0.8,
113
+ yAccessor: (d) => ({ open: d.open, high: d.high, low: d.low, close: d.close }),
114
+ };
115
+ //# sourceMappingURL=CandlestickSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CandlestickSeries.js","sourceRoot":"","sources":["../src/CandlestickSeries.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAoC/B,MAAM,OAAO,iBAAkB,SAAQ,KAAK,CAAC,SAAiC;IAA9E;;QA+BqB,iBAAY,GAAG,CAAC,GAA6B,EAAE,SAAc,EAAE,EAAE;YAC9E,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5F,MAAM,EACF,MAAM,EACN,WAAW,EAAE,EAAE,MAAM,EAAE,EACvB,QAAQ,EACR,SAAS,GACZ,GAAG,SAAS,CAAC;YAEd,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE3E,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEzD,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC7B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;gBACpB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;oBAEpB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC9C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,KAAK,CACpB,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;YACf,gDAAgD;YAChD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAChB,CAAC;YAEF,UAAU,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE;gBAC3C,IAAI,SAAS,KAAK,MAAM,EAAE;oBACtB,aAAa;oBACb,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;oBAC5B,GAAG,CAAC,SAAS,GAAG,iBAAiB,CAAC;iBACrC;gBACD,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACjC,aAAa;oBACb,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;oBAEpB,aAAa;oBACb,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBACjB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;4BACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;yBAC7C;6BAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;4BACvB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;yBAC5C;6BAAM;4BACH,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;4BAChD,IAAI,SAAS,KAAK,MAAM,EAAE;gCACtB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;6BAC/C;yBACJ;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEe,kBAAa,GAAG,CAC7B,SAAuC,EACvC,MAA0E,EAC1E,MAA8C,EAC9C,QAAe,EACjB,EAAE;YACA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjG,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnC,MAAM;gBACN,SAAS;gBACT,QAAQ;aACX,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;YAE3B,OAAO,QAAQ;iBACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACV,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,IAAI,KAAK,SAAS,EAAE;oBACpB,OAAO,KAAK,CAAC;iBAChB;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;iBACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACP,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,IAAI,KAAK,SAAS,EAAE;oBACpB,OAAO,SAAS,CAAC;iBACpB;gBAED,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEzF,OAAO;oBACH,CAAC,EAAE,CAAC,GAAG,MAAM;oBACb,CAAC;oBACD,IAAI,EAAE;wBACF,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;wBACxB,CAAC;wBACD,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjC,EAAE,EAAE,CAAC;wBACL,EAAE,EAAE,CAAC,GAAG,MAAM;wBACd,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACnC;oBACD,MAAM;oBACN,KAAK,EAAE,MAAM,GAAG,CAAC;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;oBACpB,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;iBACpC,CAAC;YACN,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAc,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAxIU,MAAM;QACT,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5B,OAAO,CACH,oBAAC,qBAAqB,IAClB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,IAAI,CAAC,YAAY,EAC7B,YAAY,EAAE,aAAa,EAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,EAC5B,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAC7C,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,EACzD,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EACvC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EACvC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EACzC,GAAG,EAAE,QAAQ,GACf,CACL,CAAC;IACN,CAAC;;AA5Ba,8BAAY,GAAG;IACzB,iBAAiB,EAAE,GAAG;IACtB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,KAAK,EAAE,sBAAsB;IAC7B,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;CACtF,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { strokeDashTypes } from "@tradingaction/core";
2
+ import * as React from "react";
3
+ export interface ElderRaySeriesProps {
4
+ readonly fillStyle?: {
5
+ bearPower: string;
6
+ bullPower: string;
7
+ };
8
+ readonly className?: string;
9
+ readonly clip?: boolean;
10
+ readonly stroke?: boolean;
11
+ readonly straightLineStrokeStyle?: string;
12
+ readonly straightLineStrokeDasharray?: strokeDashTypes;
13
+ readonly widthRatio?: number;
14
+ readonly yAccessor: (data: any) => {
15
+ bearPower: number;
16
+ bullPower: number;
17
+ };
18
+ }
19
+ /**
20
+ * This indicator consists of three separate indicators
21
+ * known as "bull power" and "bear power", which are derived from a 13-period
22
+ * exponential moving average (EMA). The three indicator help traders determine
23
+ * the trend direction and isolate spots to enter and exit trades.
24
+ */
25
+ export declare class ElderRaySeries extends React.Component<ElderRaySeriesProps> {
26
+ static defaultProps: {
27
+ fillStyle: {
28
+ bearPower: string;
29
+ bullPower: string;
30
+ };
31
+ className: string;
32
+ clip: boolean;
33
+ stroke: boolean;
34
+ straightLineStrokeStyle: string;
35
+ straightLineStrokeDasharray: string;
36
+ widthRatio: number;
37
+ };
38
+ render(): JSX.Element;
39
+ private readonly yAccessorBullTop;
40
+ private readonly yAccessorBearTop;
41
+ private readonly yAccessorBullBottom;
42
+ private readonly yAccessorBearBottom;
43
+ private readonly yAccessorForBarBase;
44
+ private readonly fillForEachBar;
45
+ }
@@ -0,0 +1,66 @@
1
+ import * as React from "react";
2
+ import { OverlayBarSeries } from "./OverlayBarSeries";
3
+ import { StraightLine } from "./StraightLine";
4
+ /**
5
+ * This indicator consists of three separate indicators
6
+ * known as "bull power" and "bear power", which are derived from a 13-period
7
+ * exponential moving average (EMA). The three indicator help traders determine
8
+ * the trend direction and isolate spots to enter and exit trades.
9
+ */
10
+ export class ElderRaySeries extends React.Component {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.yAccessorBullTop = (d) => {
14
+ const { yAccessor } = this.props;
15
+ return yAccessor(d) && (yAccessor(d).bullPower > 0 ? yAccessor(d).bullPower : undefined);
16
+ };
17
+ this.yAccessorBearTop = (d) => {
18
+ const { yAccessor } = this.props;
19
+ return yAccessor(d) && (yAccessor(d).bearPower > 0 ? yAccessor(d).bearPower : undefined);
20
+ };
21
+ this.yAccessorBullBottom = (d) => {
22
+ const { yAccessor } = this.props;
23
+ return yAccessor(d) && (yAccessor(d).bullPower < 0 ? 0 : undefined);
24
+ };
25
+ this.yAccessorBearBottom = (d) => {
26
+ const { yAccessor } = this.props;
27
+ return (yAccessor(d) &&
28
+ (yAccessor(d).bullPower < 0 || yAccessor(d).bullPower * yAccessor(d).bearPower < 0 // bullPower is +ve and bearPower is -ve
29
+ ? Math.min(0, yAccessor(d).bullPower)
30
+ : undefined));
31
+ };
32
+ this.yAccessorForBarBase = (_, yScale, d) => {
33
+ const { yAccessor } = this.props;
34
+ const y = yAccessor(d) && Math.min(yAccessor(d).bearPower, 0);
35
+ return yScale(y);
36
+ };
37
+ this.fillForEachBar = (_, yAccessorNumber) => {
38
+ const { fillStyle } = this.props;
39
+ return yAccessorNumber % 2 === 0 ? fillStyle.bullPower : fillStyle.bearPower;
40
+ };
41
+ }
42
+ render() {
43
+ const { className, clip, stroke, straightLineStrokeStyle, straightLineStrokeDasharray, widthRatio } = this.props;
44
+ return (React.createElement("g", { className: className },
45
+ React.createElement(OverlayBarSeries, { baseAt: this.yAccessorForBarBase, stroke: stroke, fillStyle: this.fillForEachBar, widthRatio: widthRatio, clip: clip, yAccessor: [
46
+ this.yAccessorBullTop,
47
+ this.yAccessorBearTop,
48
+ this.yAccessorBullBottom,
49
+ this.yAccessorBearBottom,
50
+ ] }),
51
+ React.createElement(StraightLine, { yValue: 0, strokeStyle: straightLineStrokeStyle, lineDash: straightLineStrokeDasharray })));
52
+ }
53
+ }
54
+ ElderRaySeries.defaultProps = {
55
+ fillStyle: {
56
+ bearPower: "rgba(239, 83, 80, 0.7)",
57
+ bullPower: "rgba(38, 166, 153, 0.7)",
58
+ },
59
+ className: "react-financial-charts-elderray-series",
60
+ clip: true,
61
+ stroke: true,
62
+ straightLineStrokeStyle: "rgba(0, 0, 0, 0.7)",
63
+ straightLineStrokeDasharray: "Dash",
64
+ widthRatio: 0.8,
65
+ };
66
+ //# sourceMappingURL=ElderRaySeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElderRaySeries.js","sourceRoot":"","sources":["../src/ElderRaySeries.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ScaleContinuousNumeric, ScaleTime } from "d3-scale";
2
+ import * as React from "react";
3
+ export interface GroupedBarSeriesProps {
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 fillStyle?: string | ((data: any) => string);
7
+ readonly spaceBetweenBar?: number;
8
+ readonly stroke: boolean;
9
+ readonly widthRatio?: number;
10
+ readonly yAccessor: ((data: any) => number | undefined) | ((d: any) => number)[];
11
+ }
12
+ export declare class GroupedBarSeries extends React.Component<GroupedBarSeriesProps> {
13
+ static defaultProps: {
14
+ spaceBetweenBar: number;
15
+ widthRatio: number;
16
+ baseAt: (xScale: ScaleContinuousNumeric<number, number, never>, yScale: ScaleContinuousNumeric<number, number, never>) => any;
17
+ direction: string;
18
+ stroke: boolean;
19
+ fillStyle: string;
20
+ width: <T>(props: {
21
+ widthRatio: number;
22
+ }, moreProps: {
23
+ xAccessor: (datum: T) => number | Date;
24
+ xScale: ScaleContinuousNumeric<number, number, never> | ScaleTime<number, number, never>;
25
+ plotData: T[];
26
+ }) => number;
27
+ clip: boolean;
28
+ swapScales: boolean;
29
+ };
30
+ render(): JSX.Element;
31
+ private readonly drawOnCanvas;
32
+ private readonly postProcessor;
33
+ }
@@ -0,0 +1,22 @@
1
+ import { getAxisCanvas, GenericChartComponent } from "@tradingaction/core";
2
+ import * as React from "react";
3
+ import { drawOnCanvasHelper, identityStack, StackedBarSeries } from "./StackedBarSeries";
4
+ export class GroupedBarSeries extends React.Component {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.drawOnCanvas = (ctx, moreProps) => {
8
+ const { xAccessor } = moreProps;
9
+ drawOnCanvasHelper(ctx, this.props, moreProps, xAccessor, identityStack, this.postProcessor);
10
+ };
11
+ this.postProcessor = (array) => {
12
+ return array.map((each) => {
13
+ return Object.assign(Object.assign({}, each), { x: each.x + each.offset - each.groupOffset, width: each.groupWidth });
14
+ });
15
+ };
16
+ }
17
+ render() {
18
+ return React.createElement(GenericChartComponent, { canvasDraw: this.drawOnCanvas, canvasToDraw: getAxisCanvas, drawOn: ["pan"] });
19
+ }
20
+ }
21
+ GroupedBarSeries.defaultProps = Object.assign(Object.assign({}, StackedBarSeries.defaultProps), { spaceBetweenBar: 5, widthRatio: 0.8 });
22
+ //# sourceMappingURL=GroupedBarSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupedBarSeries.js","sourceRoot":"","sources":["../src/GroupedBarSeries.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAkBzF,MAAM,OAAO,gBAAiB,SAAQ,KAAK,CAAC,SAAgC;IAA5E;;QAWqB,iBAAY,GAAG,CAAC,GAA6B,EAAE,SAAc,EAAE,EAAE;YAC9E,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;YAEhC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACjG,CAAC,CAAC;QAEe,kBAAa,GAAG,CAAC,KAAY,EAAE,EAAE;YAC9C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtB,uCACO,IAAI,KACP,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAC1C,KAAK,EAAE,IAAI,CAAC,UAAU,IACxB;YACN,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;IACN,CAAC;IAnBU,MAAM;QACT,OAAO,oBAAC,qBAAqB,IAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAI,CAAC;IAClH,CAAC;;AARa,6BAAY,mCACnB,gBAAgB,CAAC,YAAY,KAChC,eAAe,EAAE,CAAC,EAClB,UAAU,EAAE,GAAG,IACjB"}
@@ -0,0 +1,45 @@
1
+ import * as React from "react";
2
+ export interface KagiSeriesProps {
3
+ /**
4
+ * Current value stroke
5
+ */
6
+ readonly currentValueStroke?: string;
7
+ /**
8
+ * Fill values.
9
+ */
10
+ readonly fill: {
11
+ yang: string;
12
+ yin: string;
13
+ };
14
+ /**
15
+ * Stroke values.
16
+ */
17
+ readonly stroke: {
18
+ yang: string;
19
+ yin: string;
20
+ };
21
+ /**
22
+ * Stroke width.
23
+ */
24
+ readonly strokeWidth?: number;
25
+ }
26
+ /**
27
+ * `KagiSeries` tracks price movement mostly independantly of time.
28
+ */
29
+ export declare class KagiSeries extends React.Component<KagiSeriesProps> {
30
+ static defaultProps: {
31
+ currentValueStroke: string;
32
+ fill: {
33
+ yang: string;
34
+ yin: string;
35
+ };
36
+ stroke: {
37
+ yang: string;
38
+ yin: string;
39
+ };
40
+ strokeWidth: number;
41
+ };
42
+ render(): JSX.Element;
43
+ private readonly drawOnCanvas;
44
+ private readonly helper;
45
+ }
@@ -0,0 +1,108 @@
1
+ import * as React from "react";
2
+ import { isDefined, isNotDefined, getAxisCanvas, GenericChartComponent } from "@tradingaction/core";
3
+ /**
4
+ * `KagiSeries` tracks price movement mostly independantly of time.
5
+ */
6
+ export class KagiSeries extends React.Component {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.drawOnCanvas = (ctx, moreProps) => {
10
+ const { stroke, strokeWidth, currentValueStroke } = this.props;
11
+ const { xAccessor, xScale, chartConfig: { yScale }, plotData, } = moreProps;
12
+ const paths = this.helper(plotData, xAccessor);
13
+ let begin = true;
14
+ paths.forEach((each) => {
15
+ // @ts-ignore
16
+ ctx.strokeStyle = stroke[each.type];
17
+ if (strokeWidth !== undefined) {
18
+ ctx.lineWidth = strokeWidth;
19
+ }
20
+ ctx.beginPath();
21
+ let prevX;
22
+ each.plot.forEach((d) => {
23
+ const [x1, y] = [xScale(d[0]), yScale(d[1])];
24
+ if (begin) {
25
+ ctx.moveTo(x1, y);
26
+ begin = false;
27
+ }
28
+ else {
29
+ if (isDefined(prevX)) {
30
+ ctx.lineTo(prevX, y);
31
+ }
32
+ ctx.lineTo(x1, y);
33
+ }
34
+ prevX = x1;
35
+ });
36
+ ctx.stroke();
37
+ });
38
+ const lastPlot = paths[paths.length - 1].plot;
39
+ const last = lastPlot[lastPlot.length - 1];
40
+ ctx.beginPath();
41
+ ctx.lineWidth = 1;
42
+ const [x, y1, y2] = [xScale(last[0]), yScale(last[2]), yScale(last[3])];
43
+ ctx.moveTo(x, y1);
44
+ ctx.lineTo(x + 10, y1);
45
+ ctx.stroke();
46
+ ctx.beginPath();
47
+ if (currentValueStroke !== undefined) {
48
+ ctx.strokeStyle = currentValueStroke;
49
+ }
50
+ ctx.moveTo(x - 10, y2);
51
+ ctx.lineTo(x, y2);
52
+ ctx.stroke();
53
+ };
54
+ this.helper = (plotData, xAccessor) => {
55
+ const kagiLine = [];
56
+ let kagi = {};
57
+ let d = plotData[0];
58
+ let idx = xAccessor(d);
59
+ // tslint:disable-next-line: prefer-for-of
60
+ for (let i = 0; i < plotData.length; i++) {
61
+ d = plotData[i];
62
+ if (isNotDefined(d.close)) {
63
+ continue;
64
+ }
65
+ if (isNotDefined(kagi.type)) {
66
+ kagi.type = d.startAs;
67
+ }
68
+ if (isNotDefined(kagi.plot)) {
69
+ kagi.plot = [];
70
+ }
71
+ idx = xAccessor(d);
72
+ kagi.plot.push([idx, d.open]);
73
+ if (isDefined(d.changeTo)) {
74
+ kagi.plot.push([idx, d.changePoint]);
75
+ kagi.added = true;
76
+ kagiLine.push(kagi);
77
+ kagi = {
78
+ type: d.changeTo,
79
+ plot: [],
80
+ added: false,
81
+ };
82
+ kagi.plot.push([idx, d.changePoint]);
83
+ }
84
+ }
85
+ if (!kagi.added) {
86
+ kagi.plot.push([idx, d.close, d.current, d.reverseAt]);
87
+ kagiLine.push(kagi);
88
+ }
89
+ return kagiLine;
90
+ };
91
+ }
92
+ render() {
93
+ return React.createElement(GenericChartComponent, { canvasToDraw: getAxisCanvas, canvasDraw: this.drawOnCanvas, drawOn: ["pan"] });
94
+ }
95
+ }
96
+ KagiSeries.defaultProps = {
97
+ currentValueStroke: "#000000",
98
+ fill: {
99
+ yang: "none",
100
+ yin: "none",
101
+ },
102
+ stroke: {
103
+ yang: "#26a69a",
104
+ yin: "#ef5350",
105
+ },
106
+ strokeWidth: 2,
107
+ };
108
+ //# sourceMappingURL=KagiSeries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KagiSeries.js","sourceRoot":"","sources":["../src/KagiSeries.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { strokeDashTypes } from "@tradingaction/core";
2
+ import { CurveFactoryLineOnly, CurveFactory } from "d3-shape";
3
+ import * as React from "react";
4
+ export interface LineSeriesProps {
5
+ readonly canvasClip?: (context: CanvasRenderingContext2D, moreProps: any) => void;
6
+ /**
7
+ * Wether to connect the line between undefined data points.
8
+ */
9
+ readonly connectNulls?: boolean;
10
+ /**
11
+ * A factory for a curve generator for the line.
12
+ */
13
+ readonly curve?: CurveFactory | CurveFactoryLineOnly;
14
+ /**
15
+ * Function to decide if a data point has been defined.
16
+ */
17
+ readonly defined?: (d: number | undefined) => boolean;
18
+ /**
19
+ * Whether to highlight the line when within the `hoverTolerance`.
20
+ */
21
+ readonly highlightOnHover?: boolean;
22
+ /**
23
+ * Width to increase the line to on hover.
24
+ */
25
+ readonly hoverStrokeWidth?: number;
26
+ /**
27
+ * The distance between the cursor and the closest point in the line.
28
+ */
29
+ readonly hoverTolerance?: number;
30
+ /**
31
+ * Click handler.
32
+ */
33
+ readonly onClick?: (e: React.MouseEvent, moreProps: any) => void;
34
+ /**
35
+ * Double click handler.
36
+ */
37
+ readonly onDoubleClick?: (e: React.MouseEvent, moreProps: any) => void;
38
+ /**
39
+ * Hover handler.
40
+ */
41
+ readonly onHover?: (e: React.MouseEvent, moreProps: any) => void;
42
+ /**
43
+ * Unhover handler.
44
+ */
45
+ readonly onUnHover?: (e: React.MouseEvent, moreProps: any) => void;
46
+ /**
47
+ * Context menu handler.
48
+ */
49
+ readonly onContextMenu?: (e: React.MouseEvent, moreProps: any) => void;
50
+ /**
51
+ * Color, gradient, or pattern to use for the stroke.
52
+ */
53
+ readonly strokeStyle?: string;
54
+ /**
55
+ * Stroke dash.
56
+ */
57
+ readonly strokeDasharray?: strokeDashTypes;
58
+ /**
59
+ * Stroke width.
60
+ */
61
+ readonly strokeWidth?: number;
62
+ /**
63
+ * Selector for data to plot.
64
+ */
65
+ readonly yAccessor: (data: any) => number | undefined;
66
+ }
67
+ /**
68
+ * `LineSeries` component.
69
+ */
70
+ export declare class LineSeries extends React.Component<LineSeriesProps> {
71
+ static defaultProps: {
72
+ connectNulls: boolean;
73
+ defined: (d: number | undefined) => boolean;
74
+ hoverStrokeWidth: number;
75
+ hoverTolerance: number;
76
+ highlightOnHover: boolean;
77
+ strokeDasharray: string;
78
+ strokeStyle: string;
79
+ strokeWidth: number;
80
+ };
81
+ render(): JSX.Element;
82
+ private readonly drawOnCanvas;
83
+ private readonly isHover;
84
+ }