Пользовательские свойства ордера

 
Раз речь идёт уже об MT5 вот такая мысль на рассмотрение. При сопровождении ордеров меня часто интересуют характеристики, отсутствующие среди стандартных свойств ордера. Поскольку на данный момент в MQL структур нет, приходится делать так: на каждое свойство заводится массив(один из массивов содержит мой ID ордера), при установке ордера делается resize всех массивов и записываютя нужные характеристики, соответственно после закрытия ордера его характеристики удаляются, то есть всё, что выше по индексу переписывается на индекс ниже, после чего снова можно сделать resize, в сторону уменьшения. То есть довольно громоздко всё. Если бы у ордера было зарезервировано какое-то количество полей, заполняемых пользователем (то есть свойств объекта "ордер") всё было бы значительно проще. Понятно, что в такой идеологии эти свойства нет нужды выводить за пределы локальной машины, то есть для серверной стороны безразлично, есть у ордеров такой довесок в терминале, или нет. Ну а о том, чтобы просто создавать свойства ордера при необходимости, я даже мечтать не смею :)
 
Был недавно разговор об этом на форуме, там, где речь про МагикНумбер.
Понятно, что в такой идеологии эти свойства нет нужды выводить за пределы локальной машины, то есть для серверной стороны безразлично, есть у ордеров такой довесок в терминале, или нет.

как это серверу безразлично?! Ордера хранятся на сервере , а это значит,что изменяя поля ордеров, вы будете дергать сервер.
 
А чем не устраивает MagicNumber?

Как я многократно повторял - мы принципиально не разрешим произвольно менять в ордере что-то, не относящееся к самому трейдингу.
 
как это серверу безразлично?! Ордера хранятся на сервере , а это значит,что изменяя поля ордеров, вы будете дергать сервер.

Пусть это будет отдельный объект, просто при создании ордера он должен автоматически создаваться в терминале(и только в терминале) и как-то связываться с данным ордером (по тикету, например). Ну а после удаления(закрытия) ордера автоматически удаляться. Речь фактически идёт о том, чтобы избавить пользователя от описанных в первом посте громоздких манипуляций. Ну и, кстати, вынос их из MQL в CPP (или на чём пишется исходный код терминала) может дать и прибавку в быстродействии.
По крайней мере, раз подобный вопрос поднимался, эта тема интересует не только меня.
 
А чем не устраивает MagicNumber?
Как я многократно повторял - мы принципиально не разрешим произвольно менять в ордере что-то, не относящееся к самому трейдингу.

MagicNumber только один, этого мало. К тому же он имеет тип int, то есть числа double в нём не запомнить.
 
И ещё: MagicNumber нельзя менять, а при сопровождении может возникнуть нужда изменить характеристику.
 
Пожалуй нужны примеры применения, больше людей сможет судить было ли бы им это полезно.
Один тип использования - для управления. Например, я работаю по каналам, одновременно существуют несколько каналов разных временных масштабов, каждому присваивается ID. При установке ордера я запоминаю ID канала, на котором ставился ордер (в соответствующем пользовательском свойстве). Теперь, если этот канал разрушился, я путём изменения другого пользовательского свойства ордера перевожу его в класс "закрыть при первом удобном случае" - для этого класса, допустим, делается отдельный алгоритм, уже не связанный с происхождением ордера.
Другой тип использования - для сбора статистики. Например, в процессе существования ордера я отслеживаю максимальную просадку отдельного ордера и после его закрытия записываю в файл. Потом смотрю распределение просадок ордеров и принимаю решение о величинне стоплосса. Для мало-мальски объёмного алгоритма это значительно быстрее, чем оптимизировать стоплосс в тестере.
 
А если взять на вооружение глобальные переменные?
 
А если взять на вооружение глобальные переменные?

Дело даже не в том, что их придётся создавать/удалять вручную, а в том, что нужны именно структуры. Потому что минимальное число свойств, имеющих практический смысл - 2 (ID ордера и интересующая характеристика/признак).
 
....
ticket=OrderTicket();
GlobalVariableSet("ID"+ticket,Value);
 
A потом цикл по глобальным переменным с парсингом имён и их сортировкой каждый раз? Нет, лучше через набор массивов, там индекс объединяет соответствующие элементы всего набора.