alor-broker / Astras-Trading-UI

Astras. The Angular's trading terminal from Alor Broker. https://alorbroker.ru/
Apache License 2.0
66 stars 21 forks source link

[BUG] Отображение собственных сделок в сс #1810

Closed uncrashable closed 1 month ago

uncrashable commented 2 months ago

Опишите баг

Стакан отображает прошлые сделки.

Открыли сделку , напротив цены отображается объем. - закрыли сделку отображение исчезло.

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

Воспроизведение

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

Среда.

Виндовс 10 , Хром

Ожидаемое поведение

Описал выше

Скриншоты

Тут все верно. https://github.com/user-attachments/assets/6c0ce39f-f5ab-4dbd-b30b-f08d5fb185c3


Повторный вход в сделку отобразил и прошлую и текущую

https://github.com/user-attachments/assets/e7d77551-3d8e-4ff7-80d3-22d7e5f0f32b

Дополнительная информация

No response

Правила

sbelashevskiy commented 1 month ago

@uncrashable отображаются ВСЕ сделки за текущую сессию. Это программа, у нее нет понятия закрыли сделку или не закрыли. Это только на словах все просто и понятно. Для реализации нужно четкое условие как определять закрытые группы сделок, которые не должны отображаться. Закрыть/открыть сделку можно и несколько раз за день. Каким образом мы должны понимать когда закрыта одна сделка, а когда другая если у нас есть только список сделок за день? Суммировать объем по всем сделкам за день и если равен нулю не отображать - тоже не имеет смысла

Ну и вообще неплохо бы общаться в терминах АСТРАСА. Там нет понятия закрыть сделку. В Астрас сделка это 1 операция с бумагой, выполненная биржей. Ее невозможно открыть или закрыть - это просто факт операции.

Приведу 2 примера.

  1. У меня нет открытой позиции. В текущей сесии проходит 1 сделка, на пример покупка 3х лотов. Далее 3 сделки на продажу по 1 лоту. В этом случае еще можно разделить сделки на группы.
  2. У меня открытая позиция. В портфеле 2 лота. Затем я покупаю еще 2 лота и продаю 2 лота. Считать это закрытием сделки? По сделкам есть закрытие, по позиции нет.

Если в первом случае понятно относительно чего разбивать сделки на группы, то во втором нет

uncrashable commented 1 month ago

@uncrashable отображаются ВСЕ сделки за текущую сессию. Это программа, у нее нет понятия закрыли сделку или не закрыли. Это только на словах все просто и понятно. Для реализации нужно четкое условие как определять закрытые группы сделок, которые не должны отображаться. Закрыть/открыть сделку можно и несколько раз за день. Каким образом мы должны понимать когда закрыта одна сделка, а когда другая если у нас есть только список сделок за день? Суммировать объем по всем сделкам за день и если равен нулю не отображать - тоже не имеет смысла

Ну и вообще неплохо бы общаться в терминах АСТРАСА. Там нет понятия закрыть сделку. В Астрас сделка это 1 операция с бумагой, выполненная биржей. Ее невозможно открыть или закрыть - это просто факт операции.

Приведу 2 примера.

  1. У меня нет открытой позиции. В текущей сесии проходит 1 сделка, на пример покупка 3х лотов. Далее 3 сделки на продажу по 1 лоту. В этом случае еще можно разделить сделки на группы.
  2. У меня открытая позиция. В портфеле 2 лота. Затем я покупаю еще 2 лота и продаю 2 лота. Считать это закрытием сделки? По сделкам есть закрытие, по позиции нет.

Если в первом случае понятно относительно чего разбивать сделки на группы, то во втором нет

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

Я думаю, тут можно решить вопрос относительно времени сделки и наличие у трейдера открытой позиции - это же мы видим.

т.е. рассмотрю на примере покупки какого-либо актива. (ниже в тексте, под словом "система" понимаем общую работу Астрас, сама программа)

Трейдер покупает акцию, у него появляется индикатор, что по какой то цене он купил 1 акцию. Т.е. появляется единичка напротив цены. Еще купил акцию по другой цене , опять же видим еще одну единичку напротив цены. Система то понимает что у нас прошли 2 сделки на покупку и то что у нас теперь в портфеле 2 акции - понимает. Теперь я продаю 1 акцию - опять же индикатор отобразит это, но в целом система видит же у нас акцию этой конкретной компании, она же у нас осталась в портфеле - видит. Теперь я еще покупаю 1 акцию, опять же единичка отображается, и позиция моя не равна 0, поэтому у меня до сих пор отображается индикатор сделки (см скрин) image Далее я выставил 2 лота на продажу. Т.е. закрыл сделку. Моя позиция по данному инструменту стала = 0. Поэтому индикаторы все исчезают.

Вторая сделка. (у нас сейчас при повторном открытии сделки, начинают отображаться и прошлые заявки).

Теперь при входе в новую сделку, мы можем зафиксировать время, этой новой сделки. И далее отображать сделки только те, которые по времени были совершены позже. Отображать до тех пор , пока у нас в портфеле снова не будет по позиции отображаться 0.

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

sbelashevskiy commented 1 month ago
  1. Так и не вижу ответа на вопрос что если на момент первой сделки позиция была открыта. Ты опять описал простейший случай, который я уже описал в примере 1. Непонятно следует ли вообще учитывать текущую позицию при определении грация сделки или достаточно только считать количество из сделок
  2. По поводу цветов. Каким образом пользователь будет эти зеленые крадратики отличать от других подобных обозначений, которые уже присуствуют? Эти индикаторы будет попросту не видны на фоне кучи других сделок. Стандартные зеленый и красный цвета здесь точно не подходят
sbelashevskiy commented 1 month ago

Итого я вижу два варианта фильтрации отображаемых сделок:

  1. Сортируем все сделки по дате. Начиная с первой суммируем количество каждой сделки (с учетом знака в зависимости от покупки/продажи) пока не получим общий 0. Отбрасываем такую группу. И так пока не дойдем до конца и либо сделки кончатся, либо останется группа сделок по которой сумма не равно 0 Здесь текущая позиция не учитывается вообще

  2. Сортируем все сделки по дате. Начиная с последней от текущей позиции отнимаем количество каждой сделки (с учетом знака в зависимости от покупки/продажи и с учетом знака текущей позиции) пока не получим общий 0. Здесь учитывается текщая позиция, но какой эффект будет при наличии на начало текущей сессии открытой позиции непонятно