Перейти к содержимому

Как убрать глобальный скролл тинькофф

  • автор:

Введение

Angular предоставляет удобный декларативный способ подписки на события в шаблоне, с помощью синтаксиса (eventName)=»onEventName($event)» . Вместе с политикой проверки изменений ChangeDetectionStrategy.OnPush подобный подход автоматически запускает цикл проверки изменений только по интересующему нас пользовательскому вводу. Иными словами, если мы слушаем (input) событие на элементе, то проверка изменений не будет запускаться, если пользователь просто кликает по полю ввода. Это значительно улучшает
производительность, по сравнению с политикой по умолчанию ( ChangeDetectionStrategy.Default ). В директивах мы также можем подписаться на события на хост-элементе через декоратор @HostListener(‘eventName’) .

В моей практике нередко встречаются случаи, когда обработка конкретного события требуется только при выполнении какого-либо условия. т.е. обработчик выглядит примерно так:

class ComponentWithEventHandler < // . onEvent(event: Event) < if (!this.condition) < return; >// Handling event . > >

Даже если условие не выполнилось и никакие действия по факту не произошли, цикл проверки изменений всё равно будет запущен. В случае с частыми событиями, вроде scroll или mousemove , это может негативно отразиться на производительности приложения.

В библиотеке UI компонентов, над которой я работаю, подписка на mousemove внутри выпадающих меню вызвала пересчет изменений вверх по всему дереву компонентов на каждое движение мыши. Следить за мышью было необходимо для реализации корректного поведения меню, но это явно стоило оптимизировать. Подробнее об этом ниже.

Подобные моменты особенно важны для универсальных UI элементов. Их на странице может присутствовать множество, а приложения бывают очень сложными и требовательными к производительности.

Исправить ситуацию можно, делая подписку на события в обход ngZone , например, с помощью Observable.fromEvent и запускать проверку изменений руками, вызывая changeDetectorRef.markForCheck() . Однако, это добавляет кучу лишней работы и лишает возможности использовать удобные встроенные инструменты Angular.

Ни для кого не секрет, что Angular позволяет подписываться на так называемые псевдособытия, уточняя какие именно события нас интересуют. Мы можем написать (keydown.enter)=»onEnter($event)» и обработчик (а вместе с ним и цикл проверки изменений) вызовется только при нажатии клавиши Enter .Остальные нажатия будут игнорироваться. В этой статье мы разберёмся, как можно воспользоваться тем же подходом, что и Angular, для оптимизации обработки событий. А в качестве бонуса добавим модификаторы .prevent и .stop , которые будут отменять поведение по умолчанию и останавливать всплытие события автоматически.

EventManagerPlugin

Для обработки событий Angular использует класс EventManager . Он имеет набор так называемых плагинов, расширяющих абстрактный EventManagerPlugin и делегирует обработку подписки на событие в тот плагин, который поддерживает данное событие (по имени). Внутри Angular предусмотрены несколько плагинов, среди которых обработка HammerJS событий и плагин, отвечающий за составные события, вроде keydown.enter . Это внутренняя реализация Angular, и данный подход может измениться. Однако, с момента создания issue про переработку этого решения прошло уже 3 года, и никаких подвижек в этом направлении не произошло:

Что интересно в этом для нас? Несмотря на то, что эти классы внутренние и отнаследоваться от них нельзя, токен, отвечающий за внедрение зависимостей для плагинов — публичный. Это значит, мы можем писать свои плагины и расширять ими встроенный механизм обработки событий.

Если посмотреть исходный код EventManagerPlugin , можно заметить, что мы и не сможем от него отнаследоваться, в большинстве своём он абстрактный и реализовать свой класс, отвечающий его требованиям не составляет труда:

Грубо говоря, плагин должен уметь определять, работает ли он с данным событием и должен уметь добавлять обработчик события и глобальные обработчики (на body , window и document ). Нас будут интересовать модификаторы .filter , .prevent и .stop . Для привязки их к нашему плагину реализуем обязательный метод supports :

