Загрузка данных
===== 1. Публичные методы и основные потоки symbol =====
./src/core/Chart.ts:416: const symbols$ = combineLatest([this.eventManager.symbol(), this.compareManager.itemsObs()]).pipe(
./src/core/CompareManager.ts:19: symbol$: BehaviorSubject<string>;
./src/core/CompareManager.ts:113: const symbol$ = new BehaviorSubject(symbol);
./src/core/CompareManager.ts:145: mainSymbol$: symbol$,
./src/core/CompareManager.ts:180: symbol$,
./src/core/CompareManager.ts:306: entry.symbol$.complete();
./src/core/EventManager.ts:35: private symbol$: BehaviorSubject<string>;
./src/core/EventManager.ts:58: this.symbol$ = new BehaviorSubject<string>(initialSymbol);
./src/core/EventManager.ts:68: symbol: (value) => this.symbol$.next(value),
./src/core/EventManager.ts:123: this.setWithHistory('symbol', this.symbol$, symbol, options);
./src/core/EventManager.ts:126: public getSymbol(): Observable<string> {
./src/core/EventManager.ts:127: return this.symbol$.asObservable();
./src/core/EventManager.ts:142: this.setWithHistory('symbol', this.symbol$, symbol, options);
./src/core/EventManager.ts:186: return this.symbol$.asObservable();
./src/core/EventManager.ts:224: symbol: this.symbol$.value,
./src/core/EventManager.ts:236: this.setSymbol(symbol, setOptions);
./src/core/EventManager.ts:266: this.symbol$.complete();
./src/core/Indicator.ts:16: mainSymbol$: Observable<string>;
./src/core/Indicator.ts:33: private mainSymbol$: Observable<string>;
./src/core/Indicator.ts:52: mainSymbol$,
./src/core/Indicator.ts:62: this.mainSymbol$ = mainSymbol$;
./src/core/Indicator.ts:63: this.mainSymbolName$ = mainSymbolName$ ?? mainSymbol$;
./src/core/Indicator.ts:64: this.mainSymbolTicker$ = mainSymbolTicker$ ?? mainSymbol$;
./src/core/Indicator.ts:211: mainSymbol$: this.mainSymbol$,
./src/core/IndicatorManager.ts:89: mainSymbol$: this.eventManager.getSymbol(),
./src/core/MoexChart.tsx:278: public setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void {
./src/core/Pane.tsx:405: mainSymbol$: this.eventManager.getSymbol(),
./src/core/Series/BaseSeries.ts:71: mainSymbol$: Observable<string>;
./src/core/Series/BaseSeries.ts:107: protected mainSymbol$: Observable<string>;
./src/core/Series/BaseSeries.ts:121: mainSymbol$,
./src/core/Series/BaseSeries.ts:141: this.mainSymbol$ = mainSymbol$;
./src/core/Series/BaseSeries.ts:142: this.mainSymbolName$ = mainSymbolName$ ?? mainSymbol$;
./src/core/Series/BaseSeries.ts:143: this.mainSymbolTicker$ = mainSymbolTicker$ ?? mainSymbol$;
./src/core/Series/BaseSeries.ts:411: this.mainSymbol$.pipe(distinctUntilChanged()).subscribe((symbol) => {
./types/core/EventManager.d.ts:28: private symbol$;
./types/core/EventManager.d.ts:44: getSymbol(): Observable<string>;
./types/core/Indicator.d.ts:11: mainSymbol$: Observable<string>;
./types/core/Indicator.d.ts:27: private mainSymbol$;
./types/core/Indicator.d.ts:35: constructor({ id, type, lwcChart, dataSource, zIndex, onDelete, moveUp, moveDown, mainSymbol$, mainSymbolName$, mainSymbolTicker$, associatedPane, paneId, config, }: IndicatorParams);
./types/core/MoexChart.d.ts:91: setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void;
./types/core/Series/BaseSeries.d.ts:30: mainSymbol$: Observable<string>;
./types/core/Series/BaseSeries.d.ts:45: protected mainSymbol$: Observable<string>;
./types/core/Series/BaseSeries.d.ts:55: constructor({ lwcChart, mainSymbol$, mainSymbolName$, mainSymbolTicker$, mainSerie$, customFormatter, seriesOptions, priceScaleOptions, showSymbolLabel, paneIndex, indicatorReference, }: BaseSeriesParams<TSeries>);
===== 2. Объявление DataSource =====
./src/core/DataSource.ts:10:export interface DataSourceParams {
./src/core/DataSource.ts:24:export class DataSource {
./stories/common.ts:14:class DataSourceProvider {
./types/core/DataSource.d.ts:5:export interface DataSourceParams {
./types/core/DataSource.d.ts:13:export declare class DataSource {
===== 3. Все использования DataSource =====
src/core/Chart.ts:21:import { DataSource } from '@core/DataSource';
src/core/Chart.ts:67: dataSource: DataSource;
src/core/Chart.ts:104: private dataSource: DataSource;
src/core/Chart.ts:121: const { eventManager, dataSource, modalRenderer, ohlcConfig, tooltipConfig, panes: panesSnapshot } = params;
src/core/Chart.ts:124: this.dataSource = dataSource;
src/core/Chart.ts:169: dataSource,
src/core/Chart.ts:187: dataSource: this.dataSource,
src/core/Chart.ts:197: dataSource: this.dataSource,
src/core/Chart.ts:210: this.setupDataSourceSubs();
src/core/Chart.ts:348: this.dataSource.updateRealtime(symbol, candle);
src/core/Chart.ts:377: Promise.all(symbols.map((symbol) => this.dataSource.loadMoreHistory(symbol))).finally(() => {
src/core/Chart.ts:389: private setupDataSourceSubs() {
src/core/Chart.ts:411: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from))).catch((error) => {
src/core/Chart.ts:430: Promise.all(symbols.map((symbol) => this.dataSource.loadAllHistory(symbol)))
src/core/Chart.ts:441: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from)))
src/core/Chart.ts:460: this.dataSource.setSymbols(symbols);
src/core/CompareManager.ts:6:import { DataSource } from '@core/DataSource';
src/core/CompareManager.ts:27: dataSource: DataSource;
src/core/CompareManager.ts:36: private readonly dataSource: DataSource;
src/core/CompareManager.ts:50: dataSource,
src/core/CompareManager.ts:57: this.dataSource = dataSource;
src/core/CompareManager.ts:147: dataSource: this.dataSource,
src/core/CompareManager.ts:187: await this.dataSource.isReady(symbol);
src/core/DataSource.ts:10:export interface DataSourceParams {
src/core/DataSource.ts:24:export class DataSource {
src/core/DataSource.ts:25: private readonly getData: DataSourceParams['getData'];
src/core/DataSource.ts:34: constructor({ getData, eventManager }: DataSourceParams) {
src/core/DataSource.ts:188: ).catch((error) => console.error('[DataSource] Global timeframe reload error:', error));
src/core/Indicator.ts:4:import { DataSource } from '@core/DataSource';
src/core/Indicator.ts:20: dataSource: DataSource;
src/core/Indicator.ts:32: private dataSource: DataSource;
src/core/Indicator.ts:47: dataSource,
src/core/Indicator.ts:61: this.dataSource = dataSource;
src/core/Indicator.ts:175: dataSource: this.dataSource,
src/core/Indicator.ts:200: dataSource: this.dataSource,
src/core/IndicatorManager.ts:4:import { DataSource } from '@core/DataSource';
src/core/IndicatorManager.ts:17: dataSource: DataSource;
src/core/IndicatorManager.ts:33: private dataSource: DataSource;
src/core/IndicatorManager.ts:36: constructor({ eventManager, dataSource, lwcChart, DOM, chartOptions, initialIndicators, paneManager }: SeriesParams) {
src/core/IndicatorManager.ts:41: this.dataSource = dataSource;
src/core/IndicatorManager.ts:91: dataSource: this.dataSource,
src/core/MoexChart.tsx:7:import { DataSource, DataSourceParams } from '@core/DataSource';
src/core/MoexChart.tsx:78: getDataSource: DataSourceParams['getData'];
src/core/MoexChart.tsx:115: private dataSource!: DataSource;
src/core/MoexChart.tsx:152: this.dataSource = new DataSource({
src/core/MoexChart.tsx:153: getData: config.chartCollectionPreset.getDataSource,
src/core/MoexChart.tsx:183: dataSource: this.dataSource,
src/core/MoexChart.tsx:395: this.dataSource.destroy();
src/core/Pane.tsx:9:import { DataSource } from '@core/DataSource';
src/core/Pane.tsx:43: dataSource: DataSource | null; // todo: deal with dataSource. На каких то пейнах он нужен, на каких то нет
src/core/Pane.tsx:59:// todo: в CompareManage, при создании нового пейна для сравнения - инициализируем новый dataSource, принадлежащий только конкретному пейну. Убираем возможность добавлять индикаторы на такие пейны
src/core/Pane.tsx:60:// todo: на каждый символ свой DataSource (учитывать что есть MainPane и "главный" DataSource, который инициализиурется во время старта moexChart)
src/core/Pane.tsx:92: dataSource,
src/core/Pane.tsx:155: if (dataSource) {
src/core/Pane.tsx:156: this.initializeMainSerie({ lwcChart, dataSource });
src/core/Pane.tsx:398: private initializeMainSerie({ lwcChart, dataSource }: { lwcChart: IChartApi; dataSource: DataSource }): void {
src/core/Pane.tsx:404: dataSource,
src/core/PaneManager.ts:1:import { DataSource } from '@core/DataSource';
src/core/PaneManager.ts:36:// todo: в CompareManage, при создании нового пейна для сравнения - инициализируем новый dataSource, принадлежащий только конкретному пейну. Убираем возможность добавлять индикаторы на такие пейны
src/core/PaneManager.ts:37:// todo: на каждый символ свой DataSource (учитывать что есть MainPane и "главный" DataSource, который инициализиурется во время старта moexChart)
src/core/PaneManager.ts:145: public addPane(dataSource?: DataSource, paneId?: number, initialPriceScales?: PriceScaleSnapshot[]): Pane {
src/core/PaneManager.ts:154: dataSource: dataSource ?? null,
src/core/PaneManager.ts:155: basedOn: dataSource ? undefined : this.mainPane,
src/core/Series/BarSeriesStrategy.ts:26: this.subscribeDataSource(params.dataSource);
src/core/Series/BarSeriesStrategy.ts:61: protected dataSourceSubscription = (dataToSet: Candle[]): void => {
src/core/Series/BarSeriesStrategy.ts:70: protected dataSourceRealtimeSubscription = (dataToSet: Candle): void => {
src/core/Series/BaseSeries.ts:7:import type { DataSource } from '@core/DataSource';
src/core/Series/BaseSeries.ts:70: dataSource: DataSource;
src/core/Series/BaseSeries.ts:331: protected abstract dataSourceSubscription(next: Candle[]): void;
src/core/Series/BaseSeries.ts:335: protected abstract dataSourceRealtimeSubscription(next: Candle): void;
src/core/Series/BaseSeries.ts:391: protected subscribeDataSource = (dataSource: DataSource): void => {
src/core/Series/BaseSeries.ts:415: this.dataSub = dataSource.subscribe(symbol, (next) => {
src/core/Series/BaseSeries.ts:416: this.dataSourceSubscription(next);
src/core/Series/BaseSeries.ts:419: this.realtimeSub = dataSource.subscribeRealtime(symbol, (next: Candle) => {
src/core/Series/BaseSeries.ts:420: this.dataSourceRealtimeSubscription(next);
src/core/Series/CandlestickSeriesStrategy.ts:28: this.subscribeDataSource(params.dataSource);
src/core/Series/CandlestickSeriesStrategy.ts:75: protected dataSourceSubscription = (dataToSet: Candle[]): void => {
src/core/Series/CandlestickSeriesStrategy.ts:84: protected dataSourceRealtimeSubscription = (dataToSet: Candle): void => {
src/core/Series/HistogramSeriesStrategy.ts:26: this.subscribeDataSource(params.dataSource);
src/core/Series/HistogramSeriesStrategy.ts:51: protected dataSourceSubscription = (dataToSet: Candle[]): void => {
src/core/Series/HistogramSeriesStrategy.ts:60: protected dataSourceRealtimeSubscription = (dataToSet: Candle): void => {
src/core/Series/LineSeriesStrategy.ts:29: this.subscribeDataSource(params.dataSource);
src/core/Series/LineSeriesStrategy.ts:60: protected dataSourceSubscription = (dataToSet: Candle[]): void => {
src/core/Series/LineSeriesStrategy.ts:69: protected dataSourceRealtimeSubscription = (dataToSet: Candle): void => {
src/core/SymbolSource.ts:197: console.error('[DataSource] Ошибка при догрузке истории:', error);
src/core/SymbolSource.ts:278: console.error('[DataSource] Ошибка при полной загрузке истории:', error);
src/core/SymbolSource.ts:342: console.error('[DataSource] Ошибка при загрузке данных:', error);
src/types/snapshot.ts:1:import { DataSource } from '@core/DataSource';
src/types/snapshot.ts:53: dataSource?: DataSource;
===== 4. Прямые вызовы методов dataSource =====
src/core/Chart.ts:348: this.dataSource.updateRealtime(symbol, candle);
src/core/Chart.ts:377: Promise.all(symbols.map((symbol) => this.dataSource.loadMoreHistory(symbol))).finally(() => {
src/core/Chart.ts:411: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from))).catch((error) => {
src/core/Chart.ts:430: Promise.all(symbols.map((symbol) => this.dataSource.loadAllHistory(symbol)))
src/core/Chart.ts:441: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from)))
src/core/Chart.ts:460: this.dataSource.setSymbols(symbols);
src/core/CompareManager.ts:187: await this.dataSource.isReady(symbol);
src/core/MoexChart.tsx:395: this.dataSource.destroy();
src/core/Series/BaseSeries.ts:415: this.dataSub = dataSource.subscribe(symbol, (next) => {
src/core/Series/BaseSeries.ts:419: this.realtimeSub = dataSource.subscribeRealtime(symbol, (next: Candle) => {
===== 5. Где symbol участвует в загрузке или подписке =====
src/core/Chart.ts:348: this.dataSource.updateRealtime(symbol, candle);
src/core/Chart.ts:364: symbolName: this.eventManager.getSymbolName(),
src/core/Chart.ts:365: symbolTicker: this.eventManager.getSymbolTicker(),
src/core/Chart.ts:377: Promise.all(symbols.map((symbol) => this.dataSource.loadMoreHistory(symbol))).finally(() => {
src/core/Chart.ts:411: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from))).catch((error) => {
src/core/Chart.ts:424: .subscribe(([interval, symbols]) => {
src/core/Chart.ts:430: Promise.all(symbols.map((symbol) => this.dataSource.loadAllHistory(symbol)))
src/core/Chart.ts:441: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from)))
src/core/Chart.ts:455: symbols$.subscribe((symbols) => {
src/core/Chart.ts:460: this.dataSource.setSymbols(symbols);
src/core/CompareManager.ts:133: const config = getDefaultCompareIndicatorConfig(seriesType, symbol, symbolName, symbolTicker, usedColors);
src/core/CompareManager.ts:187: await this.dataSource.isReady(symbol);
src/core/DataSource.ts:11: getData: (timeframe: Timeframes, symbol: string, until?: Candle) => Promise<Candle[] | null>;
src/core/DataSource.ts:70: this.realtimeSub = stream$.subscribe(({ symbol, candle }) => {
src/core/DataSource.ts:85: public subscribe(symbolRaw: string, cb: (next: Candle[]) => void): Subscription {
src/core/DataSource.ts:88: return this.ensureState(symbol).data$().subscribe(cb);
src/core/DataSource.ts:91: public subscribeRealtime(symbolRaw: string, cb: (next: Candle) => void): Subscription {
src/core/DataSource.ts:94: return this.ensureState(symbol).realtime$().subscribe(cb);
src/core/DataSource.ts:97: public data$(symbolRaw: string): Observable<Candle[]> {
src/core/DataSource.ts:99: return symbol ? this.ensureState(symbol).data$() : EMPTY_CANDLES$.asObservable();
src/core/DataSource.ts:102: public realtime$(symbolRaw: string): Observable<Candle> {
src/core/DataSource.ts:104: return symbol ? this.ensureState(symbol).realtime$() : EMPTY_REALTIME$.asObservable();
src/core/DataSource.ts:112: public getLastCandle(symbolRaw: string): Candle | null {
src/core/DataSource.ts:114: return symbol ? (this.states.get(symbol)?.getLastValue() ?? null) : null;
src/core/DataSource.ts:131: public async loadTill(symbolRaw: string, time: number): Promise<void> {
src/core/DataSource.ts:134: await this.ensureState(symbol).loadTill(time);
src/core/DataSource.ts:138: public loadMoreHistory = async (symbolRaw: string): Promise<void> => {
src/core/DataSource.ts:141: await this.ensureState(symbol).loadMoreHistory();
src/core/DataSource.ts:145: public loadAllHistory = async (symbolRaw: string): Promise<void> => {
src/core/DataSource.ts:153: public getIsLoading(symbolRaw: string): boolean {
src/core/DataSource.ts:155: return symbol ? (this.states.get(symbol)?.isLoadingValue() ?? false) : false;
src/core/DataSource.ts:158: public getOldestTime(symbolRaw: string): number | null {
src/core/DataSource.ts:160: return symbol ? (this.states.get(symbol)?.getOldestTime() ?? null) : null;
src/core/DataSource.ts:194: let st = this.states.get(symbol);
src/core/DataSource.ts:208: const st = this.states.get(symbol);
src/core/Legend.ts:113: this.eventManager.symbolName().subscribe((symbolName) => {
src/core/PriceAxisLabels/PriceAxisLabels.ts:155: mainSymbolTicker$.subscribe((symbolTicker) => {
src/core/Series/BaseSeries.ts:403: this.mainSymbolTicker$.pipe(distinctUntilChanged()).subscribe((symbolTicker) => {
src/core/Series/BaseSeries.ts:411: this.mainSymbol$.pipe(distinctUntilChanged()).subscribe((symbol) => {
src/core/Series/BaseSeries.ts:415: this.dataSub = dataSource.subscribe(symbol, (next) => {
src/core/Series/BaseSeries.ts:419: this.realtimeSub = dataSource.subscribeRealtime(symbol, (next: Candle) => {
src/core/SymbolSource.ts:12: getData: (timeframe: Timeframes, symbol: string, until?: Candle) => Promise<Candle[] | null>;
src/core/SymbolSource.ts:39: constructor({ symbol, getData, getTimeframe }: SymbolSourceParams) {
src/core/SymbolSource.ts:172: const olderData = await this.getData(tf, this.symbol, this.oldestCandle);
src/core/SymbolSource.ts:249: const olderData = await this.getData(tf, this.symbol, oldest);
src/core/SymbolSource.ts:328: const loaded = (await this.getData(tf, this.symbol)) ?? [];
===== 6. Метод subscribeDataSource и связанные подписки =====
src/core/DataSource.ts:31: private realtimeSub: Subscription | null = null;
src/core/DataSource.ts:70: this.realtimeSub = stream$.subscribe(({ symbol, candle }) => {
src/core/DataSource.ts:79: if (this.realtimeSub) {
src/core/DataSource.ts:80: this.realtimeSub.unsubscribe();
src/core/DataSource.ts:81: this.realtimeSub = null;
src/core/Series/BarSeriesStrategy.ts:26: this.subscribeDataSource(params.dataSource);
src/core/Series/BaseSeries.ts:116: private dataSub: Subscription | null = null;
src/core/Series/BaseSeries.ts:117: private realtimeSub: Subscription | null = null;
src/core/Series/BaseSeries.ts:195: this.dataSub?.unsubscribe();
src/core/Series/BaseSeries.ts:196: this.realtimeSub?.unsubscribe();
src/core/Series/BaseSeries.ts:391: protected subscribeDataSource = (dataSource: DataSource): void => {
src/core/Series/BaseSeries.ts:412: this.dataSub?.unsubscribe();
src/core/Series/BaseSeries.ts:413: this.realtimeSub?.unsubscribe();
src/core/Series/BaseSeries.ts:415: this.dataSub = dataSource.subscribe(symbol, (next) => {
src/core/Series/BaseSeries.ts:419: this.realtimeSub = dataSource.subscribeRealtime(symbol, (next: Candle) => {
src/core/Series/CandlestickSeriesStrategy.ts:28: this.subscribeDataSource(params.dataSource);
src/core/Series/HistogramSeriesStrategy.ts:26: this.subscribeDataSource(params.dataSource);
src/core/Series/LineSeriesStrategy.ts:29: this.subscribeDataSource(params.dataSource);
src/core/SymbolSource.ts:23: private readonly realtimeSubject = new Subject<Candle>();
src/core/SymbolSource.ts:54: return this.realtimeSubject.asObservable();
src/core/SymbolSource.ts:87: this.realtimeSubject.complete();
src/core/SymbolSource.ts:113: this.realtimeSubject.next(res.newestCandle);
src/core/SymbolSource.ts:372: this.realtimeSubject.next(c);
===== 7. Все параметры и поля с названием symbol =====
src/components/CompareLegendRow/index.tsx:12: onRemove?: (symbol: string, mode: CompareMode) => void;
src/components/CompareLegendRow/index.tsx:16: const { symbol, mode, value, color } = item;
src/components/CompareLegendRow/index.tsx:18: const handleDelete = () => onRemove?.(symbol, mode);
src/components/CompareLegendRow/index.tsx:22: <div className={styles.symbol}>{symbol}</div>
src/components/Legend/index.tsx:35: <div className={styles.symbol}>{item.name}</div>
src/core/Chart.ts:116: private activeSymbols: string[] = [];
src/core/Chart.ts:346: getSymbols: () => this.activeSymbols,
src/core/Chart.ts:347: update: (symbol: string, candle: Candle) => {
src/core/Chart.ts:348: this.dataSource.updateRealtime(symbol, candle);
src/core/Chart.ts:363: symbol: this.activeSymbols[0],
src/core/Chart.ts:375: const symbols = this.activeSymbols.slice();
src/core/Chart.ts:377: Promise.all(symbols.map((symbol) => this.dataSource.loadMoreHistory(symbol))).finally(() => {
src/core/Chart.ts:411: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from))).catch((error) => {
src/core/Chart.ts:416: const symbols$ = combineLatest([this.eventManager.symbol(), this.compareManager.itemsObs()]).pipe(
src/core/Chart.ts:417: map(([main, items]) => Array.from(new Set([main, ...items.map((item) => item.symbol)]))),
src/core/Chart.ts:430: Promise.all(symbols.map((symbol) => this.dataSource.loadAllHistory(symbol)))
src/core/Chart.ts:441: Promise.all(symbols.map((symbol) => this.dataSource.loadTill(symbol, from)))
src/core/Chart.ts:456: const previousSymbols = this.activeSymbols;
src/core/Chart.ts:458: this.activeSymbols = symbols;
src/core/Chart.ts:466: const symbol = symbols[index];
src/core/Chart.ts:468: if (!symbol) continue;
src/core/Chart.ts:469: if (previousSymbolsSet.has(symbol)) {
src/core/Chart.ts:473: addedSymbols.push(symbol);
src/core/ChartSettings.ts:8: symbol: string;
src/core/ChartSettings.ts:58: symbol: asString(settingsObject.symbol),
src/core/CompareManager.ts:13:import { CompareInstrument, CompareItem, CompareMode, Direction, IndicatorConfig } from '@src/types';
src/core/CompareManager.ts:17:interface CompareEntry extends CompareItem {
src/core/CompareManager.ts:19: symbol$: BehaviorSubject<string>;
src/core/CompareManager.ts:40: private readonly itemsSubject = new BehaviorSubject<CompareItem[]>([]);
src/core/CompareManager.ts:70: public itemsObs(): Observable<CompareItem[]> {
src/core/CompareManager.ts:90: instrument: CompareInstrument,
src/core/CompareManager.ts:94: const symbol = normalizeSymbol(instrument.symbol);
src/core/CompareManager.ts:96: if (!symbol) {
src/core/CompareManager.ts:100: const symbolName = instrument.symbolName.trim() || symbol;
src/core/CompareManager.ts:101: const symbolTicker = instrument.symbolTicker.trim() || symbol;
src/core/CompareManager.ts:107: const key = makeKey(symbol, mode);
src/core/CompareManager.ts:113: const symbol$ = new BehaviorSubject(symbol);
src/core/CompareManager.ts:133: const config = getDefaultCompareIndicatorConfig(seriesType, symbol, symbolName, symbolTicker, usedColors);
src/core/CompareManager.ts:145: mainSymbol$: symbol$,
src/core/CompareManager.ts:176: symbol,
src/core/CompareManager.ts:180: symbol$,
src/core/CompareManager.ts:187: await this.dataSource.isReady(symbol);
src/core/CompareManager.ts:191: const symbol = normalizeSymbol(symbolRaw);
src/core/CompareManager.ts:193: if (!symbol) {
src/core/CompareManager.ts:197: if (this.removeEntry(makeKey(symbol, mode))) {
src/core/CompareManager.ts:203: const symbol = normalizeSymbol(symbolRaw);
src/core/CompareManager.ts:205: if (!symbol) {
src/core/CompareManager.ts:215: if (entry.symbol !== symbol) {
src/core/CompareManager.ts:239: return Array.from(this.entries.values()).map(({ symbol, symbolName, symbolTicker, entity, mode }) => ({
src/core/CompareManager.ts:240: symbol,
src/core/CompareManager.ts:269: const symbol = indicator.config.symbol ?? indicator.config.label;
src/core/CompareManager.ts:270: const symbolTicker = indicator.config.symbolTicker ?? symbol;
src/core/CompareManager.ts:283: symbol,
src/core/CompareManager.ts:306: entry.symbol$.complete();
src/core/CompareManager.ts:319: const items: CompareItem[] = [];
src/core/CompareManager.ts:324: symbol: values[index].symbol,
src/core/CompareManager.ts:402:function makeKey(symbol: string, mode: CompareMode): string {
src/core/CompareManager.ts:403: return `${symbol}|${mode}`;
src/core/CompareManager.ts:420: symbol: string,
src/core/CompareManager.ts:428: symbol,
src/core/DataSource.ts:11: getData: (timeframe: Timeframes, symbol: string, until?: Candle) => Promise<Candle[] | null>;
src/core/DataSource.ts:16: symbol: string;
src/core/DataSource.ts:29: private readonly activeSymbols$ = new BehaviorSubject<Set<string>>(new Set());
src/core/DataSource.ts:60: this.activeSymbols$.next(nextSet);
src/core/DataSource.ts:64: return this.activeSymbols$.pipe(map((set) => Array.from(set)));
src/core/DataSource.ts:70: this.realtimeSub = stream$.subscribe(({ symbol, candle }) => {
src/core/DataSource.ts:71: const s = normalizeSymbol(symbol);
src/core/DataSource.ts:72: if (s && this.activeSymbols$.value.has(s)) {
src/core/DataSource.ts:86: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:87: if (!symbol) return new Subscription();
src/core/DataSource.ts:88: return this.ensureState(symbol).data$().subscribe(cb);
src/core/DataSource.ts:92: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:93: if (!symbol) return new Subscription();
src/core/DataSource.ts:94: return this.ensureState(symbol).realtime$().subscribe(cb);
src/core/DataSource.ts:98: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:99: return symbol ? this.ensureState(symbol).data$() : EMPTY_CANDLES$.asObservable();
src/core/DataSource.ts:103: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:104: return symbol ? this.ensureState(symbol).realtime$() : EMPTY_REALTIME$.asObservable();
src/core/DataSource.ts:108: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:109: return symbol ? this.ensureState(symbol).lastCandle$() : EMPTY_LAST_CANDLE$.asObservable();
src/core/DataSource.ts:113: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:114: return symbol ? (this.states.get(symbol)?.getLastValue() ?? null) : null;
src/core/DataSource.ts:118: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:119: if (!symbol) return;
src/core/DataSource.ts:120: const st = this.ensureState(symbol);
src/core/DataSource.ts:125: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:126: if (symbol && this.activeSymbols$.value.has(symbol)) {
src/core/DataSource.ts:127: this.ensureState(symbol).pushRealtime(next);
src/core/DataSource.ts:132: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:133: if (symbol && this.activeSymbols$.value.has(symbol)) {
src/core/DataSource.ts:134: await this.ensureState(symbol).loadTill(time);
src/core/DataSource.ts:139: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:140: if (symbol && this.activeSymbols$.value.has(symbol)) {
src/core/DataSource.ts:141: await this.ensureState(symbol).loadMoreHistory();
src/core/DataSource.ts:146: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:147: if (!symbol || !this.activeSymbols$.value.has(symbol)) return;
src/core/DataSource.ts:149: const st = this.ensureState(symbol);
src/core/DataSource.ts:154: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:155: return symbol ? (this.states.get(symbol)?.isLoadingValue() ?? false) : false;
src/core/DataSource.ts:159: const symbol = normalizeSymbol(symbolRaw);
src/core/DataSource.ts:160: return symbol ? (this.states.get(symbol)?.getOldestTime() ?? null) : null;
src/core/DataSource.ts:169: this.activeSymbols$.complete();
src/core/DataSource.ts:181: const symbols = Array.from(this.activeSymbols$.value);
src/core/DataSource.ts:193: private ensureState(symbol: string): SymbolSource {
src/core/DataSource.ts:194: let st = this.states.get(symbol);
src/core/DataSource.ts:197: symbol,
src/core/DataSource.ts:201: this.states.set(symbol, st);
src/core/DataSource.ts:207: private dropState(symbol: string): void {
src/core/DataSource.ts:208: const st = this.states.get(symbol);
src/core/DataSource.ts:211: this.states.delete(symbol);
src/core/DOMModel.tsx:16: // ∈ symbol&pane
src/core/EventManager.ts:15: initialSymbol: string;
src/core/EventManager.ts:16: initialSymbolName?: string;
src/core/EventManager.ts:17: initialSymbolTicker?: string;
src/core/EventManager.ts:35: private symbol$: BehaviorSubject<string>;
src/core/EventManager.ts:49: initialSymbol,
src/core/EventManager.ts:50: initialSymbolName,
src/core/EventManager.ts:51: initialSymbolTicker,
src/core/EventManager.ts:58: this.symbol$ = new BehaviorSubject<string>(initialSymbol);
src/core/EventManager.ts:59: this.symbolName$ = new BehaviorSubject<string>(initialSymbolName?.trim() || initialSymbol);
src/core/EventManager.ts:60: this.symbolTicker$ = new BehaviorSubject<string>(initialSymbolTicker?.trim() || initialSymbol);
src/core/EventManager.ts:68: symbol: (value) => this.symbol$.next(value),
src/core/EventManager.ts:122: public setSymbol = (symbol: string, options?: SetWithHistoryOptions): void => {
src/core/EventManager.ts:123: this.setWithHistory('symbol', this.symbol$, symbol, options);
src/core/EventManager.ts:127: return this.symbol$.asObservable();
src/core/EventManager.ts:131: symbol: string,
src/core/EventManager.ts:136: const nextSymbolName = symbolName.trim() || symbol;
src/core/EventManager.ts:137: const nextSymbolTicker = symbolTicker?.trim() || symbol;
src/core/EventManager.ts:142: this.setWithHistory('symbol', this.symbol$, symbol, options);
src/core/EventManager.ts:185: public symbol(): Observable<string> {
src/core/EventManager.ts:186: return this.symbol$.asObservable();
src/core/EventManager.ts:224: symbol: this.symbol$.value,
src/core/EventManager.ts:232: const { symbol, seriesSelected, timeframe, timeFormat, dateFormat, interval } = parseChartSettings(settings);
src/core/EventManager.ts:235: if (symbol) {
src/core/EventManager.ts:236: this.setSymbol(symbol, setOptions);
src/core/EventManager.ts:266: this.symbol$.complete();
src/core/Legend.ts:36: symbol: string;
src/core/MoexChart.tsx:58: * symbol: { visible: true, label: 'Инструмент' },
src/core/MoexChart.tsx:82: update: (symbol: string, candle: Candle) => void,
src/core/MoexChart.tsx:133: const { chartSeriesType, symbol, symbolName, symbolTicker, timeframe, interval, dateFormat, timeFormat } =
src/core/MoexChart.tsx:139: initialSymbol: symbol,
src/core/MoexChart.tsx:140: initialSymbolName: symbolName,
src/core/MoexChart.tsx:141: initialSymbolTicker: symbolTicker,
src/core/MoexChart.tsx:278: public setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void {
src/core/MoexChart.tsx:279: if (!symbol) return;
src/core/MoexChart.tsx:281: this.eventManager.setInstrument(symbol, symbolName ?? symbol, symbolTicker ?? symbol);
src/core/Series/BaseSeries.ts:411: this.mainSymbol$.pipe(distinctUntilChanged()).subscribe((symbol) => {
src/core/Series/BaseSeries.ts:415: this.dataSub = dataSource.subscribe(symbol, (next) => {
src/core/Series/BaseSeries.ts:419: this.realtimeSub = dataSource.subscribeRealtime(symbol, (next: Candle) => {
src/core/SymbolSource.ts:11: symbol: string;
src/core/SymbolSource.ts:12: getData: (timeframe: Timeframes, symbol: string, until?: Candle) => Promise<Candle[] | null>;
src/core/SymbolSource.ts:17: public readonly symbol: string;
src/core/SymbolSource.ts:39: constructor({ symbol, getData, getTimeframe }: SymbolSourceParams) {
src/core/SymbolSource.ts:40: this.symbol = symbol;
src/core/SymbolSource.ts:172: const olderData = await this.getData(tf, this.symbol, this.oldestCandle);
src/core/SymbolSource.ts:249: const olderData = await this.getData(tf, this.symbol, oldest);
src/core/SymbolSource.ts:328: const loaded = (await this.getData(tf, this.symbol)) ?? [];
src/core/UndoRedo.ts:9: symbol: (value: string) => void;
src/types/compare.ts:7:export interface CompareInstrument {
src/types/compare.ts:8: symbol: string;
src/types/compare.ts:12:export interface CompareItem extends CompareInstrument {
src/types/indicator.ts:51: symbol?: string;
src/types/snapshot.ts:19: symbol: string; // todo: move to snap
src/types/snapshot.ts:30: symbol: string;
stories/argTypes.ts:50:// initialSymbol: {
stories/argTypes.ts:78:// symbol: { required: false, name: 'string' },
stories/argTypes.ts:123:// 'symbol.visible': { required: false, name: 'boolean' },
stories/argTypes.ts:124:// 'symbol.label': { required: false, name: 'string' },
stories/argTypes.ts:147:// ' symbol: { visible: false, label: \'Инстр.\' },\n' +
stories/common.ts:15: // todo: add cache по `${symbol}${timeframe}`
stories/common.ts:37: update: (symbol: string, candle: Candle) => void,
stories/common.ts:47: const symbol = normalizeSymbol(symbols[i]);
stories/common.ts:48: if (!symbol) continue;
stories/common.ts:50: update(symbol, this.nextRealtimeCandle(tf, symbol, periodMs));
stories/common.ts:60: private nextRealtimeCandle(timeframe: Timeframes, symbol: string, realtimePeriodMs: number): Candle {
stories/common.ts:63: const prev = this.realtimeLastBySymbol.get(symbol);
stories/common.ts:101: this.realtimeLastBySymbol.set(symbol, next);
stories/common.ts:109: * @param symbol - symbol.
stories/MB/MB.stories.tsx:8:import { CompareInstrument, CompareMode } from '@lib/types';
stories/MB/MB.stories.tsx:108: symbol: 'APPL',
stories/MB/MB.stories.tsx:186:const COMPARE_ITEMS: CompareInstrument[] = [
stories/MB/MB.stories.tsx:187: { symbol: 'SBER', symbolName: 'SBER', symbolTicker: 'SBER' },
stories/MB/MB.stories.tsx:188: { symbol: 'APAX', symbolName: 'APAX', symbolTicker: 'APAX' },
stories/MB/MB.stories.tsx:189: { symbol: 'SOL', symbolName: 'SOL', symbolTicker: 'SOL' },
stories/MB/MB.stories.tsx:245: key={instrument.symbol}
stories/MXT/MXT.stories.tsx:88: symbol: 'APPL',
stories/TradeRadar/TradeRadar.stories.tsx:8:import { CompareInstrument, CompareMode } from '@lib/types';
stories/TradeRadar/TradeRadar.stories.tsx:134: symbol: 'appl',
stories/TradeRadar/TradeRadar.stories.tsx:222:const COMPARE_ITEMS: CompareInstrument[] = [
stories/TradeRadar/TradeRadar.stories.tsx:223: { symbol: 'SBER', symbolName: 'SBER', symbolTicker: 'SBER' },
stories/TradeRadar/TradeRadar.stories.tsx:224: { symbol: 'APAX', symbolName: 'APAX', symbolTicker: 'APAX' },
stories/TradeRadar/TradeRadar.stories.tsx:225: { symbol: 'SOL', symbolName: 'SOL', symbolTicker: 'SOL' },
stories/TradeRadar/TradeRadar.stories.tsx:273: key={instrument.symbol}
===== 8. Текущие новые названия =====
src/core/Chart.ts:364: symbolName: this.eventManager.getSymbolName(),
src/core/Chart.ts:365: symbolTicker: this.eventManager.getSymbolTicker(),
src/core/CompareManager.ts:20: symbolTicker$: BehaviorSubject<string>;
src/core/CompareManager.ts:100: const symbolName = instrument.symbolName.trim() || symbol;
src/core/CompareManager.ts:101: const symbolTicker = instrument.symbolTicker.trim() || symbol;
src/core/CompareManager.ts:114: const symbolTicker$ = new BehaviorSubject(symbolTicker);
src/core/CompareManager.ts:133: const config = getDefaultCompareIndicatorConfig(seriesType, symbol, symbolName, symbolTicker, usedColors);
src/core/CompareManager.ts:146: mainSymbolTicker$: symbolTicker$,
src/core/CompareManager.ts:177: symbolName,
src/core/CompareManager.ts:178: symbolTicker,
src/core/CompareManager.ts:181: symbolTicker$,
src/core/CompareManager.ts:239: return Array.from(this.entries.values()).map(({ symbol, symbolName, symbolTicker, entity, mode }) => ({
src/core/CompareManager.ts:241: symbolName,
src/core/CompareManager.ts:242: symbolTicker,
src/core/CompareManager.ts:270: const symbolTicker = indicator.config.symbolTicker ?? symbol;
src/core/CompareManager.ts:284: symbolName: indicator.config.label,
src/core/CompareManager.ts:285: symbolTicker,
src/core/CompareManager.ts:307: entry.symbolTicker$.complete();
src/core/CompareManager.ts:325: symbolName: values[index].symbolName,
src/core/CompareManager.ts:326: symbolTicker: values[index].symbolTicker,
src/core/CompareManager.ts:421: symbolName: string,
src/core/CompareManager.ts:422: symbolTicker: string,
src/core/CompareManager.ts:429: symbolTicker,
src/core/CompareManager.ts:431: label: symbolName,
src/core/EventManager.ts:16: initialSymbolName?: string;
src/core/EventManager.ts:17: initialSymbolTicker?: string;
src/core/EventManager.ts:36: private symbolName$: BehaviorSubject<string>;
src/core/EventManager.ts:37: private symbolTicker$: BehaviorSubject<string>;
src/core/EventManager.ts:50: initialSymbolName,
src/core/EventManager.ts:51: initialSymbolTicker,
src/core/EventManager.ts:59: this.symbolName$ = new BehaviorSubject<string>(initialSymbolName?.trim() || initialSymbol);
src/core/EventManager.ts:60: this.symbolTicker$ = new BehaviorSubject<string>(initialSymbolTicker?.trim() || initialSymbol);
src/core/EventManager.ts:69: symbolName: (value) => this.symbolName$.next(value),
src/core/EventManager.ts:70: symbolTicker: (value) => this.symbolTicker$.next(value),
src/core/EventManager.ts:132: symbolName: string,
src/core/EventManager.ts:133: symbolTicker?: string,
src/core/EventManager.ts:136: const nextSymbolName = symbolName.trim() || symbol;
src/core/EventManager.ts:137: const nextSymbolTicker = symbolTicker?.trim() || symbol;
src/core/EventManager.ts:140: this.setWithHistory('symbolName', this.symbolName$, nextSymbolName, options);
src/core/EventManager.ts:141: this.setWithHistory('symbolTicker', this.symbolTicker$, nextSymbolTicker, options);
src/core/EventManager.ts:146: public symbolName(): Observable<string> {
src/core/EventManager.ts:147: return this.symbolName$.asObservable();
src/core/EventManager.ts:151: return this.symbolName$.value;
src/core/EventManager.ts:154: public symbolTicker(): Observable<string> {
src/core/EventManager.ts:155: return this.symbolTicker$.asObservable();
src/core/EventManager.ts:159: return this.symbolTicker$.value;
src/core/EventManager.ts:267: this.symbolName$.complete();
src/core/EventManager.ts:268: this.symbolTicker$.complete();
src/core/Indicator.ts:17: mainSymbolName$?: Observable<string>;
src/core/Indicator.ts:18: mainSymbolTicker$?: Observable<string>;
src/core/Indicator.ts:34: private mainSymbolName$: Observable<string>;
src/core/Indicator.ts:35: private mainSymbolTicker$: Observable<string>;
src/core/Indicator.ts:53: mainSymbolName$,
src/core/Indicator.ts:54: mainSymbolTicker$,
src/core/Indicator.ts:63: this.mainSymbolName$ = mainSymbolName$ ?? mainSymbol$;
src/core/Indicator.ts:64: this.mainSymbolTicker$ = mainSymbolTicker$ ?? mainSymbol$;
src/core/Indicator.ts:212: mainSymbolName$: this.mainSymbolName$,
src/core/Indicator.ts:213: mainSymbolTicker$: this.mainSymbolTicker$,
src/core/Legend.ts:83: private mainSymbolName = '';
src/core/Legend.ts:113: this.eventManager.symbolName().subscribe((symbolName) => {
src/core/Legend.ts:114: this.mainSymbolName = symbolName;
src/core/Legend.ts:190: name: this.mainSymbolName,
src/core/Legend.ts:267: name: this.mainSymbolName,
src/core/MoexChart.tsx:133: const { chartSeriesType, symbol, symbolName, symbolTicker, timeframe, interval, dateFormat, timeFormat } =
src/core/MoexChart.tsx:140: initialSymbolName: symbolName,
src/core/MoexChart.tsx:141: initialSymbolTicker: symbolTicker,
src/core/MoexChart.tsx:278: public setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void {
src/core/MoexChart.tsx:281: this.eventManager.setInstrument(symbol, symbolName ?? symbol, symbolTicker ?? symbol);
src/core/Pane.tsx:406: mainSymbolName$: this.eventManager.symbolName(),
src/core/Pane.tsx:407: mainSymbolTicker$: this.eventManager.symbolTicker(),
src/core/PaneManager.ts:98: mainSymbolTicker$: this.sharedPaneParams.eventManager.symbolTicker(),
src/core/PriceAxisLabels/PriceAxisLabels.ts:27: mainSymbolTicker$: Observable<string>;
src/core/PriceAxisLabels/PriceAxisLabels.ts:149: private mainSymbolTicker = '';
src/core/PriceAxisLabels/PriceAxisLabels.ts:153: constructor({ mainSeries$, mainSymbolTicker$, compareEntities$, indicatorEntities$ }: PriceAxisLabelsParams) {
src/core/PriceAxisLabels/PriceAxisLabels.ts:155: mainSymbolTicker$.subscribe((symbolTicker) => {
src/core/PriceAxisLabels/PriceAxisLabels.ts:156: this.mainSymbolTicker = symbolTicker;
src/core/PriceAxisLabels/PriceAxisLabels.ts:428: title: this.isHistoryMode ? '' : this.mainSymbolTicker || defaults.title,
src/core/PriceAxisLabels/PriceAxisLabels.ts:674: title: this.mainSymbolTicker,
src/core/Series/BaseSeries.ts:72: mainSymbolName$?: Observable<string>;
src/core/Series/BaseSeries.ts:73: mainSymbolTicker$?: Observable<string>;
src/core/Series/BaseSeries.ts:108: protected mainSymbolName$: Observable<string>;
src/core/Series/BaseSeries.ts:109: protected mainSymbolTicker$: Observable<string>;
src/core/Series/BaseSeries.ts:122: mainSymbolName$,
src/core/Series/BaseSeries.ts:123: mainSymbolTicker$,
src/core/Series/BaseSeries.ts:142: this.mainSymbolName$ = mainSymbolName$ ?? mainSymbol$;
src/core/Series/BaseSeries.ts:143: this.mainSymbolTicker$ = mainSymbolTicker$ ?? mainSymbol$;
src/core/Series/BaseSeries.ts:403: this.mainSymbolTicker$.pipe(distinctUntilChanged()).subscribe((symbolTicker) => {
src/core/Series/BaseSeries.ts:405: title: this.showSymbolLabel ? symbolTicker : '',
src/core/UndoRedo.ts:10: symbolName: (value: string) => void;
src/core/UndoRedo.ts:11: symbolTicker: (value: string) => void;
src/types/compare.ts:9: symbolName: string;
src/types/compare.ts:10: symbolTicker: string;
src/types/indicator.ts:52: symbolTicker?: string;
src/types/snapshot.ts:31: symbolName?: string;
src/types/snapshot.ts:32: symbolTicker?: string;
stories/MB/MB.stories.tsx:187: { symbol: 'SBER', symbolName: 'SBER', symbolTicker: 'SBER' },
stories/MB/MB.stories.tsx:188: { symbol: 'APAX', symbolName: 'APAX', symbolTicker: 'APAX' },
stories/MB/MB.stories.tsx:189: { symbol: 'SOL', symbolName: 'SOL', symbolTicker: 'SOL' },
stories/MB/MB.stories.tsx:248: <span>{instrument.symbolTicker}</span>
stories/TradeRadar/TradeRadar.stories.tsx:223: { symbol: 'SBER', symbolName: 'SBER', symbolTicker: 'SBER' },
stories/TradeRadar/TradeRadar.stories.tsx:224: { symbol: 'APAX', symbolName: 'APAX', symbolTicker: 'APAX' },
stories/TradeRadar/TradeRadar.stories.tsx:225: { symbol: 'SOL', symbolName: 'SOL', symbolTicker: 'SOL' },
stories/TradeRadar/TradeRadar.stories.tsx:276: <span>{instrument.symbolTicker}</span>
CHANGELOG.md:3:- `breaking change`: Добавлен необязательный параметр `symbolName?: string` для отображения полного названия инструмента в легенде
CHANGELOG.md:4:- `breaking change`: Добавлен необязательный параметр `symbolTicker?: string` для отображения короткого тикера инструмента в ценовом лейбле
===== 9. Использование symbol в snapshot =====
src/core/Chart.ts:45:import { ChartSnapshot, ISerializable, PaneSnapshot } from '@src/types/snapshot';
src/core/Chart.ts:95:export class Chart implements ISerializable<ChartSnapshot> {
src/core/Chart.ts:353: public getSnapshot(): ChartSnapshot {
src/core/Chart.ts:364: symbolName: this.eventManager.getSymbolName(),
src/core/Chart.ts:365: symbolTicker: this.eventManager.getSymbolTicker(),
src/core/CompareManager.ts:20: symbolTicker$: BehaviorSubject<string>;
src/core/CompareManager.ts:100: const symbolName = instrument.symbolName.trim() || symbol;
src/core/CompareManager.ts:101: const symbolTicker = instrument.symbolTicker.trim() || symbol;
src/core/CompareManager.ts:114: const symbolTicker$ = new BehaviorSubject(symbolTicker);
src/core/CompareManager.ts:133: const config = getDefaultCompareIndicatorConfig(seriesType, symbol, symbolName, symbolTicker, usedColors);
src/core/CompareManager.ts:146: mainSymbolTicker$: symbolTicker$,
src/core/CompareManager.ts:177: symbolName,
src/core/CompareManager.ts:178: symbolTicker,
src/core/CompareManager.ts:181: symbolTicker$,
src/core/CompareManager.ts:239: return Array.from(this.entries.values()).map(({ symbol, symbolName, symbolTicker, entity, mode }) => ({
src/core/CompareManager.ts:241: symbolName,
src/core/CompareManager.ts:242: symbolTicker,
src/core/CompareManager.ts:270: const symbolTicker = indicator.config.symbolTicker ?? symbol;
src/core/CompareManager.ts:284: symbolName: indicator.config.label,
src/core/CompareManager.ts:285: symbolTicker,
src/core/CompareManager.ts:307: entry.symbolTicker$.complete();
src/core/CompareManager.ts:325: symbolName: values[index].symbolName,
src/core/CompareManager.ts:326: symbolTicker: values[index].symbolTicker,
src/core/CompareManager.ts:421: symbolName: string,
src/core/CompareManager.ts:422: symbolTicker: string,
src/core/CompareManager.ts:429: symbolTicker,
src/core/CompareManager.ts:431: label: symbolName,
src/core/EventManager.ts:36: private symbolName$: BehaviorSubject<string>;
src/core/EventManager.ts:37: private symbolTicker$: BehaviorSubject<string>;
src/core/EventManager.ts:59: this.symbolName$ = new BehaviorSubject<string>(initialSymbolName?.trim() || initialSymbol);
src/core/EventManager.ts:60: this.symbolTicker$ = new BehaviorSubject<string>(initialSymbolTicker?.trim() || initialSymbol);
src/core/EventManager.ts:69: symbolName: (value) => this.symbolName$.next(value),
src/core/EventManager.ts:70: symbolTicker: (value) => this.symbolTicker$.next(value),
src/core/EventManager.ts:132: symbolName: string,
src/core/EventManager.ts:133: symbolTicker?: string,
src/core/EventManager.ts:136: const nextSymbolName = symbolName.trim() || symbol;
src/core/EventManager.ts:137: const nextSymbolTicker = symbolTicker?.trim() || symbol;
src/core/EventManager.ts:140: this.setWithHistory('symbolName', this.symbolName$, nextSymbolName, options);
src/core/EventManager.ts:141: this.setWithHistory('symbolTicker', this.symbolTicker$, nextSymbolTicker, options);
src/core/EventManager.ts:146: public symbolName(): Observable<string> {
src/core/EventManager.ts:147: return this.symbolName$.asObservable();
src/core/EventManager.ts:151: return this.symbolName$.value;
src/core/EventManager.ts:154: public symbolTicker(): Observable<string> {
src/core/EventManager.ts:155: return this.symbolTicker$.asObservable();
src/core/EventManager.ts:159: return this.symbolTicker$.value;
src/core/EventManager.ts:267: this.symbolName$.complete();
src/core/EventManager.ts:268: this.symbolTicker$.complete();
src/core/Legend.ts:113: this.eventManager.symbolName().subscribe((symbolName) => {
src/core/Legend.ts:114: this.mainSymbolName = symbolName;
src/core/MoexChart.tsx:21:import { ISerializable, MoexChartSnapshot } from '@src/types/snapshot';
src/core/MoexChart.tsx:94: snapshot: MoexChartSnapshot;
src/core/MoexChart.tsx:101:export class MoexChart implements ISerializable<MoexChartSnapshot> {
src/core/MoexChart.tsx:133: const { chartSeriesType, symbol, symbolName, symbolTicker, timeframe, interval, dateFormat, timeFormat } =
src/core/MoexChart.tsx:140: initialSymbolName: symbolName,
src/core/MoexChart.tsx:141: initialSymbolTicker: symbolTicker,
src/core/MoexChart.tsx:257: public setSnapshot(snap: MoexChartSnapshot) {
src/core/MoexChart.tsx:269: public getSnapshot(): MoexChartSnapshot {
src/core/MoexChart.tsx:278: public setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void {
src/core/MoexChart.tsx:281: this.eventManager.setInstrument(symbol, symbolName ?? symbol, symbolTicker ?? symbol);
src/core/Pane.tsx:406: mainSymbolName$: this.eventManager.symbolName(),
src/core/Pane.tsx:407: mainSymbolTicker$: this.eventManager.symbolTicker(),
src/core/PaneManager.ts:98: mainSymbolTicker$: this.sharedPaneParams.eventManager.symbolTicker(),
src/core/PriceAxisLabels/PriceAxisLabels.ts:155: mainSymbolTicker$.subscribe((symbolTicker) => {
src/core/PriceAxisLabels/PriceAxisLabels.ts:156: this.mainSymbolTicker = symbolTicker;
src/core/Series/BaseSeries.ts:403: this.mainSymbolTicker$.pipe(distinctUntilChanged()).subscribe((symbolTicker) => {
src/core/Series/BaseSeries.ts:405: title: this.showSymbolLabel ? symbolTicker : '',
src/core/UndoRedo.ts:10: symbolName: (value: string) => void;
src/core/UndoRedo.ts:11: symbolTicker: (value: string) => void;
src/index.ts:6:export type { Candle, ChartSeriesType, MoexChartSnapshot, ThemeKey, ThemeMode, TooltipConfig } from '@src/types';
src/types/compare.ts:9: symbolName: string;
src/types/compare.ts:10: symbolTicker: string;
src/types/indicator.ts:52: symbolTicker?: string;
src/types/snapshot.ts:22:export interface MoexChartSnapshot {
src/types/snapshot.ts:24: charts: ChartSnapshot[];
src/types/snapshot.ts:27:export interface ChartSnapshot {
src/types/snapshot.ts:31: symbolName?: string;
src/types/snapshot.ts:32: symbolTicker?: string;
===== 10. Использование symbol в IndicatorConfig =====
src/core/CompareManager.ts:13:import { CompareInstrument, CompareItem, CompareMode, Direction, IndicatorConfig } from '@src/types';
src/core/CompareManager.ts:133: const config = getDefaultCompareIndicatorConfig(seriesType, symbol, symbolName, symbolTicker, usedColors);
src/core/CompareManager.ts:269: const symbol = indicator.config.symbol ?? indicator.config.label;
src/core/CompareManager.ts:270: const symbolTicker = indicator.config.symbolTicker ?? symbol;
src/core/CompareManager.ts:284: symbolName: indicator.config.label,
src/core/CompareManager.ts:418:const getDefaultCompareIndicatorConfig = (
src/core/CompareManager.ts:424:): IndicatorConfig => {
src/core/Indicator.ts:10:import { ChartTypeOptions, IndicatorConfig, SettingsValues } from '@src/types';
src/core/Indicator.ts:22: config: IndicatorConfig;
src/core/Indicator.ts:37: private config: IndicatorConfig;
src/core/Indicator.ts:87: if (this.config.label) {
src/core/Indicator.ts:88: return this.config.label;
src/core/Indicator.ts:126: public getConfig(): IndicatorConfig {
src/core/IndicatorManager.ts:11:import { ChartTypeOptions, IndicatorConfig } from '@src/types';
src/core/IndicatorManager.ts:66: const baseConfig = snap.config ?? (indicatorsConfigMap()[snap.indicatorType] as IndicatorConfig);
src/core/Indicators/index.tsx:14:import { Direction, IndicatorConfig, LineCandle, SettingsValues } from '@src/types';
src/core/Indicators/index.tsx:34:export const indicatorsMap = (): Partial<Record<IndicatorsIds, IndicatorConfig>> => ({
src/types/indicator.ts:47:export interface IndicatorConfig {
src/types/snapshot.ts:5:import { IndicatorConfig } from '@src/types/indicator';
src/types/snapshot.ts:55: config?: IndicatorConfig;
src/utils/indicator.ts:4:import { IndicatorConfig, IndicatorSerie, MASource, SerieOptionsWithColor } from '@src/types';
src/utils/indicator.ts:11:export function applyNextIndicatorColors(config: IndicatorConfig, usedColors: readonly string[]): IndicatorConfig {
src/utils/indicator.ts:51:export function getIndicatorColors(config: IndicatorConfig): string[] {
===== 11. Отображение symbol в title, name и label =====
src/components/Legend/index.tsx:35: <div className={styles.symbol}>{item.name}</div>
src/core/CompareManager.ts:269: const symbol = indicator.config.symbol ?? indicator.config.label;
src/core/CompareManager.ts:284: symbolName: indicator.config.label,
src/core/CompareManager.ts:431: label: symbolName,
src/core/MoexChart.tsx:58: * symbol: { visible: true, label: 'Инструмент' },
src/core/Series/BaseSeries.ts:405: title: this.showSymbolLabel ? symbolTicker : '',
===== 12. Извлечение тикера через split =====
===== 13. Вызовы setSymbolMode =====
./src/core/CompareManager.ts:88: public async setSymbolMode(
./src/core/CompareManager.ts:280: await this.setSymbolMode(
./stories/MB/MB.stories.tsx:251: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.Percentage)}
./stories/MB/MB.stories.tsx:258: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewScale)}
./stories/MB/MB.stories.tsx:270: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewPane)}
./stories/TradeRadar/TradeRadar.stories.tsx:279: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.Percentage)}
./stories/TradeRadar/TradeRadar.stories.tsx:286: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewScale)}
./stories/TradeRadar/TradeRadar.stories.tsx:298: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewPane)}
./types/core/CompareManager.d.ts:34: setSymbolMode(seriesType: SeriesType, instrument: CompareInstrument, mode: CompareMode, paneId?: number): Promise<void>;
===== 14. Вызовы setSymbol =====
./src/core/EventManager.ts:236: this.setSymbol(symbol, setOptions);
./src/core/MoexChart.tsx:278: public setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void {
./types/core/MoexChart.d.ts:91: setSymbol(symbol: string, symbolName?: string, symbolTicker?: string): void;
===== 15. Использование symbol в тестах и stories =====
stories/argTypes.ts:78:// symbol: { required: false, name: 'string' },
stories/argTypes.ts:123:// 'symbol.visible': { required: false, name: 'boolean' },
stories/argTypes.ts:124:// 'symbol.label': { required: false, name: 'string' },
stories/argTypes.ts:147:// ' symbol: { visible: false, label: \'Инстр.\' },\n' +
stories/common.ts:15: // todo: add cache по `${symbol}${timeframe}`
stories/common.ts:37: update: (symbol: string, candle: Candle) => void,
stories/common.ts:44: const symbols = getSymbols();
stories/common.ts:46: for (let i = 0; i < symbols.length; i += 1) {
stories/common.ts:47: const symbol = normalizeSymbol(symbols[i]);
stories/common.ts:48: if (!symbol) continue;
stories/common.ts:50: update(symbol, this.nextRealtimeCandle(tf, symbol, periodMs));
stories/common.ts:60: private nextRealtimeCandle(timeframe: Timeframes, symbol: string, realtimePeriodMs: number): Candle {
stories/common.ts:63: const prev = this.realtimeLastBySymbol.get(symbol);
stories/common.ts:101: this.realtimeLastBySymbol.set(symbol, next);
stories/common.ts:109: * @param symbol - symbol.
stories/common.ts:112: public async generateCandles(timeframe: Timeframes, _symbol: string, untilCandle?: Candle): Promise<Candle[] | null> {
stories/common.ts:174: this.realtimeLastBySymbol.set(_symbol, data[data.length - 1])
stories/MB/MB.stories.tsx:108: symbol: 'APPL',
stories/MB/MB.stories.tsx:187: { symbol: 'SBER', symbolName: 'SBER', symbolTicker: 'SBER' },
stories/MB/MB.stories.tsx:188: { symbol: 'APAX', symbolName: 'APAX', symbolTicker: 'APAX' },
stories/MB/MB.stories.tsx:189: { symbol: 'SOL', symbolName: 'SOL', symbolTicker: 'SOL' },
stories/MB/MB.stories.tsx:245: key={instrument.symbol}
stories/MB/MB.stories.tsx:248: <span>{instrument.symbolTicker}</span>
stories/MB/MB.stories.tsx:251: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.Percentage)}
stories/MB/MB.stories.tsx:258: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewScale)}
stories/MB/MB.stories.tsx:270: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewPane)}
stories/MXT/MXT.stories.tsx:88: symbol: 'APPL',
stories/TradeRadar/TradeRadar.stories.tsx:134: symbol: 'appl',
stories/TradeRadar/TradeRadar.stories.tsx:223: { symbol: 'SBER', symbolName: 'SBER', symbolTicker: 'SBER' },
stories/TradeRadar/TradeRadar.stories.tsx:224: { symbol: 'APAX', symbolName: 'APAX', symbolTicker: 'APAX' },
stories/TradeRadar/TradeRadar.stories.tsx:225: { symbol: 'SOL', symbolName: 'SOL', symbolTicker: 'SOL' },
stories/TradeRadar/TradeRadar.stories.tsx:273: key={instrument.symbol}
stories/TradeRadar/TradeRadar.stories.tsx:276: <span>{instrument.symbolTicker}</span>
stories/TradeRadar/TradeRadar.stories.tsx:279: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.Percentage)}
stories/TradeRadar/TradeRadar.stories.tsx:286: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewScale)}
stories/TradeRadar/TradeRadar.stories.tsx:298: onClick={() => compareManager?.setSymbolMode('Line', instrument, CompareMode.NewPane)}