@tradecanvas/chart 1.51.0 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Chart.d.ts +174 -6
- package/dist/Chart.d.ts.map +1 -1
- package/dist/DataManager.d.ts +24 -0
- package/dist/DataManager.d.ts.map +1 -1
- package/dist/{LayoutSession-Qkx1huV-.js → LayoutSession-4SLt8-0u.js} +680 -419
- package/dist/LayoutSession-4SLt8-0u.js.map +1 -0
- package/dist/LayoutSession-BOtFzvMm.cjs +2 -0
- package/dist/LayoutSession-BOtFzvMm.cjs.map +1 -0
- package/dist/SeriesStore.d.ts +31 -0
- package/dist/SeriesStore.d.ts.map +1 -1
- package/dist/charts/ChartTypeStrategy.d.ts +32 -5
- package/dist/charts/ChartTypeStrategy.d.ts.map +1 -1
- package/dist/frameworks/feedBars.d.ts +22 -6
- package/dist/frameworks/feedBars.d.ts.map +1 -1
- package/dist/i18n-BjW5GVrO.cjs +2 -0
- package/dist/i18n-BjW5GVrO.cjs.map +1 -0
- package/dist/{i18n-DFTQ73Cz.js → i18n-C7b-2BJ5.js} +19 -1
- package/dist/i18n-C7b-2BJ5.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +119 -96
- package/dist/index.js.map +1 -1
- package/dist/io/resampleOHLCV.d.ts +10 -4
- package/dist/io/resampleOHLCV.d.ts.map +1 -1
- package/dist/widget/ChartWidget.d.ts +238 -9
- package/dist/widget/ChartWidget.d.ts.map +1 -1
- package/dist/widget/ChartWidgetGrid.d.ts.map +1 -1
- package/dist/widget/WidgetDataWindow.d.ts +7 -0
- package/dist/widget/WidgetDataWindow.d.ts.map +1 -1
- package/dist/widget/WidgetIndicatorLegend.d.ts +21 -3
- package/dist/widget/WidgetIndicatorLegend.d.ts.map +1 -1
- package/dist/widget/WidgetIndicatorSettings.d.ts.map +1 -1
- package/dist/widget/WidgetObjectTree.d.ts +7 -1
- package/dist/widget/WidgetObjectTree.d.ts.map +1 -1
- package/dist/widget/WidgetSettings.d.ts +11 -3
- package/dist/widget/WidgetSettings.d.ts.map +1 -1
- package/dist/widget/chartSettingsStore.d.ts +76 -0
- package/dist/widget/chartSettingsStore.d.ts.map +1 -0
- package/dist/widget/chartTemplates.d.ts.map +1 -1
- package/dist/widget/compareLegend.d.ts +20 -0
- package/dist/widget/compareLegend.d.ts.map +1 -0
- package/dist/widget/index.cjs +103 -28
- package/dist/widget/index.cjs.map +1 -1
- package/dist/widget/index.d.ts +1 -1
- package/dist/widget/index.d.ts.map +1 -1
- package/dist/widget/index.js +2454 -1860
- package/dist/widget/index.js.map +1 -1
- package/dist/widget/indicatorInputWords.d.ts +19 -0
- package/dist/widget/indicatorInputWords.d.ts.map +1 -0
- package/dist/widget/locales/ar.d.ts.map +1 -1
- package/dist/widget/locales/cs.d.ts.map +1 -1
- package/dist/widget/locales/da.d.ts.map +1 -1
- package/dist/widget/locales/de.d.ts.map +1 -1
- package/dist/widget/locales/el.d.ts.map +1 -1
- package/dist/widget/locales/en.d.ts +9 -0
- package/dist/widget/locales/en.d.ts.map +1 -1
- package/dist/widget/locales/es.d.ts.map +1 -1
- package/dist/widget/locales/et.d.ts.map +1 -1
- package/dist/widget/locales/fa.d.ts.map +1 -1
- package/dist/widget/locales/fr.d.ts.map +1 -1
- package/dist/widget/locales/he.d.ts.map +1 -1
- package/dist/widget/locales/hu.d.ts.map +1 -1
- package/dist/widget/locales/id.d.ts.map +1 -1
- package/dist/widget/locales/index.cjs +1 -1
- package/dist/widget/locales/index.cjs.map +1 -1
- package/dist/widget/locales/index.js +253 -1
- package/dist/widget/locales/index.js.map +1 -1
- package/dist/widget/locales/it.d.ts.map +1 -1
- package/dist/widget/locales/ja.d.ts.map +1 -1
- package/dist/widget/locales/ko.d.ts.map +1 -1
- package/dist/widget/locales/ms.d.ts.map +1 -1
- package/dist/widget/locales/nb.d.ts.map +1 -1
- package/dist/widget/locales/nl.d.ts.map +1 -1
- package/dist/widget/locales/pl.d.ts.map +1 -1
- package/dist/widget/locales/pt.d.ts.map +1 -1
- package/dist/widget/locales/ro.d.ts.map +1 -1
- package/dist/widget/locales/ru.d.ts.map +1 -1
- package/dist/widget/locales/sk.d.ts.map +1 -1
- package/dist/widget/locales/sv.d.ts.map +1 -1
- package/dist/widget/locales/th.d.ts.map +1 -1
- package/dist/widget/locales/tr.d.ts.map +1 -1
- package/dist/widget/locales/vi.d.ts.map +1 -1
- package/dist/widget/locales/zh.d.ts.map +1 -1
- package/dist/widget/locales/zhHant.d.ts.map +1 -1
- package/dist/widget/settingsRows.d.ts +12 -3
- package/dist/widget/settingsRows.d.ts.map +1 -1
- package/dist/widget/symbolInfoView.d.ts.map +1 -1
- package/dist/widget/types.d.ts +60 -7
- package/dist/widget/types.d.ts.map +1 -1
- package/dist/widget/widgetCompare.d.ts +18 -0
- package/dist/widget/widgetCompare.d.ts.map +1 -1
- package/dist/widget/widgetLayout.d.ts +13 -1
- package/dist/widget/widgetLayout.d.ts.map +1 -1
- package/dist/widget/widgetSettingsLook.d.ts +3 -1
- package/dist/widget/widgetSettingsLook.d.ts.map +1 -1
- package/dist/widget/widgetShareState.d.ts +8 -0
- package/dist/widget/widgetShareState.d.ts.map +1 -1
- package/dist/widget/widgetTimezones.d.ts +4 -1
- package/dist/widget/widgetTimezones.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/LayoutSession-DuV9kpdQ.cjs +0 -2
- package/dist/LayoutSession-DuV9kpdQ.cjs.map +0 -1
- package/dist/LayoutSession-Qkx1huV-.js.map +0 -1
- package/dist/i18n-Bg_UJSNs.cjs +0 -2
- package/dist/i18n-Bg_UJSNs.cjs.map +0 -1
- package/dist/i18n-DFTQ73Cz.js.map +0 -1
package/dist/SeriesStore.d.ts
CHANGED
|
@@ -16,6 +16,19 @@ export interface SeriesWrite {
|
|
|
16
16
|
/** Whether the bars shown were filtered again first: any copy of them is stale. */
|
|
17
17
|
readonly refiltered: boolean;
|
|
18
18
|
}
|
|
19
|
+
/** What a correction did with a bar (`replace`). */
|
|
20
|
+
export interface SeriesCorrection {
|
|
21
|
+
/**
|
|
22
|
+
* Where the bar was: in the live series kept aside during a replay, in the
|
|
23
|
+
* whole series only (outside the hours shown), among the bars shown, or
|
|
24
|
+
* nowhere (no loaded bar has its time, or the chart can't take it).
|
|
25
|
+
*/
|
|
26
|
+
readonly to: 'aside' | 'hidden' | 'shown' | 'none';
|
|
27
|
+
/** Its index among the bars shown; -1 when it isn't one of them. */
|
|
28
|
+
readonly index: number;
|
|
29
|
+
/** Whether its values changed: false for the bar loaded sent again, after the repairs every write makes. */
|
|
30
|
+
readonly changed: boolean;
|
|
31
|
+
}
|
|
19
32
|
/** What a batch of new bars did: how many the chart shows, from how many before. */
|
|
20
33
|
export interface SeriesBatch {
|
|
21
34
|
/** Bars that went onto the bars shown (none during a replay). */
|
|
@@ -49,10 +62,17 @@ export declare class SeriesStore {
|
|
|
49
62
|
private whole;
|
|
50
63
|
/** The live series during a replay, which the bars shown no longer follow. */
|
|
51
64
|
private aside;
|
|
65
|
+
/** Bumped by every bar shown replaced in place (`replace`): what keeps a copy of the bars by their array writes them again. */
|
|
66
|
+
private shownRevision;
|
|
52
67
|
constructor(hoursFilter: HoursFilter);
|
|
53
68
|
/** The bars the chart shows. */
|
|
54
69
|
bars(): DataSeries;
|
|
55
70
|
length(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Moves when a bar shown was replaced in place, the array the same: a copy
|
|
73
|
+
* kept by the array and a few bars it samples (the GPU's) is stale.
|
|
74
|
+
*/
|
|
75
|
+
revision(): number;
|
|
56
76
|
/** The live series: kept aside during a replay, else every bar, hidden ones too. */
|
|
57
77
|
liveBars(): DataSeries;
|
|
58
78
|
/** A new series: the bars shown are those of `bars` in the hours shown. */
|
|
@@ -90,6 +110,15 @@ export declare class SeriesStore {
|
|
|
90
110
|
* series kept aside the same way.
|
|
91
111
|
*/
|
|
92
112
|
placeStreamBar(given: OHLCBar): SeriesWrite;
|
|
113
|
+
/**
|
|
114
|
+
* A loaded bar again, with new values: the bar with the same time,
|
|
115
|
+
* wherever it is, repaired as every write repairs a bar. During a replay
|
|
116
|
+
* it is the live series kept aside; outside the hours shown, the whole
|
|
117
|
+
* series only. Nowhere when no loaded bar has its time: a bar the chart
|
|
118
|
+
* left out (it couldn't take it) isn't loaded either. Bar times don't
|
|
119
|
+
* change, so the hours shown need no filtering again.
|
|
120
|
+
*/
|
|
121
|
+
replace(given: OHLCBar): SeriesCorrection;
|
|
93
122
|
/** A stream's snapshot during a replay: the live series kept aside. */
|
|
94
123
|
loadAside(bars: DataSeries): void;
|
|
95
124
|
/** A replay begins: the live series is kept aside, and the bars shown are the replay's. */
|
|
@@ -109,6 +138,8 @@ export declare class SeriesStore {
|
|
|
109
138
|
* hidden), so the whole series never mixes seconds and milliseconds.
|
|
110
139
|
*/
|
|
111
140
|
private inSeriesUnit;
|
|
141
|
+
/** A bar outside the hours shown, corrected in the whole series only: it shows with the hours. */
|
|
142
|
+
private replaceHidden;
|
|
112
143
|
private wrote;
|
|
113
144
|
/** The bars of `all` shown; while some are hidden, `all` is kept as the whole series. */
|
|
114
145
|
private regularOnly;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeriesStore.d.ts","sourceRoot":"","sources":["../src/SeriesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIhE,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;AAEpG,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACnD,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,yGAAyG;AACzG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAQpG;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAE9C;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;
|
|
1
|
+
{"version":3,"file":"SeriesStore.d.ts","sourceRoot":"","sources":["../src/SeriesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIhE,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;AAEpG,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACnD,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACnD,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4GAA4G;IAC5G,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAID,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,yGAAyG;AACzG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAQpG;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAE9C;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IASV,OAAO,CAAC,QAAQ,CAAC,WAAW;IARxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,kEAAkE;IAClE,OAAO,CAAC,KAAK,CAA0B;IACvC,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAA4B;IACzC,+HAA+H;IAC/H,OAAO,CAAC,aAAa,CAAK;gBAEG,WAAW,EAAE,WAAW;IAErD,gCAAgC;IAChC,IAAI,IAAI,UAAU;IAIlB,MAAM,IAAI,MAAM;IAIhB;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB,oFAAoF;IACpF,QAAQ,IAAI,UAAU;IAMtB,2EAA2E;IAC3E,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI5B;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU;IAoB7C;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAUxC,qGAAqG;IACrG,QAAQ,IAAI,OAAO;IAUnB,iGAAiG;IACjG,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW;IAanC,+FAA+F;IAC/F,UAAU,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW;IAiBjD,4CAA4C;IAC5C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW;IAavC,8EAA8E;IAC9E,SAAS,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW;IAgB9E;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW;IAoB3C;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAwBzC,uEAAuE;IACvE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMjC,2FAA2F;IAC3F,WAAW,IAAI,IAAI;IAMnB,yFAAyF;IACzF,SAAS,IAAI,UAAU,GAAG,IAAI;IAM9B,iFAAiF;IACjF,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE;IAKxC,+CAA+C;IAC/C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIpC,iDAAiD;IACjD,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIlC,sCAAsC;IACtC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAMlC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAIpB,kGAAkG;IAClG,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,KAAK;IAIb,yFAAyF;IACzF,OAAO,CAAC,WAAW;IAMnB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAcxB,kGAAkG;IAClG,OAAO,CAAC,IAAI;CAQb"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChartType, ChartTypeOptions, DataSeries } from '@tradecanvas/commons';
|
|
2
|
-
import { ChartRendererInterface } from '@tradecanvas/core';
|
|
2
|
+
import { ChartRendererInterface, PointAndFigureColumns, ReshapeMemo } from '@tradecanvas/core';
|
|
3
3
|
import { ChartTypePlugin } from '../plugins/contracts.js';
|
|
4
4
|
/**
|
|
5
5
|
* Pure mapping from `ChartType` to the renderer class that draws it. Several
|
|
@@ -10,11 +10,14 @@ export declare function createRendererFor(type: ChartType): ChartRendererInterfa
|
|
|
10
10
|
/**
|
|
11
11
|
* Transform raw OHLC bars into the display series for a given chart type,
|
|
12
12
|
* with its settings (`options`; what isn't set is worked out from the data).
|
|
13
|
+
* `step` is the market's price step (`rangeBarsStep`), when there is one:
|
|
14
|
+
* the automatic range of range bars is a multiple of it. `memo` keeps the
|
|
15
|
+
* size a reshaped type was raised to, for the next tick (`ReshapeMemo`).
|
|
13
16
|
* Returns the input unchanged for chart types that render raw OHLC directly.
|
|
14
17
|
*
|
|
15
18
|
* Centralized so adding a new chart type only requires editing one file.
|
|
16
19
|
*/
|
|
17
|
-
export declare function transformDisplayData(type: ChartType, raw: DataSeries, options?: ChartTypeOptions): DataSeries;
|
|
20
|
+
export declare function transformDisplayData(type: ChartType, raw: DataSeries, options?: ChartTypeOptions, step?: number, memo?: ReshapeMemo): DataSeries;
|
|
18
21
|
/** Chart types that materially transform raw OHLC into a different series. */
|
|
19
22
|
export declare function isTransformedChartType(type: ChartType): boolean;
|
|
20
23
|
/**
|
|
@@ -23,8 +26,32 @@ export declare function isTransformedChartType(type: ChartType): boolean;
|
|
|
23
26
|
* keeps one bar per data bar.
|
|
24
27
|
*/
|
|
25
28
|
export declare function isReshapedChartType(type: ChartType): boolean;
|
|
26
|
-
/**
|
|
27
|
-
|
|
29
|
+
/**
|
|
30
|
+
* A point & figure chart's columns and the box they were built on: the box
|
|
31
|
+
* set, or 1% of the average close, raised when the columns would pass
|
|
32
|
+
* 100,000, so the renderer draws the boxes the columns were built with.
|
|
33
|
+
*/
|
|
34
|
+
export declare function pointAndFigureDisplay(raw: DataSeries, options?: ChartTypeOptions, memo?: ReshapeMemo): PointAndFigureColumns;
|
|
35
|
+
/**
|
|
36
|
+
* The range of range bars: the one set, as it is, or for 'auto' the mean true
|
|
37
|
+
* range of the last 100 closed bars (all of them when there are fewer; the
|
|
38
|
+
* bar still forming is left out, so a tick doesn't reshape the history). It
|
|
39
|
+
* is rounded to a 1-2-5 number, so it holds still as bars close, then to a
|
|
40
|
+
* whole number of price steps (`step`, one at least), so bars close on prices
|
|
41
|
+
* the market can trade. With 2 bars or fewer, about a hundredth of the last close.
|
|
42
|
+
* `toRangeBars` raises either kind when the closed bars would make more than
|
|
43
|
+
* 100,000 range bars, or the last bar that many on its own; one under half
|
|
44
|
+
* the 15th significant digit of the largest price closes no bar.
|
|
45
|
+
*/
|
|
46
|
+
export declare function rangeBarsSize(raw: DataSeries, options?: ChartTypeOptions, step?: number): number;
|
|
47
|
+
/**
|
|
48
|
+
* The price step automatic range bars go on: the coarsest the market has over
|
|
49
|
+
* the closed bars the range is measured on (on a market whose step depends on
|
|
50
|
+
* the price, the step at their highest or their lowest price), so a last price
|
|
51
|
+
* that crosses a band edge doesn't change the range of the whole history. With
|
|
52
|
+
* one bar, the step at its close; undefined when the market has no step.
|
|
53
|
+
*/
|
|
54
|
+
export declare function rangeBarsStep(raw: DataSeries, stepAt: (price: number) => number | undefined): number | undefined;
|
|
28
55
|
/** Look up a registered custom chart-type plugin by its `type` string. */
|
|
29
56
|
export type ChartTypeLookup = (type: string) => ChartTypePlugin | undefined;
|
|
30
57
|
/**
|
|
@@ -36,5 +63,5 @@ export declare function resolveRenderer(type: string, lookup?: ChartTypeLookup):
|
|
|
36
63
|
* Resolve the display series for a chart type, preferring a plugin's
|
|
37
64
|
* `transform` over the built-in transforms.
|
|
38
65
|
*/
|
|
39
|
-
export declare function resolveDisplayData(type: string, raw: DataSeries, lookup?: ChartTypeLookup, options?: ChartTypeOptions): DataSeries;
|
|
66
|
+
export declare function resolveDisplayData(type: string, raw: DataSeries, lookup?: ChartTypeLookup, options?: ChartTypeOptions, step?: number, memo?: ReshapeMemo): DataSeries;
|
|
40
67
|
//# sourceMappingURL=ChartTypeStrategy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartTypeStrategy.d.ts","sourceRoot":"","sources":["../../src/charts/ChartTypeStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartTypeStrategy.d.ts","sourceRoot":"","sources":["../../src/charts/ChartTypeStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAyBpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,sBAAsB,CAsCzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,gBAAqB,EAC9B,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAwBZ;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAY/D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,gBAAqB,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAIhI;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,gBAAqB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpG;AAoBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUhH;AAaD,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,GAAG,SAAS,CAAC;AAE5E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,sBAAsB,CAI9F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,UAAU,EACf,MAAM,CAAC,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAKZ"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import { OHLCBar } from '@tradecanvas/commons';
|
|
2
|
+
/**
|
|
3
|
+
* How many bars before the forming one a component's `data` may correct
|
|
4
|
+
* in place (the venue's final for the bar just closed, a late revision):
|
|
5
|
+
* they go in as `updateBar`, the view kept. A change further back is a new
|
|
6
|
+
* series. Vue and Svelte watch these bars, the forming one and the length.
|
|
7
|
+
*/
|
|
8
|
+
export declare const CORRECTABLE_BARS = 3;
|
|
2
9
|
/** What the components need of a chart to give it their `data`. */
|
|
3
10
|
export interface BarFeedHost {
|
|
4
11
|
setData(data: OHLCBar[]): void;
|
|
5
12
|
updateLastBar(bar: OHLCBar): void;
|
|
6
13
|
appendBar(bar: OHLCBar): void;
|
|
7
14
|
appendBars(bars: OHLCBar[]): void;
|
|
15
|
+
/**
|
|
16
|
+
* A loaded bar corrected (`Chart.updateBar`): false when the chart has no
|
|
17
|
+
* bar at its time. Without it, a correction is fed as a new series.
|
|
18
|
+
*/
|
|
19
|
+
updateBar?(bar: OHLCBar): boolean;
|
|
8
20
|
/** The bars shown: read to tell bars another writer gave the chart. */
|
|
9
21
|
getData(): readonly OHLCBar[];
|
|
10
22
|
isExtendedHoursVisible(): boolean;
|
|
@@ -17,6 +29,8 @@ export interface FedBars {
|
|
|
17
29
|
readonly length: number;
|
|
18
30
|
/** Its last bar as it was then (a copy: the array may change in place). */
|
|
19
31
|
readonly last: OHLCBar | null;
|
|
32
|
+
/** Up to `CORRECTABLE_BARS` bars before the last, as they were then (copies): a change to one is a correction. */
|
|
33
|
+
readonly recent?: readonly OHLCBar[];
|
|
20
34
|
/** The chart's last bar just after, the object itself: another writer's bar is another object. */
|
|
21
35
|
readonly shownBar: OHLCBar | null;
|
|
22
36
|
/** Fed during a replay: the bars went to the live series, out of sight. */
|
|
@@ -26,12 +40,14 @@ export interface FedBars {
|
|
|
26
40
|
* Bars into the chart, as the framework components take their `data`. Bars
|
|
27
41
|
* that go on from those fed before (the last one changed, or bars added after
|
|
28
42
|
* it) go in as ticks (`updateLastBar`, `appendBar`, `appendBars`), as a live
|
|
29
|
-
* feed's do: the view isn't reset, and only the end is computed again.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
43
|
+
* feed's do: the view isn't reset, and only the end is computed again. A
|
|
44
|
+
* change to one of the `CORRECTABLE_BARS` bars before the forming one (its
|
|
45
|
+
* time the same) goes in as a correction (`updateBar`), the view kept too.
|
|
46
|
+
* That holds for a new array (`[...bars, next]`) and for the same one
|
|
47
|
+
* changed in place. Anything else is a new series (`setData`): other bars,
|
|
48
|
+
* a bar the chart can't take, a correction it refuses or can't take (no
|
|
49
|
+
* `updateBar`), or bars another writer gave the chart since. `prev` is what
|
|
50
|
+
* the last call gave back (null for the first); the chart gets plain copies.
|
|
35
51
|
*/
|
|
36
52
|
export declare function feedBars(chart: BarFeedHost, next: readonly OHLCBar[], prev: FedBars | null): FedBars;
|
|
37
53
|
//# sourceMappingURL=feedBars.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedBars.d.ts","sourceRoot":"","sources":["../../src/frameworks/feedBars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,uEAAuE;IACvE,OAAO,IAAI,SAAS,OAAO,EAAE,CAAC;IAC9B,sBAAsB,IAAI,OAAO,CAAC;IAClC,cAAc,IAAI,OAAO,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"feedBars.d.ts","sourceRoot":"","sources":["../../src/frameworks/feedBars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,SAAS,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;IAClC,uEAAuE;IACvE,OAAO,IAAI,SAAS,OAAO,EAAE,CAAC;IAC9B,sBAAsB,IAAI,OAAO,CAAC;IAClC,cAAc,IAAI,OAAO,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,kHAAkH;IAClH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACrC,kGAAkG;IAClG,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAsGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAKpG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={"toolbar.indicators":`Indicators`,"toolbar.more":`More`,"toolbar.indicators.all":`All`,"indicatorType.overlay":`overlay`,"indicatorType.panel":`panel`,"indicatorPicker.search":`Search`,"indicatorPicker.groups":`Groups`,"indicatorPicker.favorites":`Favourites`,"indicatorPicker.favorite":`Favourite`,"indicatorPicker.noFavorites":`Star an indicator to keep it here.`,"indicatorPicker.noMatch":`No indicator matches “{query}”.`,"indicatorPicker.noTemplates":`Save the indicators on the chart as a template to add them all at once.`,"indicatorPicker.added":`{name} added`,"indicatorPicker.onChart":`On the chart: {count}`,"indicatorCategory.movingAverages":`Moving averages`,"indicatorCategory.trend":`Trend`,"indicatorCategory.oscillators":`Oscillators`,"indicatorCategory.volatility":`Volatility`,"indicatorCategory.volume":`Volume`,"indicatorCategory.bands":`Bands & channels`,"indicatorCategory.patterns":`Price & patterns`,"indicatorCategory.other":`Other`,"toolbar.replay":`Bar replay`,"replay.selectHint":`Click a bar to start the replay`,"replay.random":`Random bar`,"replay.realtime":`Back to realtime`,"replay.barsPerSecond":`bars/s`,"replay.play":`Play`,"replay.pause":`Pause`,"replay.stepBack":`Step back (Shift+←)`,"replay.stepForward":`Step forward (Shift+→)`,"toolbar.longBracket":`Long bracket`,"toolbar.shortBracket":`Short bracket`,"toolbar.depthLadder":`Depth ladder`,"toolbar.objects":`Objects`,"toolbar.priceAlerts":`Price alerts`,"toolbar.screenshot":`Screenshot`,"toolbar.settings":`Chart Settings`,"toolbar.toggleTheme":`Toggle theme`,"toolbar.timeframes":`Timeframes`,"toolbar.timeframes.pin":`Pin to toolbar`,"toolbar.timeframes.custom":`Custom interval, e.g. 7m, 90m, 2h, 3D`,"toolbar.timeframes.add":`Add interval`,"toolbar.timeframes.remove":`Remove interval`,"toolbar.timeframes.invalid":`Type a number and a unit: 7m, 2h, 3D, 1W, 2M`,"toolbar.timeframes.ticks":`Ticks`,"toolbar.timeframes.seconds":`Seconds`,"toolbar.timeframes.minutes":`Minutes`,"toolbar.timeframes.hours":`Hours`,"toolbar.timeframes.days":`Days`,"toolbar.timeframes.weeks":`Weeks`,"toolbar.timeframes.months":`Months`,"toolbar.trade":`Trade`,"statusBar.label":`Status bar`,"statusBar.log":`log`,"statusBar.auto":`auto`,"statusBar.marketOpen":`Open`,"statusBar.marketClosed":`Closed`,"toolbar.fullscreen":`Fullscreen`,"legend.show":`Show`,"legend.hide":`Hide`,"legend.settings":`Settings`,"legend.remove":`Remove`,"legend.collapse":`Collapse indicators`,"legend.expand":`Show indicators`,"legend.offChartType":`Not drawn on this chart type`,"indicatorSettings.title":`{name} settings`,"indicatorSettings.tab.inputs":`Inputs`,"indicatorSettings.tab.style":`Style`,"indicatorSettings.tab.levels":`Levels`,"indicatorSettings.tab.visibility":`Visibility`,"indicatorSettings.defaults":`Defaults`,"indicatorSettings.resetSettings":`Reset settings`,"indicatorSettings.saveAsDefault":`Save as default`,"indicatorSettings.defaultSaved":`New {name} indicators start like this now.`,"indicatorSettings.defaultSaveFailed":`Couldn't save the default`,"indicatorSettings.rangeFrom":`from`,"indicatorSettings.rangeTo":`to`,"indicatorSettings.offInterval":`Not shown on this interval`,"indicatorSettings.noInputs":`This indicator has no adjustable parameters.`,"indicatorInput.anchor":`Anchor`,"indicatorInput.anchor.session":`Session`,"indicatorInput.anchor.week":`Week`,"indicatorInput.anchor.month":`Month`,"indicatorInput.anchor.all":`All bars`,"indicatorSettings.source.prices":`Price`,"indicatorSettings.source.indicators":`Indicators`,"indicatorSettings.lineWidth":`Line width`,"indicatorSettings.scale":`Price scale`,"indicatorSettings.scale.right":`Right (price)`,"indicatorSettings.scale.left":`Left (own range)`,"indicatorSettings.up":`up`,"indicatorSettings.down":`down`,"indicatorSettings.addLevel":`Add level`,"indicatorSettings.removeLevel":`Remove level`,"indicatorSettings.noLevels":`No levels.`,"indicatorSettings.level":`Level`,"indicatorSettings.close":`Close`,"toolbar.exitFullscreen":`Exit fullscreen`,"range.presets":`Visible range`,"range.all":`All`,"range.goTo":`Go to date`,"range.goToSubmit":`Go to`,"range.date":`Date`,"range.time":`Time`,"range.cancel":`Cancel`,"calendar.prevMonth":`Previous month`,"calendar.nextMonth":`Next month`,"calendar.today":`Today`,"range.beforeData":`Showing the earliest loaded bar`,"goTo.title":`Go to`,"goTo.range":`Custom range`,"goTo.from":`From`,"goTo.to":`To`,"chartType.candlestick":`Candlestick`,"chartType.line":`Line`,"chartType.area":`Area`,"chartType.bar":`Bar`,"chartType.heikinAshi":`Heikin-Ashi`,"chartType.hollowCandle":`Hollow Candle`,"chartType.baseline":`Baseline`,"chartType.volumeCandles":`Volume Candles`,"chartType.equivolume":`Equivolume`,"chartType.hlcArea":`HLC Area`,"chartType.stepLine":`Step Line`,"chartType.lineWithMarkers":`Line + Markers`,"chartType.hiLo":`High-Low`,"chartType.renko":`Renko`,"chartType.lineBreak":`Line Break`,"chartType.kagi":`Kagi`,"chartType.pointAndFigure":`Point & Figure`,"chartType.rangeBars":`Range Bars`,"watchlist.title":`Watchlist`,"watchlist.lists":`Lists`,"watchlist.newList":`New list…`,"watchlist.rename":`Rename list…`,"watchlist.deleteList":`Delete list`,"watchlist.confirmDelete":`Delete “{name}”? Click again`,"watchlist.add":`Add symbol`,"watchlist.remove":`Remove {symbol}`,"watchlist.empty":`No symbols yet. Add one with +.`,"watchlist.listName":`List name`,"symbolInfo.title":`Symbol info`,"symbolInfo.open":`Market open`,"symbolInfo.closed":`Market closed`,"symbolInfo.always":`Trades around the clock`,"symbolInfo.closesIn":`closes {when}`,"symbolInfo.opensIn":`opens {when}`,"symbolInfo.prevClose":`Prev. close`,"symbolInfo.bid":`Bid`,"symbolInfo.ask":`Ask`,"symbolInfo.tick":`Tick size`,"symbolInfo.currency":`Currency`,"symbolInfo.timezone":`Time zone`,"symbolInfo.hours":`Trading hours`,"symbolInfo.news":`News`,"symbolInfo.noNews":`No news for this symbol.`,"symbolInfo.newsFailed":`News could not be loaded.`,"symbolInfo.loading":`Loading…`,"action.symbolInfo":`Symbol info`,"nav.label":`Chart navigation`,"nav.zoomIn":`Zoom in`,"nav.zoomOut":`Zoom out`,"nav.scrollLeft":`Scroll left`,"nav.scrollRight":`Scroll right`,"nav.reset":`Reset chart view`,"a11y.role":`chart`,"a11y.summary":`{what}. Last price {close}.`,"a11y.empty":`Chart, no data.`,"a11y.view":`Showing {count} bars, {from} to {to}. High {high}, low {low}.`,"a11y.bar":`{time}: open {open}, high {high}, low {low}, close {close}, volume {volume}.`,"a11y.keys":`Arrow keys scroll and zoom, Home and End go to the start and the end. Comma and period read the bars one at a time.`,"status.connecting":`Connecting...`,"status.live":`Live`,"status.connectionFailed":`Connection failed`,"status.loading":`Loading chart...`,"history.loading":`Loading history…`,"history.failed":`Could not load older bars`,"settings.title":`Chart Settings`,"settings.tab.symbol":`Symbol`,"settings.tab.statusLine":`Status line`,"settings.tab.scales":`Scales`,"settings.tab.appearance":`Appearance`,"settings.tab.layers":`Layers`,"settings.template":`Template`,"settings.section.axes":`Axes`,"settings.saveTemplate":`Save as template…`,"settings.saveTemplateTitle":`Save chart template`,"settings.templatePlaceholder":`My chart`,"settings.resetToDefaults":`Reset to defaults`,"settings.section.candleColors":`Candle Colors`,"settings.section.background":`Background`,"hotkeys.title":`Keyboard shortcuts`,"hotkeys.footer":`Press ? anytime to show this sheet`,"hotkeys.close":`Close`,"hotkeys.search":`Search shortcuts`,"hotkeys.noMatch":`No shortcuts match`,"hotkeys.group.searchNavigation":`Search & navigation`,"hotkeys.group.chartManipulation":`Chart manipulation`,"hotkeys.group.touch":`Touch (mobile / tablet)`,"hotkeys.group.keyboard":`Keyboard`,"hotkeys.group.drawing":`Drawing`,"hotkeys.group.more":`More`,"common.close":`Close`,"common.cancel":`Cancel`,"common.save":`Save`,"common.show":`Show`,"common.hide":`Hide`,"common.lock":`Lock`,"common.unlock":`Unlock`,"common.open":`Open`,"common.back":`Back`,"settings.upBody":`Up body`,"settings.downBody":`Down body`,"settings.upWick":`Up wick`,"settings.downWick":`Down wick`,"settings.background":`Background`,"settings.grid":`Grid`,"settings.section.lastPrice":`Last price`,"settings.horizontal":`Horizontal`,"settings.vertical":`Vertical`,"settings.scaleLines":`Lines`,"settings.priceLine":`Price line`,"settings.paneSeparator":`Pane separator`,"settings.legendText":`Legend text`,"settings.tab.trading":`Trading`,"settings.up":`Up`,"settings.down":`Down`,"settings.aboveBase":`Above the base`,"settings.belowBase":`Below the base`,"settings.areaTop":`Fill top`,"settings.areaBottom":`Fill bottom`,"settings.paneBackground":`Pane background`,"settings.paneTitles":`Pane titles`,"settings.legendLabels":`Legend labels`,"settings.watermark":`Watermark`,"settings.labelBackground":`Label background`,"settings.labelText":`Label text`,"settings.sessionBreaks":`Session breaks`,"settings.section.orders":`Orders and positions`,"settings.profit":`Profit`,"settings.loss":`Loss`,"settings.section.signals":`Signal markers`,"settings.section.tradeZones":`Trade zones`,"settings.openTrade":`Open`,"settings.handles":`Selection handles`,"settings.gridLines":`Grid lines`,"settings.volume":`Volume`,"settings.volumeProfile":`Volume profile`,"settings.marketProfile":`Market profile (TPO)`,"settings.marketProfileSplit":`Market profile per session`,"settings.marketProfileLetters":`Market profile letters`,"settings.marketProfileBuckets":`Market profile rows`,"settings.marketProfileOpacity":`Market profile opacity`,"settings.depthHeatmap":`Liquidity heatmap`,"settings.depthHeatmapOpacity":`Heatmap opacity`,"settings.swingMarkers":`Swing markers`,"settings.swingStrength":`Swing strength`,"settings.swingStructure":`Swing structure (HH/HL)`,"settings.sessionShading":`Session shading`,"settings.periodLevels":`Prior-period levels`,"settings.periodLevelsBasis":`Prior period`,"settings.priorDay":`Prior day (PDH/PDL)`,"settings.priorWeek":`Prior week (PWH/PWL)`,"settings.ohlcLegend":`OHLC legend`,"settings.indicatorValues":`Indicator values on scale`,"settings.barCountdown":`Bar countdown`,"settings.crosshairMode":`Crosshair`,"settings.crosshair.magnet":`Magnet`,"settings.crosshair.normal":`Normal`,"settings.crosshair.hidden":`Hidden`,"settings.timezone":`Timezone`,"settings.timezone.local":`Local`,"settings.timezone.exchange":`Exchange`,"settings.numberLocale":`Number format`,"settings.autoScale":`Auto scale`,"settings.invertScale":`Invert scale (Alt+I)`,"settings.leftScale":`Left price scale`,"settings.priceScale":`Price scale`,"settings.mainSeries":`Main series`,"settings.highLowLines":`High and low lines`,"settings.extendedHours":`Extended hours`,"settings.boxSize":`Box size`,"settings.atrPeriod":`ATR length`,"settings.lineBreakLines":`Lines to break`,"settings.reversal":`Reversal`,"settings.reversalType":`Reversal in`,"settings.reversalType.percent":`Percent`,"settings.reversalType.price":`Price`,"settings.reversalBoxes":`Reversal boxes`,"settings.barRange":`Range`,"settings.auto":`Auto`,"settings.numberAtLeast":`{min} or more`,"settings.numberWhole":`A whole number from {min} to {max}`,"settings.scale.regular":`Regular`,"settings.scale.logarithmic":`Logarithmic`,"settings.scale.percentage":`Percentage`,"settings.scale.indexedTo100":`Indexed to 100`,"alerts.title":`Price alerts`,"alerts.close":`Close alerts`,"alerts.value":`Value`,"alerts.note":`Note (optional)`,"alerts.add":`Add alert`,"alerts.empty":`No alerts yet. Add one above, or right-click the chart.`,"alerts.delete":`Delete alert`,"alerts.triggered":`triggered`,"alerts.source.price":`Price`,"alerts.condition.crossing":`Crossing`,"alerts.condition.crossingUp":`Crossing up`,"alerts.condition.crossingDown":`Crossing down`,"alerts.condition.greaterThan":`Greater than`,"alerts.condition.lessThan":`Less than`,"alerts.fired":`Alert: {text}`,"objects.title":`Objects`,"objects.close":`Close objects`,"objects.indicators":`Indicators`,"objects.drawings":`Drawings`,"objects.compare":`Compare`,"objects.addCompare":`Add a symbol to compare`,"objects.noIndicators":`No indicators`,"objects.noDrawings":`No drawings`,"objects.noComparisons":`No comparisons`,"objects.indicatorSettings":`Indicator settings`,"objects.removeIndicator":`Remove indicator`,"objects.removeDrawing":`Remove drawing`,"objects.removeComparison":`Remove comparison`,"drawing.cursor":`Cursor`,"drawing.tools":`Drawing tools`,"drawing.style":`Drawing style & templates`,"drawing.magnet":`Magnet`,"drawing.magnetOn":`Magnet on`,"drawing.magnetOff":`Magnet off`,"drawing.eraser":`Eraser: click a drawing to remove it`,"drawing.zoomArea":`Zoom: drag a box to zoom into it`,"drawing.magnetStrong":`Magnet: strong (always snaps)`,"drawing.stay":`Stay in drawing mode`,"drawing.undo":`Undo`,"drawing.redo":`Redo`,"drawing.clearAll":`Clear all`,"drawing.pinFavorite":`Pin to favourites`,"drawing.lockAll":`Lock all drawings`,"drawing.hideAll":`Hide all drawings`,"drawingStyle.title":`Drawing style`,"drawingStyle.templates":`Templates`,"drawingStyle.templateName":`Template name`,"drawingStyle.noTemplates":`No saved templates`,"drawingStyle.deleteTemplate":`Delete template`,"drawingSettings.tab.style":`Style`,"drawingSettings.tab.text":`Text`,"drawingSettings.tab.coordinates":`Coordinates`,"drawingSettings.tab.visibility":`Visibility`,"drawingSettings.ok":`OK`,"drawingSettings.color":`Color`,"drawingSettings.lineWidth":`Line width`,"drawingSettings.lineStyle":`Line style`,"drawingSettings.lineStyle.solid":`Solid`,"drawingSettings.lineStyle.dashed":`Dashed`,"drawingSettings.lineStyle.dotted":`Dotted`,"drawingSettings.line":`Line`,"drawingSettings.lineEnds":`Line ends`,"drawingSettings.lineEnd.normal":`Normal`,"drawingSettings.lineEnd.arrow":`Arrow`,"drawingSettings.fill":`Fill`,"drawingSettings.opacity":`Opacity (%)`,"drawingSettings.text":`Text`,"drawingSettings.fontSize":`Font size`,"drawingSettings.saveDefault":`Save as default`,"drawingSettings.defaultSaved":`Saved as the default for {name}`,"drawingSettings.saveTemplateTitle":`Save drawing template`,"drawingSettings.levelVisible":`Show this level`,"drawingSettings.levelValue":`Level`,"drawingSettings.levelColor":`Level color`,"drawingSettings.removeLevel":`Remove level`,"drawingSettings.addLevel":`Add level`,"drawingSettings.point":`Point {n}`,"drawingSettings.date":`Date`,"drawingSettings.time":`Time`,"drawingSettings.price":`Price`,"drawingOption.extendLeft":`Extend left`,"drawingOption.extendRight":`Extend right`,"drawingOption.middleLine":`Middle line`,"drawingOption.levels":`Levels`,"drawingOption.reverse":`Reverse`,"drawingOption.showLevels":`Show levels`,"drawingOption.showPrices":`Show prices`,"drawingOption.labelPosition":`Labels`,"drawingOption.labelPosition.left":`Left`,"drawingOption.labelPosition.right":`Right`,"drawingOption.background":`Background`,"drawingOption.leftEnd":`Left end`,"drawingOption.rightEnd":`Right end`,"drawingOption.showMiddlePoint":`Show middle point`,"drawingOption.showPriceRange":`Show price range`,"drawingOption.showBarsRange":`Show bars range`,"drawingOption.showDateRange":`Show date and time range`,"drawingOption.showAngle":`Show angle`,"drawingOption.alwaysShowStats":`Always show stats`,"drawingOption.statsPosition":`Stats position`,"drawingOption.statsPosition.left":`Left`,"drawingOption.statsPosition.center":`Center`,"drawingOption.statsPosition.right":`Right`,"objects.drawingSettings":`Drawing settings`,"objects.renameGroup":`Rename group`,"drawingMenu.label":`Drawing`,"drawingMenu.settings":`Settings…`,"drawingMenu.front":`Bring to front`,"drawingMenu.forward":`Bring forward`,"drawingMenu.backward":`Send backward`,"drawingMenu.back":`Send to back`,"drawingMenu.group":`Group`,"drawingMenu.ungroup":`Ungroup`,"drawingMenu.duplicate":`Duplicate`,"drawingMenu.delete":`Delete`,"selectionToolbar.label":`Drawing toolbar`,"chartMenu.label":`Chart`,"chartMenu.addAlert":`Add alert at {price}`,"chartMenu.alertAdded":`Alert added at {price}`,"chartMenu.buyLimit":`Buy limit at {price}`,"chartMenu.buyStop":`Buy stop at {price}`,"chartMenu.sellLimit":`Sell limit at {price}`,"chartMenu.sellStop":`Sell stop at {price}`,"chartMenu.horizontalLine":`Horizontal line at {price}`,"chartMenu.resetView":`Reset chart view`,"chartMenu.resetTimeScale":`Reset time scale`,"chartMenu.hideDrawings":`Hide drawings`,"chartMenu.showDrawings":`Show drawings`,"chartMenu.removeDrawings":`Remove drawings`,"chartMenu.settings":`Settings…`,"chartMenu.invertScale":`Invert scale`,"chartMenu.goToDate":`Go to date…`,"toolbar.account":`Account: positions, orders, history`,"chartMenu.orderTicket":`New order…`,"account.title":`Account`,"account.positions":`Positions`,"account.orders":`Orders`,"account.history":`History`,"account.newOrder":`New order`,"account.close":`Close the account panel`,"account.side":`Side`,"account.long":`Long`,"account.short":`Short`,"account.quantity":`Qty`,"account.entry":`Entry`,"account.price":`Price`,"account.pnl":`P&L`,"account.stopLoss":`SL`,"account.takeProfit":`TP`,"account.actions":`Actions`,"account.time":`Time`,"account.reason":`Reason`,"account.reason.order":`Order`,"account.reason.close":`Closed`,"account.reason.reverse":`Reversed`,"account.reason.stopLoss":`Stop-loss`,"account.reason.takeProfit":`Take-profit`,"account.reverse":`Reverse position`,"account.closePosition":`Close position`,"account.cancelOrder":`Cancel order`,"account.noPositions":`No open positions`,"account.noOrders":`No working orders`,"account.noFills":`No trades yet`,"account.realised":`Realised P&L: {pnl}`,"account.openPnl":`Open P&L: {pnl}`,"ticket.title":`New order`,"ticket.buy":`Buy`,"ticket.sell":`Sell`,"ticket.type":`Type`,"ticket.type.market":`Market`,"ticket.type.limit":`Limit`,"ticket.type.stop":`Stop`,"ticket.quantity":`Quantity`,"ticket.price":`Price`,"ticket.stopLoss":`Stop-loss`,"ticket.takeProfit":`Take-profit`,"ticket.timeInForce":`Time in force`,"ticket.tif.gtc":`Good till cancelled`,"ticket.tif.day":`Day`,"ticket.value":`Value`,"ticket.risk":`Risk`,"ticket.reward":`Reward`,"ticket.rewardRisk":`Reward to risk`,"ticket.stepDown":`{field} down`,"ticket.stepUp":`{field} up`,"ticket.placeBuy":`Place buy order`,"ticket.placeSell":`Place sell order`,"ticket.sent":`Order sent: {side} {quantity} @ {price}`,"ticket.problem.quantity":`Enter a quantity above 0.`,"ticket.problem.price":`Enter a price above 0.`,"ticket.problem.market":`There is no market price yet.`,"ticket.problem.stopLoss":`Enter a stop-loss price above 0.`,"ticket.problem.takeProfit":`Enter a take-profit price above 0.`,"ticket.problem.stopLossSide":`The stop-loss goes below the entry for a buy, above it for a sell.`,"ticket.problem.takeProfitSide":`The take-profit goes above the entry for a buy, below it for a sell.`,"ticket.problem.limitSide":`A buy limit goes below the market and a sell limit above it.`,"ticket.problem.stopSide":`A buy stop goes above the market and a sell stop below it.`,"ticket.problem.priceStep":`Prices go in the market’s price steps.`,"ticket.problem.priceLimits":`Today’s prices run from {floor} to {ceiling}.`,"ticket.problem.lot":`Above one lot, order whole lots of {lot}; odd shares go in an order of their own.`,"toolbar.layouts":`Layout`,"layouts.unnamed":`Unnamed`,"layouts.unsavedChanges":`unsaved changes`,"layouts.save":`Save layout`,"layouts.saveAs":`Save as…`,"layouts.rename":`Rename…`,"layouts.autoSave":`Auto-save`,"layouts.open":`Open layout…`,"layouts.saved":`Layout saved: {name}`,"layouts.saveFailed":`Couldn't save the layout`,"layouts.openFailed":`Couldn't open the layout`,"layouts.deleteFailed":`Couldn't delete the layout`,"layouts.saveAsTitle":`Save layout as`,"layouts.renameTitle":`Rename layout`,"layouts.renameSubmit":`Rename`,"layouts.copyName":`{name} (copy)`,"layouts.name":`Name`,"layouts.namePlaceholder":`My layout`,"layouts.dialogTitle":`Layouts`,"layouts.search":`Search layouts`,"layouts.empty":`No saved layouts yet`,"layouts.noMatch":`No layouts match`,"layouts.current":`Open`,"layouts.updated":`saved {time}`,"layouts.renameNamed":`Rename {name}`,"layouts.deleteNamed":`Delete {name}`,"layouts.deleteConfirm":`Delete`,"grid.bar":`Charts`,"grid.layout":`Chart layout`,"grid.single":`One chart`,"grid.layoutOption":`{count} charts, {cols} across and {rows} down`,"grid.chart":`Chart {n}`,"grid.charts":`Charts`,"grid.sync":`Sync`,"grid.sync.symbol":`Symbol`,"grid.sync.interval":`Interval`,"grid.sync.crosshair":`Crosshair`,"grid.sync.time":`Time`,"grid.sync.drawings":`Drawings`,"grid.sync.replay":`Replay`,"grid.sync.symbol.hint":`Change the symbol on every chart together`,"grid.sync.interval.hint":`Change the interval on every chart together`,"grid.sync.crosshair.hint":`Show the crosshair’s time on every chart`,"grid.sync.time.hint":`Scroll and zoom every chart to the same time`,"grid.sync.drawings.hint":`Copy drawings to the charts of the same symbol`,"grid.sync.replay.hint":`Replay every chart to the same time`,"legend.more":`More`,"legend.moveUp":`Move to pane above`,"legend.moveDown":`Move to pane below`,"legend.moveNew":`Move to new pane`,"legend.movePrice":`Move to price pane`,"pane.moveUp":`Move pane up`,"pane.moveDown":`Move pane down`,"pane.collapse":`Collapse pane`,"pane.expand":`Expand pane`,"pane.maximize":`Maximize pane`,"pane.restore":`Restore panes`,"toolbar.indicators.templates":`Templates`,"templates.save":`Save indicators as template…`,"templates.saveTitle":`Save indicator template`,"templates.namePlaceholder":`My indicators`,"templates.saved":`Template saved: {name}`,"templates.applied":`Template applied: {name}`,"templates.delete":`Delete template {name}`,"templates.nothing":`There are no indicators to save`,"templates.saveFailed":`Couldn't save the template`,"interval.title":`Change interval`,"interval.hint":`5, 15m, 1h, 1D — Enter to apply`,"interval.invalid":`Not an interval this chart can show`,"alerts.condition.movesUp":`Moves up`,"alerts.condition.movesDown":`Moves down`,"alerts.source":`Watch`,"alerts.conditionLabel":`Condition`,"alerts.compareWith":`Compared with`,"alerts.compare.value":`A value`,"alerts.percent":`Percent`,"alerts.bars":`Bars`,"alerts.moveSummary":`{percent}% within {bars} bars`,"alerts.onBarClose":`Only on bar close`,"alerts.onClose":`on bar close`,"alerts.expires":`Expires`,"alerts.expires.never":`Never expires`,"alerts.expires.hour":`Expires in 1 hour`,"alerts.expires.day":`Expires in 1 day`,"alerts.expires.week":`Expires in 1 week`,"alerts.expires.month":`Expires in 30 days`,"alerts.until":`until {time}`,"alerts.expired":`Expired`,"alerts.expiredToast":`Alert expired: {text}`,"alerts.invalid":`These alert settings don’t fit together`,"replay.step":`Step`,"replay.step.bar":`Bar`,"replay.stepsFailed":`Couldn't load the finer bars: replaying bar by bar`,"markers.neutral":`Neutral`,"markers.confidence":`confidence {pct}%`,"chartMenu.paneLog":`Logarithmic scale`,"chartMenu.paneInvert":`Invert scale`,"chartMenu.panePercent":`Percent scale`,"chartMenu.exportData":`Export data (CSV)`,"chartMenu.paste":`Paste`,"chartMenu.removeIndicators":`Remove indicators`,"chartMenu.resetPriceScale":`Reset price scale`,"chartMenu.labels":`Labels`,"chartMenu.lines":`Lines`,"chartMenu.lastPriceLine":`Last price line`,"compare.percent":`Percent change, on this scale`,"compare.ownScale":`Price, on its own scale`,"compare.ownPane":`Price, in a pane of its own`,"compare.title":`Compare symbol`,"compare.addAs":`Add as`,"compare.onChart":`On the chart`,"compare.symbols":`Symbols`,"compare.remove":`Remove {symbol}`,"compare.empty":`Nothing compared yet. Search for a symbol to add it.`,"compare.way.spread":`Spread`,"compare.way.ratio":`Ratio`,"compare.way.correlation":`Correlation`,"compare.way.correlationLog":`Correlation of returns`,"drawingSettings.addAlert":`Add alert`,"drawingSettings.alertAdded":`Alert added: price crossing {name}`,"drawingOption.rewardRatio":`Reward:risk`,"drawingOption.accountSize":`Account size`,"drawingOption.riskMode":`Risk as`,"drawingOption.riskMode.percent":`Percent of account`,"drawingOption.riskMode.amount":`Amount`,"drawingOption.risk":`Risk`,"drawingOption.qtyDecimals":`Quantity decimals`,"drawingOption.showLabels":`Show labels`,"drawingOption.showText":`Show text`,"drawingOption.direction":`Direction`,"drawingOption.direction.up":`Up`,"drawingOption.direction.down":`Down`,"drawingOption.direction.left":`Left`,"drawingOption.direction.right":`Right`,"drawingOption.size":`Size`,"drawingOption.glyph":`Icon`,"drawingOption.glyph.star":`Star`,"drawingOption.glyph.heart":`Heart`,"drawingOption.glyph.check":`Check`,"drawingOption.glyph.cross":`Cross`,"drawingOption.glyph.circle":`Circle`,"drawingOption.glyph.triangleUp":`Triangle up`,"drawingOption.glyph.triangleDown":`Triangle down`,"drawingOption.glyph.bolt":`Bolt`,"drawingOption.arrowEnd":`Arrow at the end`,"drawingOption.fullCircles":`Full circles`,"drawingOption.clockwise":`Clockwise`,"drawingOption.arcs":`Arcs`,"drawingOption.degree":`Degree`,"drawingOption.degree.primary":`Primary`,"drawingOption.degree.intermediate":`Intermediate`,"drawingOption.degree.minor":`Minor`,"drawingOption.degree.minute":`Minute`,"drawingOption.mode":`Show as`,"drawingOption.mode.bars":`Bars`,"drawingOption.mode.line":`Line`,"drawingOption.mode.highLow":`High-low`,"drawingOption.mirrored":`Mirrored`,"drawingOption.flipped":`Flipped`,"toolGroup.lines":`Lines`,"toolGroup.horizontalVertical":`Horizontal/Vertical`,"toolGroup.channels":`Channels`,"toolGroup.fibonacci":`Fibonacci`,"toolGroup.shapes":`Shapes`,"toolGroup.gannPitchforks":`Gann & Pitchforks`,"toolGroup.patterns":`Patterns`,"toolGroup.measure":`Measure`,"toolGroup.annotation":`Annotation`,"toolGroup.forecasting":`Forecasting`,"toolGroup.brushes":`Brushes`,"toolGroup.cycles":`Cycles`,"toolGroup.elliott":`Elliott Waves`,"tool.trendLine":`Trend Line`,"tool.ray":`Ray`,"tool.extendedLine":`Extended Line`,"tool.infoLine":`Info Line`,"tool.trendAngle":`Trend Angle`,"tool.horizontalLine":`Horizontal Line`,"tool.horizontalRay":`Horizontal Ray`,"tool.verticalLine":`Vertical Line`,"tool.crossLine":`Cross Line`,"tool.parallelChannel":`Parallel Channel`,"tool.regressionChannel":`Regression Channel`,"tool.fibRetracement":`Fib Retracement`,"tool.fibExtension":`Fib Extension`,"tool.fibChannel":`Fib Channel`,"tool.fibTimeZones":`Fib Time Zones`,"tool.fibSpeedResistanceFan":`Fib Speed Resistance Fan`,"tool.rectangle":`Rectangle`,"tool.circle":`Circle`,"tool.ellipse":`Ellipse`,"tool.triangle":`Triangle`,"tool.pitchfork":`Pitchfork`,"tool.schiffPitchfork":`Schiff Pitchfork`,"tool.modifiedSchiffPitchfork":`Modified Schiff Pitchfork`,"tool.gannFan":`Gann Fan`,"tool.gannBox":`Gann Box`,"tool.cyclicLines":`Cyclic Lines`,"tool.xabcdPattern":`XABCD Pattern`,"tool.abcdPattern":`ABCD Pattern`,"tool.headAndShoulders":`Head and Shoulders`,"tool.elliottWave":`Elliott Wave`,"tool.priceRange":`Price Range`,"tool.dateRange":`Date Range`,"tool.dateAndPriceRange":`Date and Price Range`,"tool.measure":`Measure`,"tool.text":`Text`,"tool.priceLabel":`Price Label`,"tool.arrow":`Arrow`,"tool.riskReward":`Long/Short Position`,"tool.anchoredVWAP":`Anchored VWAP`,"tool.volumeProfileRange":`Fixed Range Volume Profile`,"tool.note":`Note`,"tool.callout":`Callout`,"tool.flag":`Flag Mark`,"tool.arrowMark":`Arrow Mark`,"tool.icon":`Icon`,"tool.brush":`Brush`,"tool.highlighter":`Highlighter`,"tool.path":`Path`,"tool.polyline":`Polyline`,"tool.curve":`Curve`,"tool.arc":`Arc`,"tool.fibCircles":`Fib Circles`,"tool.fibSpiral":`Fib Spiral`,"tool.fibArcs":`Fib Speed Resistance Arcs`,"tool.fibWedge":`Fib Wedge`,"tool.pitchfan":`Pitchfan`,"tool.gannSquare":`Gann Square`,"tool.elliottImpulse":`Elliott Impulse Wave`,"tool.elliottCorrection":`Elliott Correction Wave`,"tool.elliottTriangle":`Elliott Triangle Wave`,"tool.elliottDoubleCombo":`Elliott Double Combo Wave`,"tool.elliottTripleCombo":`Elliott Triple Combo Wave`,"tool.threeDrives":`Three Drives Pattern`,"tool.cypherPattern":`Cypher Pattern`,"tool.timeCycles":`Time Cycles`,"tool.sineLine":`Sine Line`,"tool.forecast":`Forecast`,"tool.projection":`Projection`,"tool.barsPattern":`Bars Pattern`,"replay.label":`Replay`,"replay.position":`Replay position`,"replay.speed":`Speed`,"symbolSearch.placeholder":`Search symbol… (e.g. BTC, ETH, AAPL)`,"symbolSearch.empty":`No symbols match`,"symbolSearch.searching":`Searching…`,"symbolSearch.failed":`Search failed`,"symbolSearch.title":`Symbol search`,"symbolSearch.symbol":`Symbol`,"symbolSearch.description":`Description`,"symbolSearch.kinds":`Kinds of symbol`,"symbolSearch.allKinds":`All`,"symbolSearch.type":`Type`,"symbolSearch.exchange":`Exchange`,"symbolSearch.allExchanges":`All exchanges`,"symbolSearch.more":`More symbols: {count}. Type to narrow the list.`,"symbolSearch.typeHint":`Type a letter on the chart to open this search`,"palette.placeholder":`Search indicators, chart types, tools…`,"palette.empty":`No results found`,"palette.group.indicator":`Indicators`,"palette.group.chartType":`Chart types`,"palette.group.drawing":`Drawing tools`,"palette.group.timeframe":`Timeframes`,"palette.group.action":`Actions`,"palette.group.recent":`Recent`,"action.screenshot":`Screenshot`,"action.copyImage":`Copy chart image`,"action.toggleTheme":`Toggle theme`,"action.settings":`Settings`,"action.shareView":`Share view (copy link)`,"action.autoFib":`Auto Fibonacci (visible swing)`,"action.dataWindow":`Toggle data window`,"action.clearDrawings":`Clear all drawings`,"ladder.title":`Depth ladder`,"ladder.bid":`Bid`,"ladder.price":`Price`,"ladder.ask":`Ask`,"ladder.empty":`No order-book data`,"ladder.sellAt":`Sell @ {price}`,"ladder.buyAt":`Buy @ {price}`,"ladder.spread":`Spread {spread}`,"dataWindow.title":`Data window`,"dock.rail":`Panels`,"dock.resize":`Resize the panel`,"dataWindow.hover":`Hover the chart`,"dataWindow.open":`Open`,"dataWindow.high":`High`,"dataWindow.low":`Low`,"dataWindow.close":`Close`,"dataWindow.change":`Change`,"dataWindow.volume":`Volume`,"bracket.place":`Place`,"bracket.hint":`drag lines to adjust`,"bracket.longPlaced":`Long bracket placed · {rr}R`,"bracket.shortPlaced":`Short bracket placed · {rr}R`,"order.buyLimit":`Buy limit @ {price}`,"order.sellLimit":`Sell limit @ {price}`,"order.buyStop":`Buy stop @ {price}`,"order.sellStop":`Sell stop @ {price}`,"toast.pinned":`Pinned to favorites`,"toast.unpinned":`Unpinned`,"sidebar.unpinHint":`{tool} (right-click to unpin)`,"toast.imageCopied":`Chart image copied`,"toast.imageCopyFailed":`Copy failed — image clipboard unavailable`,"toast.linkCopied":`Share link copied`,"toast.copyFailed":`Copy failed — clipboard unavailable`,"toast.compareNeedsAdapter":`Comparison needs a live data adapter`,"toast.comparing":`Comparing {symbol}`,"toast.loadFailed":`failed to load`,"toast.compareNoBars":`{symbol}: no bars at {interval}`,"toast.autoFibAdded":`Auto Fibonacci added`,"toast.noSwing":`No clear swing in view`,"toast.fullscreenUnavailable":`Fullscreen is not available`,"toast.fileLoaded":`Loaded {count} bars from {file}`,"toast.fileSkipped":`{count} skipped`,"hotkeys.commandPalette":`Command palette`,"hotkeys.symbolSearch":`Symbol search`,"hotkeys.goToDate":`Go to date`,"hotkeys.invertScale":`Invert price scale`,"hotkeys.showSheet":`Show this sheet`,"hotkeys.saveLayout":`Save the layout`,"hotkeys.typeInterval":`Type a number to change the interval`,"hotkeys.typeSymbol":`Type a letter to search for a symbol`,"hotkeys.pan":`Pan — past the last bar into empty future space`,"hotkeys.boxSelect":`Select drawings in a box`,"hotkeys.toggleSelect":`Add / remove a drawing from the selection`,"hotkeys.measure":`Measure tool (bars × price Δ)`,"hotkeys.scalePrice":`Compress / expand vertical scale`,"hotkeys.zoomTime":`Zoom time axis`,"hotkeys.autoScale":`Re-enable auto-scale`,"hotkeys.fit":`Fit content`,"hotkeys.zoomCursor":`Zoom around cursor`,"hotkeys.touchPan":`Pan / move crosshair`,"hotkeys.pinch":`Zoom around midpoint`,"hotkeys.longPress":`Pin OHLC tooltip at bar`,"hotkeys.touchAxis":`Scale price / time axis`,"hotkeys.panBar":`Pan one bar`,"hotkeys.zoomInOut":`Zoom in / out`,"hotkeys.toStart":`Scroll to start`,"hotkeys.toEnd":`Scroll to end (live edge)`,"hotkeys.undo":`Undo`,"hotkeys.redo":`Redo`,"hotkeys.cancelDrawing":`Cancel active drawing`,"hotkeys.copy":`Copy selected drawings`,"hotkeys.paste":`Paste drawings (into any chart on the page)`,"key.drag":`Drag`,"key.click":`Click`,"key.doubleClick":`Double-click`,"key.scroll":`Scroll`,"key.priceAxis":`Price axis`,"key.timeAxis":`Time axis`,"key.oneFinger":`1 finger`,"key.twoFingers":`2 fingers`,"key.pinch":`Pinch`,"key.longPress":`Long-press`,"key.axisStrip":`Axis strip`,"hotkeys.drawingMenu":`A drawing's menu (on the drawing)`,"hotkeys.drawingSettings":`A drawing's settings (on the drawing)`,"hotkeys.group":`Group the selected drawings`,"hotkeys.ungroup":`Ungroup the selected drawings`,"hotkeys.orderStep":`Bring forward / send backward`,"hotkeys.orderEnd":`Bring to front / send to back`,"hotkeys.finishPath":`Finish a path or polyline`,"key.rightClick":`Right-click`},t={"toolbar.indicators":`Chỉ báo`,"toolbar.more":`Thêm`,"toolbar.indicators.all":`Tất cả`,"indicatorType.overlay":`phủ lên`,"indicatorType.panel":`bảng riêng`,"indicatorPicker.search":`Tìm kiếm`,"indicatorPicker.groups":`Nhóm`,"indicatorPicker.favorites":`Yêu thích`,"indicatorPicker.favorite":`Yêu thích`,"indicatorPicker.noFavorites":`Gắn sao cho chỉ báo để giữ nó ở đây.`,"indicatorPicker.noMatch":`Không có chỉ báo nào khớp với “{query}”.`,"indicatorPicker.noTemplates":`Lưu các chỉ báo trên biểu đồ thành mẫu để thêm tất cả cùng lúc.`,"indicatorPicker.added":`Đã thêm {name}`,"indicatorPicker.onChart":`Trên biểu đồ: {count}`,"indicatorCategory.movingAverages":`Đường trung bình động`,"indicatorCategory.trend":`Xu hướng`,"indicatorCategory.oscillators":`Dao động`,"indicatorCategory.volatility":`Biến động`,"indicatorCategory.volume":`Khối lượng`,"indicatorCategory.bands":`Dải & kênh`,"indicatorCategory.patterns":`Giá & mô hình`,"indicatorCategory.other":`Khác`,"toolbar.replay":`Phát lại`,"replay.selectHint":`Bấm vào một nến để bắt đầu phát lại`,"replay.random":`Nến ngẫu nhiên`,"replay.realtime":`Về thời gian thực`,"replay.barsPerSecond":`nến/giây`,"replay.play":`Phát`,"replay.pause":`Tạm dừng`,"replay.stepBack":`Lùi một nến (Shift+←)`,"replay.stepForward":`Tiến một nến (Shift+→)`,"toolbar.longBracket":`Lệnh Long`,"toolbar.shortBracket":`Lệnh Short`,"toolbar.depthLadder":`Sổ lệnh`,"toolbar.objects":`Đối tượng`,"toolbar.priceAlerts":`Cảnh báo giá`,"toolbar.screenshot":`Chụp màn hình`,"toolbar.settings":`Cài đặt biểu đồ`,"toolbar.toggleTheme":`Đổi giao diện`,"toolbar.timeframes":`Khung thời gian`,"toolbar.timeframes.pin":`Ghim lên thanh công cụ`,"toolbar.timeframes.custom":`Khung tuỳ chỉnh, ví dụ 7m, 90m, 2h, 3D`,"toolbar.timeframes.add":`Thêm khung`,"toolbar.timeframes.remove":`Xoá khung`,"toolbar.timeframes.invalid":`Nhập số và đơn vị: 7m, 2h, 3D, 1W, 2M`,"toolbar.timeframes.ticks":`Tick`,"toolbar.timeframes.seconds":`Giây`,"toolbar.timeframes.minutes":`Phút`,"toolbar.timeframes.hours":`Giờ`,"toolbar.timeframes.days":`Ngày`,"toolbar.timeframes.weeks":`Tuần`,"toolbar.timeframes.months":`Tháng`,"toolbar.trade":`Giao dịch`,"statusBar.label":`Thanh trạng thái`,"statusBar.log":`log`,"statusBar.auto":`tự động`,"statusBar.marketOpen":`Mở cửa`,"statusBar.marketClosed":`Đóng cửa`,"toolbar.fullscreen":`Toàn màn hình`,"legend.show":`Hiện`,"legend.hide":`Ẩn`,"legend.settings":`Cài đặt`,"legend.remove":`Xoá`,"legend.collapse":`Thu gọn chỉ báo`,"legend.expand":`Hiện chỉ báo`,"legend.offChartType":`Không vẽ ở loại biểu đồ này`,"indicatorSettings.title":`Cài đặt {name}`,"indicatorSettings.tab.inputs":`Thông số`,"indicatorSettings.tab.style":`Kiểu`,"indicatorSettings.tab.levels":`Mức`,"indicatorSettings.tab.visibility":`Hiển thị`,"indicatorSettings.defaults":`Mặc định`,"indicatorSettings.resetSettings":`Đặt lại cài đặt`,"indicatorSettings.saveAsDefault":`Lưu làm mặc định`,"indicatorSettings.defaultSaved":`Từ giờ, chỉ báo {name} mới sẽ bắt đầu như thế này.`,"indicatorSettings.defaultSaveFailed":`Không lưu được mặc định`,"indicatorSettings.rangeFrom":`từ`,"indicatorSettings.rangeTo":`đến`,"indicatorSettings.offInterval":`Không hiển thị ở khung thời gian này`,"indicatorSettings.noInputs":`Chỉ báo này không có thông số để chỉnh.`,"indicatorInput.anchor":`Mốc`,"indicatorInput.anchor.session":`Phiên`,"indicatorInput.anchor.week":`Tuần`,"indicatorInput.anchor.month":`Tháng`,"indicatorInput.anchor.all":`Tất cả nến`,"indicatorSettings.source.prices":`Giá`,"indicatorSettings.source.indicators":`Chỉ báo`,"indicatorSettings.lineWidth":`Độ dày nét`,"indicatorSettings.scale":`Thang giá`,"indicatorSettings.scale.right":`Phải (thang giá)`,"indicatorSettings.scale.left":`Trái (dải riêng)`,"indicatorSettings.up":`tăng`,"indicatorSettings.down":`giảm`,"indicatorSettings.addLevel":`Thêm mức`,"indicatorSettings.removeLevel":`Xoá mức`,"indicatorSettings.noLevels":`Chưa có mức nào.`,"indicatorSettings.level":`Mức`,"indicatorSettings.close":`Đóng`,"toolbar.exitFullscreen":`Thoát toàn màn hình`,"range.presets":`Khoảng hiển thị`,"range.all":`Tất cả`,"range.goTo":`Đi tới ngày`,"range.goToSubmit":`Đi tới`,"range.date":`Ngày`,"range.time":`Giờ`,"range.cancel":`Huỷ`,"calendar.prevMonth":`Tháng trước`,"calendar.nextMonth":`Tháng sau`,"calendar.today":`Hôm nay`,"range.beforeData":`Đang hiện nến sớm nhất đã tải`,"goTo.title":`Đi tới`,"goTo.range":`Khoảng tự chọn`,"goTo.from":`Từ`,"goTo.to":`Đến`,"chartType.candlestick":`Nến`,"chartType.line":`Đường`,"chartType.area":`Vùng`,"chartType.bar":`Thanh`,"chartType.heikinAshi":`Heikin-Ashi`,"chartType.hollowCandle":`Nến rỗng`,"chartType.baseline":`Đường cơ sở`,"chartType.volumeCandles":`Nến khối lượng`,"chartType.equivolume":`Equivolume`,"chartType.hlcArea":`Vùng HLC`,"chartType.stepLine":`Đường bậc thang`,"chartType.lineWithMarkers":`Đường + điểm đánh dấu`,"chartType.hiLo":`Cao-Thấp`,"chartType.renko":`Renko`,"chartType.lineBreak":`Line Break`,"chartType.kagi":`Kagi`,"chartType.pointAndFigure":`Point & Figure`,"chartType.rangeBars":`Nến theo biên độ`,"watchlist.title":`Danh mục theo dõi`,"watchlist.lists":`Danh sách`,"watchlist.newList":`Danh sách mới…`,"watchlist.rename":`Đổi tên danh sách…`,"watchlist.deleteList":`Xoá danh sách`,"watchlist.confirmDelete":`Xoá “{name}”? Bấm lần nữa`,"watchlist.add":`Thêm mã`,"watchlist.remove":`Bỏ {symbol}`,"watchlist.empty":`Chưa có mã nào. Thêm bằng nút +.`,"watchlist.listName":`Tên danh sách`,"symbolInfo.title":`Thông tin mã`,"symbolInfo.open":`Thị trường mở cửa`,"symbolInfo.closed":`Thị trường đóng cửa`,"symbolInfo.always":`Giao dịch suốt ngày đêm`,"symbolInfo.closesIn":`đóng cửa {when}`,"symbolInfo.opensIn":`mở cửa {when}`,"symbolInfo.prevClose":`Đóng cửa phiên trước`,"symbolInfo.bid":`Giá mua`,"symbolInfo.ask":`Giá bán`,"symbolInfo.tick":`Bước giá`,"symbolInfo.currency":`Tiền tệ`,"symbolInfo.timezone":`Múi giờ`,"symbolInfo.hours":`Giờ giao dịch`,"symbolInfo.news":`Tin tức`,"symbolInfo.noNews":`Chưa có tin về mã này.`,"symbolInfo.newsFailed":`Không tải được tin tức.`,"symbolInfo.loading":`Đang tải…`,"action.symbolInfo":`Thông tin mã`,"nav.label":`Điều hướng biểu đồ`,"nav.zoomIn":`Phóng to`,"nav.zoomOut":`Thu nhỏ`,"nav.scrollLeft":`Cuộn sang trái`,"nav.scrollRight":`Cuộn sang phải`,"nav.reset":`Đặt lại khung nhìn`,"a11y.role":`biểu đồ`,"a11y.summary":`{what}. Giá cuối {close}.`,"a11y.empty":`Biểu đồ, chưa có dữ liệu.`,"a11y.view":`Đang hiện {count} nến, từ {from} đến {to}. Cao nhất {high}, thấp nhất {low}.`,"a11y.bar":`{time}: mở {open}, cao {high}, thấp {low}, đóng {close}, khối lượng {volume}.`,"a11y.keys":`Phím mũi tên để cuộn và phóng to thu nhỏ, Home và End để về đầu và cuối. Dấu phẩy và dấu chấm đọc từng nến một.`,"status.connecting":`Đang kết nối...`,"status.live":`Trực tiếp`,"status.connectionFailed":`Kết nối thất bại`,"status.loading":`Đang tải biểu đồ...`,"history.loading":`Đang tải dữ liệu cũ…`,"history.failed":`Không tải được dữ liệu cũ`,"settings.title":`Cài đặt biểu đồ`,"settings.tab.symbol":`Mã`,"settings.tab.statusLine":`Dòng trạng thái`,"settings.tab.scales":`Thang đo`,"settings.tab.appearance":`Giao diện`,"settings.tab.layers":`Lớp`,"settings.template":`Mẫu`,"settings.section.axes":`Trục`,"settings.saveTemplate":`Lưu thành mẫu…`,"settings.saveTemplateTitle":`Lưu mẫu biểu đồ`,"settings.templatePlaceholder":`Biểu đồ của tôi`,"settings.resetToDefaults":`Khôi phục mặc định`,"settings.section.candleColors":`Màu nến`,"settings.section.background":`Nền`,"hotkeys.title":`Phím tắt`,"hotkeys.footer":`Nhấn ? bất cứ lúc nào để mở bảng này`,"hotkeys.close":`Đóng`,"hotkeys.search":`Tìm phím tắt`,"hotkeys.noMatch":`Không có phím tắt nào khớp`,"hotkeys.group.searchNavigation":`Tìm kiếm & điều hướng`,"hotkeys.group.chartManipulation":`Thao tác biểu đồ`,"hotkeys.group.touch":`Cảm ứng (di động / máy tính bảng)`,"hotkeys.group.keyboard":`Bàn phím`,"hotkeys.group.drawing":`Vẽ`,"hotkeys.group.more":`Khác`,"common.close":`Đóng`,"common.cancel":`Huỷ`,"common.save":`Lưu`,"common.show":`Hiện`,"common.hide":`Ẩn`,"common.lock":`Khoá`,"common.unlock":`Mở khoá`,"common.open":`Mở`,"common.back":`Quay lại`,"settings.upBody":`Thân nến tăng`,"settings.downBody":`Thân nến giảm`,"settings.upWick":`Râu nến tăng`,"settings.downWick":`Râu nến giảm`,"settings.background":`Nền`,"settings.grid":`Lưới`,"settings.section.lastPrice":`Giá cuối`,"settings.horizontal":`Ngang`,"settings.vertical":`Dọc`,"settings.scaleLines":`Đường kẻ`,"settings.priceLine":`Đường giá`,"settings.paneSeparator":`Vạch ngăn pane`,"settings.legendText":`Chữ chú thích`,"settings.tab.trading":`Giao dịch`,"settings.up":`Tăng`,"settings.down":`Giảm`,"settings.aboveBase":`Trên đường nền`,"settings.belowBase":`Dưới đường nền`,"settings.areaTop":`Tô phía trên`,"settings.areaBottom":`Tô phía dưới`,"settings.paneBackground":`Nền pane`,"settings.paneTitles":`Tiêu đề pane`,"settings.legendLabels":`Nhãn chú thích`,"settings.watermark":`Hình mờ`,"settings.labelBackground":`Nền nhãn`,"settings.labelText":`Chữ nhãn`,"settings.sessionBreaks":`Vạch phiên`,"settings.section.orders":`Lệnh và vị thế`,"settings.profit":`Lãi`,"settings.loss":`Lỗ`,"settings.section.signals":`Điểm tín hiệu`,"settings.section.tradeZones":`Vùng lệnh`,"settings.openTrade":`Đang mở`,"settings.handles":`Tay nắm khi chọn`,"settings.gridLines":`Đường lưới`,"settings.volume":`Khối lượng`,"settings.volumeProfile":`Hồ sơ khối lượng`,"settings.marketProfile":`Hồ sơ thị trường (TPO)`,"settings.marketProfileSplit":`Hồ sơ thị trường theo phiên`,"settings.marketProfileLetters":`Chữ cái hồ sơ thị trường`,"settings.marketProfileBuckets":`Số hàng hồ sơ thị trường`,"settings.marketProfileOpacity":`Độ mờ hồ sơ thị trường`,"settings.depthHeatmap":`Bản đồ nhiệt thanh khoản`,"settings.depthHeatmapOpacity":`Độ mờ bản đồ nhiệt`,"settings.swingMarkers":`Điểm đảo chiều`,"settings.swingStrength":`Độ mạnh điểm đảo chiều`,"settings.swingStructure":`Cấu trúc đỉnh đáy (HH/HL)`,"settings.sessionShading":`Tô màu phiên`,"settings.periodLevels":`Mức của kỳ trước`,"settings.periodLevelsBasis":`Kỳ trước`,"settings.priorDay":`Ngày trước (PDH/PDL)`,"settings.priorWeek":`Tuần trước (PWH/PWL)`,"settings.ohlcLegend":`Chú thích OHLC`,"settings.indicatorValues":`Giá trị chỉ báo trên trục`,"settings.barCountdown":`Đếm ngược nến`,"settings.crosshairMode":`Con trỏ chữ thập`,"settings.crosshair.magnet":`Hút vào giá`,"settings.crosshair.normal":`Thường`,"settings.crosshair.hidden":`Ẩn`,"settings.timezone":`Múi giờ`,"settings.timezone.local":`Giờ máy`,"settings.timezone.exchange":`Theo sàn`,"settings.numberLocale":`Định dạng số`,"settings.autoScale":`Tự co giãn thang`,"settings.invertScale":`Đảo ngược thang (Alt+I)`,"settings.leftScale":`Thang giá bên trái`,"settings.priceScale":`Thang giá`,"settings.mainSeries":`Chuỗi giá chính`,"settings.highLowLines":`Đường cao nhất và thấp nhất`,"settings.extendedHours":`Giờ giao dịch mở rộng`,"settings.boxSize":`Kích thước ô`,"settings.atrPeriod":`Độ dài ATR`,"settings.lineBreakLines":`Số đường cần phá`,"settings.reversal":`Mức đảo chiều`,"settings.reversalType":`Đảo chiều theo`,"settings.reversalType.percent":`Phần trăm`,"settings.reversalType.price":`Giá`,"settings.reversalBoxes":`Số ô đảo chiều`,"settings.barRange":`Biên độ`,"settings.auto":`Tự động`,"settings.numberAtLeast":`Từ {min} trở lên`,"settings.numberWhole":`Số nguyên từ {min} đến {max}`,"settings.scale.regular":`Thường`,"settings.scale.logarithmic":`Logarit`,"settings.scale.percentage":`Phần trăm`,"settings.scale.indexedTo100":`Quy về 100`,"alerts.title":`Cảnh báo giá`,"alerts.close":`Đóng cảnh báo`,"alerts.value":`Giá trị`,"alerts.note":`Ghi chú (không bắt buộc)`,"alerts.add":`Thêm cảnh báo`,"alerts.empty":`Chưa có cảnh báo nào. Thêm ở trên, hoặc bấm chuột phải vào biểu đồ.`,"alerts.delete":`Xoá cảnh báo`,"alerts.triggered":`đã kích hoạt`,"alerts.source.price":`Giá`,"alerts.condition.crossing":`Cắt qua`,"alerts.condition.crossingUp":`Cắt lên`,"alerts.condition.crossingDown":`Cắt xuống`,"alerts.condition.greaterThan":`Lớn hơn`,"alerts.condition.lessThan":`Nhỏ hơn`,"alerts.fired":`Cảnh báo: {text}`,"objects.title":`Đối tượng`,"objects.close":`Đóng danh sách đối tượng`,"objects.indicators":`Chỉ báo`,"objects.drawings":`Hình vẽ`,"objects.compare":`So sánh`,"objects.addCompare":`Thêm mã để so sánh`,"objects.noIndicators":`Chưa có chỉ báo`,"objects.noDrawings":`Chưa có hình vẽ`,"objects.noComparisons":`Chưa so sánh mã nào`,"objects.indicatorSettings":`Cài đặt chỉ báo`,"objects.removeIndicator":`Xoá chỉ báo`,"objects.removeDrawing":`Xoá hình vẽ`,"objects.removeComparison":`Bỏ so sánh`,"drawing.cursor":`Con trỏ`,"drawing.tools":`Công cụ vẽ`,"drawing.style":`Kiểu vẽ & mẫu`,"drawing.magnet":`Hút vào giá`,"drawing.magnetOn":`Đang hút vào giá`,"drawing.magnetOff":`Tắt hút vào giá`,"drawing.eraser":`Tẩy: nhấp vào hình vẽ để xoá`,"drawing.zoomArea":`Phóng to: kéo một khung để phóng to vùng đó`,"drawing.magnetStrong":`Nam châm: mạnh (luôn bắt điểm)`,"drawing.stay":`Giữ công cụ vẽ`,"drawing.undo":`Hoàn tác`,"drawing.redo":`Làm lại`,"drawing.clearAll":`Xoá tất cả`,"drawing.pinFavorite":`Ghim vào mục yêu thích`,"drawing.lockAll":`Khoá mọi hình vẽ`,"drawing.hideAll":`Ẩn mọi hình vẽ`,"drawingStyle.title":`Kiểu vẽ`,"drawingStyle.templates":`Mẫu`,"drawingStyle.templateName":`Tên mẫu`,"drawingStyle.noTemplates":`Chưa lưu mẫu nào`,"drawingStyle.deleteTemplate":`Xoá mẫu`,"drawingSettings.tab.style":`Kiểu`,"drawingSettings.tab.text":`Chữ`,"drawingSettings.tab.coordinates":`Toạ độ`,"drawingSettings.tab.visibility":`Hiển thị`,"drawingSettings.ok":`OK`,"drawingSettings.color":`Màu`,"drawingSettings.lineWidth":`Độ dày nét`,"drawingSettings.lineStyle":`Kiểu nét`,"drawingSettings.lineStyle.solid":`Liền`,"drawingSettings.lineStyle.dashed":`Gạch`,"drawingSettings.lineStyle.dotted":`Chấm`,"drawingSettings.line":`Đường`,"drawingSettings.lineEnds":`Hai đầu đường`,"drawingSettings.lineEnd.normal":`Thường`,"drawingSettings.lineEnd.arrow":`Mũi tên`,"drawingSettings.fill":`Màu nền`,"drawingSettings.opacity":`Độ đậm (%)`,"drawingSettings.text":`Chữ`,"drawingSettings.fontSize":`Cỡ chữ`,"drawingSettings.saveDefault":`Lưu làm mặc định`,"drawingSettings.defaultSaved":`Đã lưu làm mặc định cho {name}`,"drawingSettings.saveTemplateTitle":`Lưu mẫu hình vẽ`,"drawingSettings.levelVisible":`Hiện mức này`,"drawingSettings.levelValue":`Mức`,"drawingSettings.levelColor":`Màu của mức`,"drawingSettings.removeLevel":`Xoá mức`,"drawingSettings.addLevel":`Thêm mức`,"drawingSettings.point":`Điểm {n}`,"drawingSettings.date":`Ngày`,"drawingSettings.time":`Giờ`,"drawingSettings.price":`Giá`,"drawingOption.extendLeft":`Kéo dài sang trái`,"drawingOption.extendRight":`Kéo dài sang phải`,"drawingOption.middleLine":`Đường giữa`,"drawingOption.levels":`Các mức`,"drawingOption.reverse":`Đảo chiều`,"drawingOption.showLevels":`Hiện mức`,"drawingOption.showPrices":`Hiện giá`,"drawingOption.labelPosition":`Vị trí nhãn`,"drawingOption.labelPosition.left":`Trái`,"drawingOption.labelPosition.right":`Phải`,"drawingOption.background":`Tô nền`,"drawingOption.leftEnd":`Đầu trái`,"drawingOption.rightEnd":`Đầu phải`,"drawingOption.showMiddlePoint":`Hiện điểm giữa`,"drawingOption.showPriceRange":`Hiện khoảng giá`,"drawingOption.showBarsRange":`Hiện số nến`,"drawingOption.showDateRange":`Hiện khoảng ngày giờ`,"drawingOption.showAngle":`Hiện góc`,"drawingOption.alwaysShowStats":`Luôn hiện thống kê`,"drawingOption.statsPosition":`Vị trí thống kê`,"drawingOption.statsPosition.left":`Trái`,"drawingOption.statsPosition.center":`Giữa`,"drawingOption.statsPosition.right":`Phải`,"objects.drawingSettings":`Cài đặt hình vẽ`,"objects.renameGroup":`Đổi tên nhóm`,"drawingMenu.label":`Hình vẽ`,"drawingMenu.settings":`Cài đặt…`,"drawingMenu.front":`Đưa lên trên cùng`,"drawingMenu.forward":`Đưa lên một lớp`,"drawingMenu.backward":`Đưa xuống một lớp`,"drawingMenu.back":`Đưa xuống dưới cùng`,"drawingMenu.group":`Nhóm lại`,"drawingMenu.ungroup":`Bỏ nhóm`,"drawingMenu.duplicate":`Nhân bản`,"drawingMenu.delete":`Xoá`,"selectionToolbar.label":`Thanh công cụ hình vẽ`,"chartMenu.label":`Biểu đồ`,"chartMenu.addAlert":`Thêm cảnh báo tại {price}`,"chartMenu.alertAdded":`Đã thêm cảnh báo tại {price}`,"chartMenu.buyLimit":`Mua giới hạn tại {price}`,"chartMenu.buyStop":`Mua dừng tại {price}`,"chartMenu.sellLimit":`Bán giới hạn tại {price}`,"chartMenu.sellStop":`Bán dừng tại {price}`,"chartMenu.horizontalLine":`Đường ngang tại {price}`,"chartMenu.resetView":`Đặt lại khung nhìn`,"chartMenu.resetTimeScale":`Đặt lại trục thời gian`,"chartMenu.hideDrawings":`Ẩn hình vẽ`,"chartMenu.showDrawings":`Hiện hình vẽ`,"chartMenu.removeDrawings":`Xoá hình vẽ`,"chartMenu.settings":`Cài đặt…`,"chartMenu.invertScale":`Đảo ngược thang`,"chartMenu.goToDate":`Đi tới ngày…`,"toolbar.account":`Tài khoản: vị thế, lệnh, lịch sử`,"chartMenu.orderTicket":`Lệnh mới…`,"account.title":`Tài khoản`,"account.positions":`Vị thế`,"account.orders":`Lệnh`,"account.history":`Lịch sử`,"account.newOrder":`Lệnh mới`,"account.close":`Đóng bảng tài khoản`,"account.side":`Chiều`,"account.long":`Mua`,"account.short":`Bán`,"account.quantity":`KL`,"account.entry":`Giá vào`,"account.price":`Giá`,"account.pnl":`Lãi/lỗ`,"account.stopLoss":`SL`,"account.takeProfit":`TP`,"account.actions":`Thao tác`,"account.time":`Thời gian`,"account.reason":`Lý do`,"account.reason.order":`Lệnh`,"account.reason.close":`Đóng`,"account.reason.reverse":`Đảo chiều`,"account.reason.stopLoss":`Cắt lỗ`,"account.reason.takeProfit":`Chốt lời`,"account.reverse":`Đảo chiều vị thế`,"account.closePosition":`Đóng vị thế`,"account.cancelOrder":`Huỷ lệnh`,"account.noPositions":`Không có vị thế mở`,"account.noOrders":`Không có lệnh chờ`,"account.noFills":`Chưa có giao dịch`,"account.realised":`Lãi/lỗ đã chốt: {pnl}`,"account.openPnl":`Lãi/lỗ đang mở: {pnl}`,"ticket.title":`Lệnh mới`,"ticket.buy":`Mua`,"ticket.sell":`Bán`,"ticket.type":`Loại lệnh`,"ticket.type.market":`Thị trường`,"ticket.type.limit":`Giới hạn`,"ticket.type.stop":`Dừng`,"ticket.quantity":`Khối lượng`,"ticket.price":`Giá`,"ticket.stopLoss":`Cắt lỗ`,"ticket.takeProfit":`Chốt lời`,"ticket.timeInForce":`Hiệu lực`,"ticket.tif.gtc":`Đến khi huỷ`,"ticket.tif.day":`Trong ngày`,"ticket.value":`Giá trị`,"ticket.risk":`Rủi ro`,"ticket.reward":`Lợi nhuận`,"ticket.rewardRisk":`Lời trên lỗ`,"ticket.stepDown":`Giảm {field}`,"ticket.stepUp":`Tăng {field}`,"ticket.placeBuy":`Đặt lệnh mua`,"ticket.placeSell":`Đặt lệnh bán`,"ticket.sent":`Đã gửi lệnh: {side} {quantity} @ {price}`,"ticket.problem.quantity":`Nhập khối lượng lớn hơn 0.`,"ticket.problem.price":`Nhập giá lớn hơn 0.`,"ticket.problem.market":`Chưa có giá thị trường.`,"ticket.problem.stopLoss":`Nhập giá cắt lỗ lớn hơn 0.`,"ticket.problem.takeProfit":`Nhập giá chốt lời lớn hơn 0.`,"ticket.problem.stopLossSide":`Cắt lỗ phải dưới giá vào với lệnh mua, trên giá vào với lệnh bán.`,"ticket.problem.takeProfitSide":`Chốt lời phải trên giá vào với lệnh mua, dưới giá vào với lệnh bán.`,"ticket.problem.limitSide":`Lệnh mua giới hạn đặt dưới giá thị trường, lệnh bán giới hạn đặt trên.`,"ticket.problem.stopSide":`Lệnh mua dừng đặt trên giá thị trường, lệnh bán dừng đặt dưới.`,"ticket.problem.priceStep":`Giá phải đúng bước giá của thị trường.`,"ticket.problem.priceLimits":`Giá hôm nay nằm trong khoảng từ giá sàn {floor} đến giá trần {ceiling}.`,"ticket.problem.lot":`Khối lượng trên một lô phải là bội số của {lot} (lô chẵn); phần lô lẻ đặt thành lệnh riêng.`,"toolbar.layouts":`Bố cục`,"layouts.unnamed":`Chưa đặt tên`,"layouts.unsavedChanges":`có thay đổi chưa lưu`,"layouts.save":`Lưu bố cục`,"layouts.saveAs":`Lưu thành…`,"layouts.rename":`Đổi tên…`,"layouts.autoSave":`Tự động lưu`,"layouts.open":`Mở bố cục…`,"layouts.saved":`Đã lưu bố cục: {name}`,"layouts.saveFailed":`Không lưu được bố cục`,"layouts.openFailed":`Không mở được bố cục`,"layouts.deleteFailed":`Không xoá được bố cục`,"layouts.saveAsTitle":`Lưu bố cục thành`,"layouts.renameTitle":`Đổi tên bố cục`,"layouts.renameSubmit":`Đổi tên`,"layouts.copyName":`{name} (bản sao)`,"layouts.name":`Tên`,"layouts.namePlaceholder":`Bố cục của tôi`,"layouts.dialogTitle":`Các bố cục`,"layouts.search":`Tìm bố cục`,"layouts.empty":`Chưa có bố cục nào được lưu`,"layouts.noMatch":`Không có bố cục nào khớp`,"layouts.current":`Đang mở`,"layouts.updated":`lưu lúc {time}`,"layouts.renameNamed":`Đổi tên {name}`,"layouts.deleteNamed":`Xoá {name}`,"layouts.deleteConfirm":`Xoá`,"grid.bar":`Các biểu đồ`,"grid.layout":`Cách chia biểu đồ`,"grid.single":`Một biểu đồ`,"grid.layoutOption":`{count} biểu đồ, {cols} cột và {rows} hàng`,"grid.chart":`Biểu đồ {n}`,"grid.charts":`Biểu đồ`,"grid.sync":`Đồng bộ`,"grid.sync.symbol":`Mã`,"grid.sync.interval":`Khung`,"grid.sync.crosshair":`Con trỏ`,"grid.sync.time":`Thời gian`,"grid.sync.drawings":`Hình vẽ`,"grid.sync.replay":`Phát lại`,"grid.sync.symbol.hint":`Đổi mã trên mọi biểu đồ cùng lúc`,"grid.sync.interval.hint":`Đổi khung thời gian trên mọi biểu đồ cùng lúc`,"grid.sync.crosshair.hint":`Hiện thời điểm của con trỏ trên mọi biểu đồ`,"grid.sync.time.hint":`Cuộn và phóng mọi biểu đồ tới cùng khoảng thời gian`,"grid.sync.drawings.hint":`Chép hình vẽ sang các biểu đồ cùng mã`,"grid.sync.replay.hint":`Phát lại mọi biểu đồ đến cùng một thời điểm`,"legend.more":`Thêm`,"legend.moveUp":`Chuyển lên pane trên`,"legend.moveDown":`Chuyển xuống pane dưới`,"legend.moveNew":`Chuyển sang pane mới`,"legend.movePrice":`Chuyển về pane giá`,"pane.moveUp":`Đưa pane lên`,"pane.moveDown":`Đưa pane xuống`,"pane.collapse":`Thu gọn pane`,"pane.expand":`Mở rộng pane`,"pane.maximize":`Phóng to pane`,"pane.restore":`Trả lại các pane`,"toolbar.indicators.templates":`Mẫu`,"templates.save":`Lưu các chỉ báo thành mẫu…`,"templates.saveTitle":`Lưu mẫu chỉ báo`,"templates.namePlaceholder":`Bộ chỉ báo của tôi`,"templates.saved":`Đã lưu mẫu: {name}`,"templates.applied":`Đã áp dụng mẫu: {name}`,"templates.delete":`Xoá mẫu {name}`,"templates.nothing":`Chưa có chỉ báo nào để lưu`,"templates.saveFailed":`Không lưu được mẫu`,"interval.title":`Đổi khung thời gian`,"interval.hint":`5, 15m, 1h, 1D — Enter để áp dụng`,"interval.invalid":`Không phải khung thời gian biểu đồ này hiển thị được`,"alerts.condition.movesUp":`Tăng`,"alerts.condition.movesDown":`Giảm`,"alerts.source":`Theo dõi`,"alerts.conditionLabel":`Điều kiện`,"alerts.compareWith":`So với`,"alerts.compare.value":`Một giá trị`,"alerts.percent":`Phần trăm`,"alerts.bars":`Số nến`,"alerts.moveSummary":`{percent}% trong {bars} nến`,"alerts.onBarClose":`Chỉ khi đóng nến`,"alerts.onClose":`khi đóng nến`,"alerts.expires":`Hết hạn`,"alerts.expires.never":`Không hết hạn`,"alerts.expires.hour":`Hết hạn sau 1 giờ`,"alerts.expires.day":`Hết hạn sau 1 ngày`,"alerts.expires.week":`Hết hạn sau 1 tuần`,"alerts.expires.month":`Hết hạn sau 30 ngày`,"alerts.until":`đến {time}`,"alerts.expired":`Đã hết hạn`,"alerts.expiredToast":`Cảnh báo đã hết hạn: {text}`,"alerts.invalid":`Các thiết lập cảnh báo này không dùng chung được`,"replay.step":`Bước`,"replay.step.bar":`Nến`,"replay.stepsFailed":`Không tải được nến khung nhỏ: replay theo từng nến`,"markers.neutral":`Trung lập`,"markers.confidence":`độ tin cậy {pct}%`,"chartMenu.paneLog":`Thang logarit`,"chartMenu.paneInvert":`Đảo ngược thang`,"chartMenu.panePercent":`Thang phần trăm`,"chartMenu.exportData":`Xuất dữ liệu (CSV)`,"chartMenu.paste":`Dán`,"chartMenu.removeIndicators":`Xoá chỉ báo`,"chartMenu.resetPriceScale":`Đặt lại thang giá`,"chartMenu.labels":`Nhãn`,"chartMenu.lines":`Đường`,"chartMenu.lastPriceLine":`Đường giá cuối`,"compare.percent":`Thay đổi phần trăm, trên thang này`,"compare.ownScale":`Giá, trên thang riêng`,"compare.ownPane":`Giá, trong pane riêng`,"compare.title":`So sánh mã`,"compare.addAs":`Thêm theo kiểu`,"compare.onChart":`Trên biểu đồ`,"compare.symbols":`Các mã`,"compare.remove":`Bỏ {symbol}`,"compare.empty":`Chưa so sánh mã nào. Tìm một mã để thêm vào.`,"compare.way.spread":`Chênh lệch`,"compare.way.ratio":`Tỷ lệ`,"compare.way.correlation":`Tương quan`,"compare.way.correlationLog":`Tương quan lợi suất`,"drawingSettings.addAlert":`Thêm cảnh báo`,"drawingSettings.alertAdded":`Đã thêm cảnh báo: giá cắt {name}`,"drawingOption.rewardRatio":`Tỷ lệ lời:lỗ`,"drawingOption.accountSize":`Vốn tài khoản`,"drawingOption.riskMode":`Tính rủi ro theo`,"drawingOption.riskMode.percent":`Phần trăm vốn`,"drawingOption.riskMode.amount":`Số tiền`,"drawingOption.risk":`Rủi ro`,"drawingOption.qtyDecimals":`Số lẻ của khối lượng`,"drawingOption.showLabels":`Hiện nhãn`,"drawingOption.showText":`Hiện chữ`,"drawingOption.direction":`Hướng`,"drawingOption.direction.up":`Lên`,"drawingOption.direction.down":`Xuống`,"drawingOption.direction.left":`Trái`,"drawingOption.direction.right":`Phải`,"drawingOption.size":`Kích thước`,"drawingOption.glyph":`Biểu tượng`,"drawingOption.glyph.star":`Ngôi sao`,"drawingOption.glyph.heart":`Trái tim`,"drawingOption.glyph.check":`Dấu tích`,"drawingOption.glyph.cross":`Dấu chéo`,"drawingOption.glyph.circle":`Hình tròn`,"drawingOption.glyph.triangleUp":`Tam giác lên`,"drawingOption.glyph.triangleDown":`Tam giác xuống`,"drawingOption.glyph.bolt":`Tia sét`,"drawingOption.arrowEnd":`Mũi tên ở cuối`,"drawingOption.fullCircles":`Vẽ cả vòng tròn`,"drawingOption.clockwise":`Theo chiều kim đồng hồ`,"drawingOption.arcs":`Cung`,"drawingOption.degree":`Cấp sóng`,"drawingOption.degree.primary":`Primary`,"drawingOption.degree.intermediate":`Intermediate`,"drawingOption.degree.minor":`Minor`,"drawingOption.degree.minute":`Minute`,"drawingOption.mode":`Hiển thị dạng`,"drawingOption.mode.bars":`Nến`,"drawingOption.mode.line":`Đường`,"drawingOption.mode.highLow":`Cao-thấp`,"drawingOption.mirrored":`Đảo chiều thời gian`,"drawingOption.flipped":`Lật ngược`,"toolGroup.lines":`Đường`,"toolGroup.horizontalVertical":`Ngang/Dọc`,"toolGroup.channels":`Kênh`,"toolGroup.fibonacci":`Fibonacci`,"toolGroup.shapes":`Hình`,"toolGroup.gannPitchforks":`Gann & Pitchfork`,"toolGroup.patterns":`Mô hình`,"toolGroup.measure":`Đo`,"toolGroup.annotation":`Chú thích`,"toolGroup.forecasting":`Dự báo`,"toolGroup.brushes":`Bút vẽ`,"toolGroup.cycles":`Chu kỳ`,"toolGroup.elliott":`Sóng Elliott`,"tool.trendLine":`Đường xu hướng`,"tool.ray":`Tia`,"tool.extendedLine":`Đường kéo dài`,"tool.infoLine":`Đường thông tin`,"tool.trendAngle":`Góc xu hướng`,"tool.horizontalLine":`Đường ngang`,"tool.horizontalRay":`Tia ngang`,"tool.verticalLine":`Đường dọc`,"tool.crossLine":`Đường chữ thập`,"tool.parallelChannel":`Kênh song song`,"tool.regressionChannel":`Kênh hồi quy`,"tool.fibRetracement":`Fibonacci thoái lui`,"tool.fibExtension":`Fibonacci mở rộng`,"tool.fibChannel":`Kênh Fibonacci`,"tool.fibTimeZones":`Vùng thời gian Fibonacci`,"tool.fibSpeedResistanceFan":`Quạt tốc độ Fibonacci`,"tool.rectangle":`Hình chữ nhật`,"tool.circle":`Hình tròn`,"tool.ellipse":`Hình elip`,"tool.triangle":`Tam giác`,"tool.pitchfork":`Pitchfork`,"tool.schiffPitchfork":`Pitchfork Schiff`,"tool.modifiedSchiffPitchfork":`Pitchfork Schiff cải tiến`,"tool.gannFan":`Quạt Gann`,"tool.gannBox":`Hộp Gann`,"tool.cyclicLines":`Đường chu kỳ`,"tool.xabcdPattern":`Mô hình XABCD`,"tool.abcdPattern":`Mô hình ABCD`,"tool.headAndShoulders":`Vai đầu vai`,"tool.elliottWave":`Sóng Elliott`,"tool.priceRange":`Khoảng giá`,"tool.dateRange":`Khoảng thời gian`,"tool.dateAndPriceRange":`Khoảng giá và thời gian`,"tool.measure":`Đo`,"tool.text":`Chữ`,"tool.priceLabel":`Nhãn giá`,"tool.arrow":`Mũi tên`,"tool.riskReward":`Vị thế Long/Short`,"tool.anchoredVWAP":`VWAP neo`,"tool.volumeProfileRange":`Hồ sơ khối lượng theo khoảng`,"tool.note":`Ghi chú`,"tool.callout":`Chú thích`,"tool.flag":`Cờ đánh dấu`,"tool.arrowMark":`Mũi tên đánh dấu`,"tool.icon":`Biểu tượng`,"tool.brush":`Bút vẽ`,"tool.highlighter":`Bút dạ quang`,"tool.path":`Đường nhiều điểm`,"tool.polyline":`Đa giác`,"tool.curve":`Đường cong`,"tool.arc":`Cung tròn`,"tool.fibCircles":`Vòng tròn Fib`,"tool.fibSpiral":`Xoắn ốc Fib`,"tool.fibArcs":`Cung kháng cự tốc độ Fib`,"tool.fibWedge":`Nêm Fib`,"tool.pitchfan":`Quạt Pitchfork`,"tool.gannSquare":`Hình vuông Gann`,"tool.elliottImpulse":`Sóng đẩy Elliott`,"tool.elliottCorrection":`Sóng điều chỉnh Elliott`,"tool.elliottTriangle":`Sóng tam giác Elliott`,"tool.elliottDoubleCombo":`Sóng kết hợp kép Elliott`,"tool.elliottTripleCombo":`Sóng kết hợp ba Elliott`,"tool.threeDrives":`Mô hình ba nhịp`,"tool.cypherPattern":`Mô hình Cypher`,"tool.timeCycles":`Chu kỳ thời gian`,"tool.sineLine":`Đường hình sin`,"tool.forecast":`Dự báo`,"tool.projection":`Phóng chiếu`,"tool.barsPattern":`Mẫu nến`,"replay.label":`Phát lại`,"replay.position":`Vị trí phát lại`,"replay.speed":`Tốc độ`,"symbolSearch.placeholder":`Tìm mã… (ví dụ BTC, ETH, AAPL)`,"symbolSearch.empty":`Không có mã nào khớp`,"symbolSearch.searching":`Đang tìm…`,"symbolSearch.failed":`Không tìm được`,"symbolSearch.title":`Tìm mã`,"symbolSearch.symbol":`Mã`,"symbolSearch.description":`Mô tả`,"symbolSearch.kinds":`Loại mã`,"symbolSearch.allKinds":`Tất cả`,"symbolSearch.type":`Loại`,"symbolSearch.exchange":`Sàn`,"symbolSearch.allExchanges":`Tất cả các sàn`,"symbolSearch.more":`Mã khác: {count}. Gõ thêm để thu hẹp danh sách.`,"symbolSearch.typeHint":`Gõ một chữ cái trên biểu đồ để mở ô tìm này`,"palette.placeholder":`Tìm chỉ báo, loại biểu đồ, công cụ…`,"palette.empty":`Không tìm thấy kết quả`,"palette.group.indicator":`Chỉ báo`,"palette.group.chartType":`Loại biểu đồ`,"palette.group.drawing":`Công cụ vẽ`,"palette.group.timeframe":`Khung thời gian`,"palette.group.action":`Thao tác`,"palette.group.recent":`Gần đây`,"action.screenshot":`Chụp màn hình`,"action.copyImage":`Sao chép ảnh biểu đồ`,"action.toggleTheme":`Đổi giao diện`,"action.settings":`Cài đặt`,"action.shareView":`Chia sẻ góc nhìn (sao chép liên kết)`,"action.autoFib":`Fibonacci tự động (sóng đang hiện)`,"action.dataWindow":`Bật/tắt cửa sổ dữ liệu`,"action.clearDrawings":`Xoá mọi hình vẽ`,"ladder.title":`Sổ lệnh`,"ladder.bid":`Mua`,"ladder.price":`Giá`,"ladder.ask":`Bán`,"ladder.empty":`Chưa có dữ liệu sổ lệnh`,"ladder.sellAt":`Bán @ {price}`,"ladder.buyAt":`Mua @ {price}`,"ladder.spread":`Chênh lệch {spread}`,"dataWindow.title":`Cửa sổ dữ liệu`,"dock.rail":`Các bảng`,"dock.resize":`Đổi độ rộng của bảng`,"dataWindow.hover":`Rê chuột lên biểu đồ`,"dataWindow.open":`Mở cửa`,"dataWindow.high":`Cao`,"dataWindow.low":`Thấp`,"dataWindow.close":`Đóng cửa`,"dataWindow.change":`Thay đổi`,"dataWindow.volume":`Khối lượng`,"bracket.place":`Đặt lệnh`,"bracket.hint":`kéo các đường để chỉnh`,"bracket.longPlaced":`Đã đặt lệnh Long kèm SL/TP · {rr}R`,"bracket.shortPlaced":`Đã đặt lệnh Short kèm SL/TP · {rr}R`,"order.buyLimit":`Mua giới hạn @ {price}`,"order.sellLimit":`Bán giới hạn @ {price}`,"order.buyStop":`Mua dừng @ {price}`,"order.sellStop":`Bán dừng @ {price}`,"toast.pinned":`Đã ghim vào mục yêu thích`,"toast.unpinned":`Đã bỏ ghim`,"sidebar.unpinHint":`{tool} (chuột phải để bỏ ghim)`,"toast.imageCopied":`Đã sao chép ảnh biểu đồ`,"toast.imageCopyFailed":`Không sao chép được — trình duyệt không cho chép ảnh`,"toast.linkCopied":`Đã sao chép liên kết`,"toast.copyFailed":`Không sao chép được — trình duyệt không cho dùng clipboard`,"toast.compareNeedsAdapter":`So sánh cần một nguồn dữ liệu trực tiếp`,"toast.comparing":`Đang so sánh với {symbol}`,"toast.loadFailed":`không tải được`,"toast.compareNoBars":`{symbol}: không có nến ở khung {interval}`,"toast.autoFibAdded":`Đã thêm Fibonacci tự động`,"toast.noSwing":`Không thấy sóng rõ ràng trong khung nhìn`,"toast.fullscreenUnavailable":`Không mở được chế độ toàn màn hình`,"toast.fileLoaded":`Đã nạp {count} nến từ {file}`,"toast.fileSkipped":`bỏ qua {count}`,"hotkeys.commandPalette":`Bảng lệnh`,"hotkeys.symbolSearch":`Tìm mã`,"hotkeys.goToDate":`Đi tới ngày`,"hotkeys.invertScale":`Đảo ngược thang giá`,"hotkeys.showSheet":`Hiện bảng này`,"hotkeys.saveLayout":`Lưu bố cục`,"hotkeys.typeInterval":`Gõ số để đổi khung thời gian`,"hotkeys.typeSymbol":`Gõ chữ cái để tìm mã`,"hotkeys.pan":`Kéo — qua cả nến cuối, vào vùng tương lai trống`,"hotkeys.boxSelect":`Chọn các hình vẽ trong một khung`,"hotkeys.toggleSelect":`Thêm / bỏ một hình vẽ khỏi vùng chọn`,"hotkeys.measure":`Công cụ đo (số nến × chênh lệch giá)`,"hotkeys.scalePrice":`Co / giãn thang dọc`,"hotkeys.zoomTime":`Phóng to trục thời gian`,"hotkeys.autoScale":`Bật lại tự co giãn thang`,"hotkeys.fit":`Vừa khít dữ liệu`,"hotkeys.zoomCursor":`Phóng to quanh con trỏ`,"hotkeys.touchPan":`Kéo / di chuyển con trỏ`,"hotkeys.pinch":`Phóng to quanh điểm giữa`,"hotkeys.longPress":`Ghim chú thích OHLC tại nến`,"hotkeys.touchAxis":`Co giãn trục giá / thời gian`,"hotkeys.panBar":`Dời một nến`,"hotkeys.zoomInOut":`Phóng to / thu nhỏ`,"hotkeys.toStart":`Về đầu dữ liệu`,"hotkeys.toEnd":`Về cuối (nến mới nhất)`,"hotkeys.undo":`Hoàn tác`,"hotkeys.redo":`Làm lại`,"hotkeys.cancelDrawing":`Huỷ hình đang vẽ`,"hotkeys.copy":`Sao chép hình vẽ đang chọn`,"hotkeys.paste":`Dán hình vẽ (vào bất kỳ biểu đồ nào trên trang)`,"key.drag":`Kéo`,"key.click":`Bấm`,"key.doubleClick":`Bấm đúp`,"key.scroll":`Cuộn`,"key.priceAxis":`Trục giá`,"key.timeAxis":`Trục thời gian`,"key.oneFinger":`1 ngón`,"key.twoFingers":`2 ngón`,"key.pinch":`Chụm`,"key.longPress":`Nhấn giữ`,"key.axisStrip":`Dải trục`,"hotkeys.drawingMenu":`Menu của hình vẽ (trên hình)`,"hotkeys.drawingSettings":`Cài đặt hình vẽ (trên hình)`,"hotkeys.group":`Nhóm các hình đang chọn`,"hotkeys.ungroup":`Bỏ nhóm các hình đang chọn`,"hotkeys.orderStep":`Đưa lên / xuống một lớp`,"hotkeys.orderEnd":`Đưa lên trên cùng / xuống dưới cùng`,"hotkeys.finishPath":`Kết thúc đường nhiều điểm hoặc đa giác`,"key.rightClick":`Chuột phải`},n=new Map([[`en`,e],[`vi`,t]]);new Proxy({},{get:(e,t)=>typeof t==`string`?n.get(t.toLowerCase()):void 0,has:(e,t)=>typeof t==`string`&&n.has(t.toLowerCase()),ownKeys:()=>[...n.keys()],getOwnPropertyDescriptor:(e,t)=>typeof t==`string`&&n.has(t.toLowerCase())?{enumerable:!0,configurable:!0,value:n.get(t.toLowerCase())}:void 0});function r(e,t){n.set(e.toLowerCase(),t)}function i(e){let t=e.toLowerCase().replace(`_`,`-`),n=[t];/^zh-(tw|hk|mo|hant)/.test(t)&&n.push(`zh-hant`);let r=t.split(`-`)[0];return r!==t&&n.push(r),(r===`no`||r===`nn`)&&n.push(`nb`),n}function a(e){for(let t of i(e)){let e=n.get(t);if(e)return e}}var o=new Set;function s(t,n){let r={...e},i=t?a(t):void 0;return i?Object.assign(r,i):t&&!n&&!o.has(t)&&(o.add(t),console.warn(`[ChartWidget] No strings for locale "${t}"; showing English. Import the language from '@tradecanvas/chart/widget/locales' and pass it as \`messages\`.`)),n&&Object.assign(r,n),r}function c(t){return n=>t[n]??e[n]??n}var l=c(e);function u(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]):e)}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
|
|
2
|
+
//# sourceMappingURL=i18n-BjW5GVrO.cjs.map
|