const FILTER = '.filter'; const PREVENT = '.prevent'; const STOP = '.stop'; class FilteredEventPlugin < supports(event: string): boolean < return ( event.includes(FILTER) || event.includes(PREVENT) || event.includes(STOP) ); >>

Так EventManager поймёт, что события, в имени которых присутствуют определённые модификаторы, нужно передать на обработку в наш плагин. Затем нам нужно реализовать добавление обработчиков на события. Глобальные обработчики нас не интересуют, в их случае необходимость в подобных инструментах встречается существенно реже, а реализация была бы сложнее. Поэтому мы просто уберём из имени события наши модификаторы и вернём его в EventManager , чтобы он подобрал правильный встроенный плагин для обработки:

class FilteredEventPlugin < supports(event: string): boolean < // . >addGlobalEventListener( element: string, eventName: string, handler: Function, ): Function < const event = eventName .replace(FILTER, '') .replace(PREVENT, '') .replace(STOP, ''); return this.manager.addGlobalEventListener(element, event, handler); >>

В случае с событием на обычном элементе, нам нужно написать свою логику. Для этого мы обернём обработчик в замыкание и передадим событие без наших модификаторов назад в EventManager , вызвав его вне ngZone , чтобы избежать запуск цикла проверки изменений:

class FilteredEventPlugin < supports(event: string): boolean < // . >addEventListener( element: HTMLElement, eventName: string, handler: Function, ): Function < const event = eventName .replace(FILTER, '') .replace(PREVENT, '') .replace(STOP, ''); // Обёртка над нашим обработчиком const filtered = (event: Event) =>< // . >; const wrapper = () => this.manager.addEventListener(element, event, filtered); return this.manager.getZone().runOutsideAngular(wrapper); > /* addGlobalEventListener(. ): Function < . >*/ >

На данном этапе у нас есть: имя события, само событие и элемент, на котором оно слушается. Обработчик, который попадает сюда — не исходный обработчик, назначенный на это событие, а конец цепочки замыканий, созданных Angular для своих целей.

Одним решением могло бы стать добавление атрибута на элемент, отвечающего за то, вызывать обработчик или нет. Иногда для принятия решения необходимо проанализировать само событие: было ли отменено действие по умолчанию, какой элемент является источником события и т.д. Для этого недостаточно атрибута, нам нужно найти способ задать функцию-фильтр, получающую на вход событие и возвращающую true или false . Тогда мы могли бы описать наш обработчик следующим образом:

const filtered = (event: Event) => < const filter = getOurHandler(some_arguments); if ( !eventName.includes(FILTER) || !filter || filter(event) ) < if (eventName.includes(PREVENT)) < event.preventDefault(); >if (eventName.includes(STOP)) < event.stopPropagation(); >this.manager.getZone().run(() => handler(event)); > >;

Решение

Решением может стать синглтон сервис, хранящий соответствия элементов парам событие/фильтр и вспомогательные сущности для задания этих соответствий. Разумеется, на одном элементе может быть несколько обработчиков на одно и то же событие, но, как правило, это могут быть одновременно заданные @HostListener и обработчик, установленный на этот компонент в шаблоне на уровень выше. Эту ситуацию мы предусмотрим, другие же случаи нас мало интересуют ввиду своей специфичности.

Основной сервис довольно простой и состоит из мапы и пары методов для задания, получения и очистки фильтров:

export type Filter = (event: Event) => boolean; export type Filters = <[key: string]: Filter>; class FilteredEventMainService < private elements: Map= new Map(); register(element: Element, filters: Filters) < this.elements.set(element, filters); >unregister(element: Element) < this.elements.delete(element); >getFilter(element: Element, event: string): Filter | null < const map = this.elements.get(element); return map ? map[event] || null : null; >>

