Сопровождение ордеров - страница 3

 
Artyom Trishkin:
  • Смотрим комментарий, там написано "from #123"

а что делать если в 0.00 в этом комментарии вместо "from #123" окажется текст "order swap = 99.99 $" ?


если эта задача решается только через комментарий ордера, тогда не на from #123" у открытых ордеров нужно смотреть, а на "to #124" в истории, но не помню если ролловер на сервере есть, то комментарий же тоже затрется? - и тикет будет новый?

 
Igor Makanu:

а что делать если в 0.00 в этом комментарии вместо "from #123" окажется текст "order swap = 99.99 $" ?


если эта задача решается только через комментарий ордера, тогда не на from #123" у открытых ордеров нужно смотреть, а на "to #124" в истории, но не помню если ролловер на сервере есть, то комментарий же тоже затрется? - и тикет будет новый?

Есть реальные примеры такого поведения ДЦ ?

Я не встречал.

 
Если возможно, то будет. 
 
Artyom Trishkin:

Есть реальные примеры такого поведения ДЦ ?

Я не встречал.

по моему в начале года делал с частичным закрытие ордеров, сервер не помню где тестировали, возможно инста

но с комментарием ордера всегда было не надежно https://www.mql5.com/ru/forum/42068#comment_1453052


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


ЗЫ: вот нашел где обсуждали https://www.mql5.com/ru/forum/1111/page2407#comment_10949345

 
Igor Makanu:

а что делать если в 0.00 в этом комментарии вместо "from #123" окажется текст "order swap = 99.99 $" ?


если эта задача решается только через комментарий ордера, тогда не на from #123" у открытых ордеров нужно смотреть, а на "to #124" в истории, но не помню если ролловер на сервере есть, то комментарий же тоже затрется? - и тикет будет новый?

Когда-то же было "from" в комментарии. Делал примерно так: проверяются глобальные переменные, привязанные к ордеру, в них данные о ступени закрытия и начальном лоте. Если есть эти переменные - все норм, а если нет, проверяется комментарий, если в нем "from", то создаются глобальные переменные, в них перебрасываются данные о начальном лоте и о степени, а дальше комментарий не имеет значения.  

 
Dmitry Fedoseev:

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

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

Dmitry Fedoseev:

 а дальше комментарий не имеет значения.  

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



по классической схеме если на каждом тике делать: OnTick() --> посчитали открытые ордера --> закрыли / открыли / модификации --> нашли в истории и сопоставили ордер у которого было частичное закрытие путем анализа комментария.....

это будет очень медленный советник для тестера

 
Igor Makanu:


по классической схеме если на каждом тике делать: OnTick() --> посчитали открытые ордера --> закрыли / открыли / модификации --> нашли в истории и сопоставили ордер у которого было частичное закрытие путем анализа комментария.....

это будет очень медленный советник для тестера

Так ведь эти операции нужны не на каждом тике, сначала вы должны проверить наступление соответствующих условий закрытия открытия, а это быстрее во 1-х, во 2-х сопровождение для тестера можно не на тике делать а каждые 1.. 5 минут и т.п.
 
Aleksey Mavrin:
Так ведь эти операции нужны не на каждом тике, сначала вы должны проверить наступление соответствующих условий закрытия открытия, а это быстрее во 1-х, во 2-х сопровождение для тестера можно не на тике делать а каждые 1.. 5 минут и т.п.

я про это и писал


в общем, как и ожидал, исходников для обсуждения не появилось в топике


я эту задачу решал с помощью динамических списков, потом решил сделать универсальный шаблон для таких вещей, вот обсуждал https://www.mql5.com/ru/forum/85652/page17#comment_12370424

зачем и как этим пользоваться: 

- создаете обьект (контейнер) в котором необходимые свойства для сопровождения ордера в виде полей обьекта сохраняете, ну и естественно тикет ордера

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

- при таком подходе единственное, что нужно продумать - сохранение в файл, вернее в моем шаблоне это уже есть, просто дописать что нужно

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


ЗЫ: может и не оптимальное решение у меня, но все работает и никто не жалуется, скоро год как

 

в соседней ветке Artyom Trishkin давал ссылку на его статью, в которой про сопровождение ордеров, идея у меня была такая - вести каждую сделку со своим маджиком (чтобы эксперт присваивал свой маджик каждой своей сделке(серии сделок) по определенным правилам, и мог найти/отличить все свои сделки (с разными маджиками)), по нему можно и учет частичного закрытия и т.п. вести. я пока это не реализовывал, но пойду по этому пути.

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

Если эксперт на счёте один это легко, а если не один то кажется программными методами гарантировать отсутствие пересечения номеров не получится, только организационными)

ап: ознакомился со способом  в статье, мне показался он не очень удобен. Например если я хочу чтобы ордер идентифицировался по нескольким признакам (стратегия открытия, закрытия, тип трейлинга СЛ, ТП, еще какие либо флаги-триггеры для сопровождения)

то по сути мне нужно в мэджике хранить номера всех этих признаков. Мне на ум приходит такой способ - разделить по разрядам десятичного числа, т.е. оставить первую сотню для уникального номера эксперта (т.е. экспертов на счете м.б. максимум 100)

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

Artyom Trishkin
Artyom Trishkin
  • www.mql5.com
Профиль трейдера
 
Aleksey Mavrin:

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

это не новая идея, но зависит от "степеней гибкости" и связи с предыдущим состоянием ордера - магик номер же нельзя изменить в дальнейшем


вот у топикстартера, как минимум 2-степени связи от предыдущего состояния - нужно учитывать уровни цен и нужно учитывать частичное закрытие, и оба параметра (уровни и лот) зависят от предыдущего состояния, просто привязаться к цене открытия ордера не получится, нужен некий флаг/счетчик уже совершенных действий , ну или "ворошить историю" и восстанавливать ход событий после перезагрузки терминала