Таким образом, мы можем внедрить этот сервис в плагин и получать фильтр, передавая элемент и имя события. Для использования в связке с @HostListener добавим ещё один небольшой сервис, который будет жить вместе с компонентом и очищать соответствующие фильтры при его удалении:

export class EventFiltersService < constructor( @Inject(ElementRef) private readonly elementRef: ElementRef, @Inject(FilteredEventMainService) private readonly mainService: FilteredEventMainService, ) <>ngOnDestroy() < this.mainService.unregister(this.elementRef.nativeElement); >register(filters: Filters) < this.mainService.register(this.elementRef.nativeElement, filters); >>

Для добавления фильтров на элементы можно сделать аналогичную директиву:

class EventFiltersDirective < @Input() set eventFilters(filters: Filters) < this.mainService.register(this.elementRef.nativeElement, filters); >constructor( @Inject(ElementRef) private readonly elementRef: ElementRef, @Inject(FilteredEventMainService) private readonly mainService: FilteredEventMainService, ) <> ngOnDestroy() < this.mainService.unregister(this.elementRef.nativeElement); >>

В случае, если внутри компонента присутствует сервис для фильтрации событий, мы не будем позволять вешать на него фильтры через директиву. В конце концов, это почти всегда можно сделать, просто обернув компонент элементом, на который будет назначена наша директива. Чтобы понять, что на данном элементе уже присутствует сервис, мы опционально внедрим его в директиву:

class EventFiltersDirective < // . constructor( @Optional() @Self() @Inject(FiltersService) private readonly filtersService: FiltersService | null, ) <>// . >

Если этот сервис присутствует, будем выводить сообщение о том, что директива к нему не применима:

class EventFiltersDirective < @Input() set eventFilters(filters: Filters) < if (this.eventFiltersService === null) < console.warn(ALREADY_APPLIED_MESSAGE); return; >this.mainService.register(this.elementRef.nativeElement, filters); > // . >

Применение на практике

Весь описанный код можно найти на Stackblitz:

В качестве примеров использования там показаны мнимый select — компонент внутри модального окна — и контекстное меню в роли его выпадашки. В случае с контекстным меню, если вы проверите любую реализацию, то увидите, что поведение всегда следующее: при наведении мыши на пункт, он фокусируется, при дальнейшем нажатии стрелочек на клавиатуре, фокус перемещается по пунктам, но если подвигать мышью, фокус возвращается в элемент, находящийся под указателем мыши. Казалось бы, это поведение несложно реализовать, однако, лишние реакции на событие mousemove могут запускать десятки бесполезных циклов проверки изменений. Установив в качестве фильтра проверку на сфокусированность target элемента события, мы можем отсечь эти лишние срабатывания, оставив только те, что реально переносят фокус.

Также, в этом select -компоненте есть фильтрация на @HostListener подписках. При нажатии клавиши Esc внутри попапа, он должен закрываться. Это должно происходить, только если это нажатие не было необходимо в каком-то вложенном компоненте и не было обработано в нём. В select нажатие Esc вызывает закрытие выпадашки и возврат фокуса в само поле, но если он уже закрыт, он не должен препятствовать всплытию события и последующему закрытию модального окна. Таким образом, обработку можно описать декоратором:

@HostListener(‘keydown.esc.filtered.stop’) , при фильтре: () => this.opened .

Поскольку select является компонентом с несколькими фокусируемыми элементами, отслеживание его общей сфокусированности возможно через всплывающие события focusout . Они будут происходить при всех изменениях фокуса, в том числе, не покидающих границы компонента. У этого события есть поле relatedTarget , отвечающее за то, куда перемещается фокус. Проанализировав его, мы можем понять, вызывать ли нам аналог события blur для нашего компонента:

class SelectComponent < // . @HostListener('focusout.filtered') onBlur() < this.opened = false; >// . >

Фильтр, при этом, выглядит так:

const focusOutFilter = (: FocusEvent) => !this.elementRef.nativeElement.contains(relatedTarget);

Вывод

К сожалению, встроенная обработка составных нажатий клавиш в Angular всё равно запустится в NgZone , а значит вызовет проверку изменений. При желании мы могли бы не прибегать к встроенной обработке, но выигрыш в производительности будет невелик, а углубления во внутреннюю “кухню” Angular чреваты поломками при обновлении. Поэтому мы либо должны отказаться от составного события, либо использовать фильтр аналогично граничному оператору и просто не вызывать обработчик там, где он не актуален.

Вклинивание во внутреннюю обработку событий Angular — затея авантюрная, так как внутренняя реализация может измениться в будущем. Это обязывает нас следить за обновлениями, в частности, за задачей на GitHub, приведённой во второй секции статьи. Зато теперь мы можем удобно фильтровать выполнение обработчиков и запуск проверки изменений, у нас появилась возможность удобно применять типичные для обработки событий методы preventDefault и stopPropagation прямо при объявлении подписки. Из заделов на будущее — было бы удобнее объявлять фильтры для @HostListener -ов прямо рядом с ними с помощью декораторов. В следующей статье я планирую рассказать о нескольких декораторах, которые мы у себя создали, и попробую реализовать это решение.

  • Блог компании TINKOFF
  • Веб-разработка
  • JavaScript
  • Angular

Как убрать глобальный скролл тинькофф

Как технологические прорывы влияют на нашу жизнь и бизнес. Автор канала и рассылки @lerapozychanyuk

Редакционный канал The Bell: @thebell_io
Что мне с этого: @Bell_daily
Реклама: @Annam0711

About
Blog
Apps
Platform

�� The Bell Tech
17.2K subscribers

Готовы ли вы ради ясности мысли…
Anonymous Poll
Отказаться от мяса
Отказаться от мяса и яичного белка
Отказаться от мяса, яичного белка, глютена и фруктозы
Перейти только на рыбу (Дуров пробовал это недавно)
Голодать 30 дней, как Павел Дуров
Нет, я не готов
Опция для тех, кто не хочет делиться личными данными о предпочтениях в еде
3.7K voters 14.8K views 14:22

Технопятница

Google рассказал подробности об игровом стриминге Stadia на E3

— Запуск в ноябре. 14 стран, России нет. На старте доступна 31 игра от 21 издателя.

— Предзаказ можно оформить уже сейчас. Стоимость стартового комплекта (покупается в Google Store, которого нет в России) — $130, ежемесячный платеж — $10. В 2020 году появится бесплатный тариф для Stadia.

— Это не Netflix для игр. Поддерживаемые игры надо будет покупать по розничной цене. В подписку за $10 в месяц входит только Destiny 2.

— Чтобы играть в разрешении FulHD, понадобится очень хороший и стабильный интернет. Рекомендованный минимум в 10 мегабит принесет 720p на 60 кадрах в секунду.

The Bell: Павел Дуров перестал есть ради «ясности мысли», Роскомнадзор пригрозил заблокировать 9 популярных VPN, Греф и Собянин пошутили о цифровизации Москвы.

Одной строкой

Facebook расскажет о своей криптовалюте Libra 18 июня. TechCrunch → clck.ru/GTKkv

Google купил аналитический стартап Looker за $2,6 млрд. Это первое приобретение Google Cloud при новом гендиректоре Томасе Куриане. CNBC → clck.ru/GTKeo

Financial Times посвятила суверенному рунету обширную статью. Ничего сверхнового, есть два интересных показателя: 1,16 млн IP-адресов заблокированы в России (данные @roskomsvoboda), 650 тысяч сайтов в списке Роскомнадзора. В 2015 году их было 9021. FT → ��https://t.co/4BXEQQAhcU

+1 к продуктивности

Как использовать интервальное повторение, чтобы запоминать больше из прочитанных книг. Personal Growth → clck.ru/GTLWN

Официальный разбор причин недавнего сбоя в Google Cloud, приведшего к недоступности сервисов Google и ряда сайтов в США. У сбоя было несколько причин, наложившихся друг на друга. clck.ru/GTL8L

Google’s Stadia cloud gaming service is coming November 19th: Everything you need to know
You can still preorder a Premiere Edition to play shortly after launch

Forwarded from Павел Дуров

Российская интернет-индустрия породила сотни талантливых разработчиков. Однако, в результате описанной выше политики, сегодня они вынуждены играть в поддавки со своими зарубежными коллегами.

В свое время мы организовали “Ноев ковчег” для лучших разработчиков ВКонтакте, пригласив их на работу в Telegram. В этом году мы хотим дать такой же шанс разработчикам Яндекса, которые занимаются сервисами рекомендации контента. Устройство таких сервисов, как “Яндекс.Новости”, впечатляет в техническом отношении, однако ограничено цензурой и русскоязычным рынком.

Telegram обладает количеством данных и технологиями, которые позволили бы создать подобные сервисы рекомендаций новостей в глобальном масштабе — и без политической цензуры.

Технология моментального просмотра новостей Instant View уже позволяет просматривать новости 6000 изданий по всему миру с любого устройства, а статистика их просмотров в каждой стране позволяет алгоритмически вычислять наиболее релевантный на данный момент контент. Рекомендации статей мы можем начать с блока Recommended Articles после прочтения каждой статьи в Telegram, постепенно выведя в сервис с ежечасной подборкой и глобальным поиском по всем новостям мира. Параллельно с рекомендацией текстов мы займемся и рекомендацией наиболее актуальных видеозаписей.

Тех специалистов Яндекса, которым это интересно, приглашаю подать заявку через @jobs_bot (Content Recommendation Engineer). Денежное вознаграждение в Telegram несопоставимо выше, чем в Яндекс или Google, но надеюсь, не это станет главной мотивацией. У нас есть шанс создать первый в истории интернета эффективный и свободный агрегатор новостей.

Как устроен веб‑терминал

Веб‑терминал — это еще один инструмент, наравне с мобильным приложением и личным кабинетом на сайте tinkoff.ru, с помощью которого клиенты Тинькофф Инвестиций могут совершать торговые операции на бирже. На этой странице разбираем, из каких основных элементов состоит главная рабочая область терминала.

На этой странице

  • Зачем нужен веб‑терминал?
  • Как скачать терминал Тинькофф Инвестиций на компьютер?
  • Как выглядит интерфейс веб‑терминала?
  • Как выглядит верхняя панель веб‑терминала?
  • Как выглядят панель вкладок и центральное рабочее пространство веб‑терминала?
  • Как выглядит нижняя панель веб‑терминала?
  • Как считается доходность в веб‑терминале?

Зачем нужен веб‑терминал?

Терминал — это программа для торговли на бирже, которую можно использовать наравне с мобильным приложением Тинькофф Инвестиций и личным кабинетом на tinkoff.ru.

Терминал можно настроить под свой стиль торговли: вывести на экран только самую нужную информацию — графики конкретных акций, списки избранных бумаг, биржевой стакан, сводку новостей или другой полезный виджет. Также терминал позволяет анализировать графики ценных бумаг с помощью встроенных инструментов технического анализа и сразу совершать сделки — без переключения между разными вкладками.

Терминал бесплатный и доступен всем клиентам Тинькофф Инвестиций по адресу tinkoff.ru/terminal.

Как скачать терминал Тинькофф Инвестиций на компьютер?

Установить терминал Тинькофф Инвестиций на компьютер или ноутбук можно с помощью браузера Google Chrome, сделать это в других браузерах пока не получится.

Откройте терминал в браузере Google Chrome по адресу https://www.tinkoff.ru/terminal/.
В поисковой строке нажмите на значок монитора со стрелочкой вниз → кнопка «Установить».
Приложение готово к использованию, дополнительно устанавливать скачанный файл не нужно.

Для удобства вы можете закрепить приложение «Терминал Тинькофф Инвестиций» на рабочей панели вашего компьютера или ноутбука. Теперь вы сможете заходить в терминал за один клик — для этого не придется каждый раз открывать браузер и искать терминал среди вкладок.

Бегущая строка — отображает актуальные фондовые индексы, цену популярных акций, товаров и криптовалюты. Интересующие вас тикеры можно добавить в бегущую строку самостоятельно, нажав на значок «+» в верхнем левом углу.

Инструменты, которые отображаются в бегущей строке, перечислены в разделе «Отслеживаю». Чтобы добавить новый инструмент, воспользуйтесь поиском. Чтобы удалить инструмент из бегущей строки, нажмите на крестик в разделе «Отслеживаю».

Бегущую строку можно остановить, наведя на нее мышь, а также прокрутить влево или вправо, зажав левую кнопку мыши. При нажатии правой кнопкой мыши на тикер появится контекстное меню, с помощью которого можно перейти в виджет для выставления заявок на покупку и продажу актива, открыть два вида графика (легкий и стандартный), посмотреть информацию об активе, а также удалить тикер из бегущей строки.

Информация о счете — в этой строке отображается ключевая информация по вашему брокерскому счету: его баланс, а также абсолютная и относительная доходность по открытым позициям. Как считается доходность

Если у вас несколько брокерских счетов, то в левом углу этой строки можно переключаться между ними или открыть дополнительный брокерский счет. Для этого нажмите на название счета, в выпадающем списке выберите нужный счет и нажмите на него. Если просто навести на счет курсором, появится кнопка в виде трех точек — она вызывает меню, с помощью которого можно пополнить счет или вывести деньги, посмотреть информацию о маржинальных позициях, а также скрыть или переименовать счет.

Если в режиме маржинальной торговли по счету потребуется пополнение или возникнет угроза маржин-колла, соответствующий статус появится на панели счета и списке счетов.

Информация о непокрытых позициях — если вы торгуете с плечом, в верхней части панели также будет отображаться сумма непокрытых позиций и комиссия за перенос непокрытой позиции через ночь. При нажатии на сумму непокрытых позиций откроется информация по маржинальной торговле.

Если у вас не подключена маржинальная торговля, то вместо информации о непокрытых позициях будет кнопка «Маржинальная торговля». Она откроет окно, в котором можно подключить маржинальную торговлю и пройти тестирование от Центробанка для доступа к ней.

Кнопка «Пополнить» — позволяет моментально пополнить ваш торговый счет с дебетовой карты Тинькофф.

Цветовая тема — кнопка находится слева от вашего профиля и позволяет выбрать темную или светлую тему терминала.

Профиль — это иконка с вашей фотографией в правом углу верхней панели. Этот раздел поможет настроить терминал или выйти из вашего аккаунта в Тинькофф Инвестициях.

В настройках профиля можно:

Подключить и отключить автоследование в Тинькофф

Какие стратегии автоследования доступны в Тинькофф?

В приложении Тинькофф Инвестиций есть только рублевые стратегии автоследования. Портфели стратегий состоят из акций, облигаций, паев фондов или валюты — в зависимости от конкретной стратегии, которой придерживается ее автор. Использовать заемные средства брокера для следования стратегии не получится — маржинальная торговля в автоследовании не используется.

Чтобы попасть в каталог стратегий, на нижней панели нажмите на вкладку «Что купить» → «Готовые стратегии». Стратегии отсортированы по различным параметрам:

валюте — чтобы посмотреть список рублевых стратегий, на странице «Готовые стратегии» нажмите на кнопку «Рублевые» под поисковой строкой;

степени риска — наименее рискованные стратегии собраны в разделе «Менее рискованные»;

популярности — чтобы посмотреть стратегии с наибольшим числом подписчиков, прокрутите страницу до блока «Популярные»;

прибыльности — в конце страницы, в блоке «Прибыльные за всё время», собраны стратегии, которые показали наибольшую доходность.

Чтобы посмотреть сразу все стратегии, нажмите на кнопку «Все стратегии» — она находится в верхней части страницы под поисковой строкой.

Если вы не можете определиться, какая стратегия подходит именно вам, воспользуйтесь нашими подборками, которые находятся в верхней части экрана под кнопкой «Все стратегии»:

«Легкий старт» — чтобы подписаться на стратегию из этой подборки, достаточно вложить не больше 20 000 ₽;

«Выбор Тинькофф» — стратегии, которые отобрали аналитики Тинькофф;
«Недавно запустились» — подборка новых стратегий.

Надо ли открывать отдельный счет для автоследования?

Да, для подключения автоследования нужно будет открыть дополнительный брокерский счет — в Тинькофф Инвестициях можно бесплатно открыть до 10 брокерских счетов, не считая Инвесткопилки и ИИС. Для этого счета будет применяться специальный тариф «Автоследование»: там нет обычных брокерских комиссий за сделки, но есть комиссии за следование стратегии и за результат.

Подключить автоследование на действующий брокерский счет или на ИИС тоже можно, но понадобится выполнить ряд условий:

на счете должна быть отключена маржинальная торговля;

не подключать валютные стратегии на ИИС — в данный момент сделать это не получится по техническим причинам;

если на брокерском счете есть валюта, она должна совпадать с валютой выбранной стратегии;
на счете не должно быть внебиржевых активов;
активы на брокерском счете должны быть только в валюте выбранной стратегии;
на счете не должно быть лимитных заявок на бумаги в валюте, отличной от валюты стратегии;
не должно быть лимитных заявок на внебиржевые активы.

Если какое‑то из этих условий не будет выполняться, подключить автоследование не получится. В приложении вы увидите предупреждение об этом.

Важно помнить, что после подключения автоследования вы не сможете самостоятельно торговать на этом счете, пока не отключите услугу. Как отключить автоследование

Если к моменту подключения автоследования на вашем счете будут какие‑то активы, мы сами продадим их по текущей рыночной цене, чтобы синхронизировать ваш портфель с портфелем стратегии. Подробнее про синхронизацию

Как подписаться на стратегию?

Следуйте этой инструкции:

В приложении Тинькофф Инвестиций перейдите на вкладку «Что купить» и нажмите на плашку «Готовые стратегии» в верхней части экрана.

Выберите подходящую стратегию из каталога и внимательно изучите ее параметры: уровень риска, доходность, валюту, в которой совершаются сделки. После этого нажмите на кнопку «Следовать».

Если раньше вы не определяли свой инвестиционный профиль , в процессе подбора стратегии мы предложим вам заполнить соответствующую анкету. Инвестиционный профиль — очень важная составляющая автоследования: если ваш уровень риска не соответствует уровню риска стратегии, вы увидите предупреждение об этом. Что такое уровень риска стратегии

Откройте отдельный счет для автоследования или выберите существующий брокерский счет или ИИС. Какие есть ограничения для автоследования на действующем счете

Как вывести деньги со счета с автоследованием?

Сначала на счете нужно отключить автоследование. Как отключить автоследование

Но есть нюансы. Часть средств можно вывести только с брокерского счета, на котором было подключено автоследование. С ИИС нельзя вывести даже небольшую сумму — только сразу все деньги и ценные бумаги, которые на нем есть. Если так сделать, счет закроется. Если это произойдет до того, как пройдет три полных года с момента его открытия, вы потеряете право на оба вида налоговых вычетов, а полученные вычеты придется вернуть. Что будет, если ИИС закроется досрочно

С брокерского счета, на котором было подключено автоследование, вывести деньги можно так же, как и с обычного брокерского счета:

В приложении Тинькофф Инвестиций на вкладке «Главная» нажмите на нужный счет и продайте активы, которые есть на этом счете.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://kapelnicza.vyvod-iz-zapoya-na-domu-voronezh.ru/