Как в mql4 ордера объединять в группы? - страница 3

 
Artem Onopin:

Есть какой то пример по классам, чтоб можно было мне от него оттолкнуться?


Конкретно для вашей ситуации примера нет. А общие примеры можно найти в исходниках от МТ и в справке. 

...

Я бы сделал так:

Класс в котором реализована логика работы с ордерами и локирующими ордерами. Ордера отличаются магиком. Нечетные обычные ордера четные локирующие или наоборот. Каждый экземпляр класса работает только с двумя ордерами (группой) один ордер обычный второй локирующий. Если надо создать новую группу ордеров то динамически создаем новый класс. Если все ордера в группе закрыты то класс уничтожаем.

Что бы не потерять свои ордера в результате перезагрузки терминала. В OnInit() в цикле по всем возможным ордерам ищем наши ордера и для каждой группы создает экземпляр класса. Для простоты отличия ордеров от ордеров других советников делаем общий для всех магик например 1000 далее просто используем приращение (как выше советовали).  То есть все ордера которые начинаются с 1000 это ордера вашего советника. Далее они делаться на группы 1001 и 1002 - 1 группа, 1003 и 1004 вторая и так далее, где каждой группой ордеров управляет свой экземпляр класса. Можно даже сделать так: 1000 - номер для всех ордеров советника; 1100 - номер группы (1100 - первая группа, 1200 - вторая группа и т.д.) ; 1101 - номер ордера в группе (1101 - первый ордер в первой группе, 1102 - второй ордер в первой группе, 1201 - первый ордер во второй группе и т.д.) 

 
LRA:

Именно маркировать при открытии.  Магик=1 это первая группа, Магик=2  это вторая и так далее.

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

Параметр Магик=100 для первого советника, 200 для второго и так далее. А ордера советник открывает Магик+1, Магик+2 ... т.е. Магик+Группа

различать так: Если OrderMagic() > Магик  && OrderMagic() < (Магик+100) ...

Например 201, 202, ... больше 200 но меньше 300 это все второго робота

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


Идея хорошая, если не одно но. Локирующие ордера при срабатывании могут переходить из группы в группу, по условию стратегии. Есть 2 группы ордеров рыночные и локирующие. При срабатывании локирующего ордера, он переходит в группу рыночных ордеров. А на сколько мне известно, Магик поменять у сделки в процессе её существования нельзя или я ошибаюсь?
 
Vitalii Ananev:


Конкретно для вашей ситуации примера нет. А общие примеры можно найти в исходниках от МТ и в справке. 

...

Я бы сделал так:

Класс в котором реализована логика работы с ордерами и локирующими ордерами. Ордера отличаются магиком. Нечетные обычные ордера четные локирующие или наоборот. Каждый экземпляр класса работает только с двумя ордерами (группой) один ордер обычный второй локирующий. Если надо создать новую группу ордеров то динамически создаем новый класс. Если все ордера в группе закрыты то класс уничтожаем.

Что бы не потерять свои ордера в результате перезагрузки терминала. В OnInit() в цикле по всем возможным ордерам ищем наши ордера и для каждой группы создает экземпляр класса. Для простоты отличия ордеров от ордеров других советников делаем общий для всех магик например 1000 далее просто используем приращение (как выше советовали).  То есть все ордера которые начинаются с 1000 это ордера вашего советника. Далее они делаться на группы 1001 и 1002 - 1 группа, 1003 и 1004 вторая и так далее, где каждой группой ордеров управляет свой экземпляр класса. Можно даже сделать так: 1000 - номер для всех ордеров советника; 1100 - номер группы (1100 - первая группа, 1200 - вторая группа и т.д.) ; 1101 - номер ордера в группе (1101 - первый ордер в первой группе, 1102 - второй ордер в первой группе, 1201 - первый ордер во второй группе и т.д.) 


Спасибо, пороюсь))
 
Alexey Viktorov:

Артём, я балдею... ткнуть в справку??? А почитать заголовки разделов??? Тут всё и решается, там и примеры кодов есть...

простите, для mql4 так-же всё есть.


Я имел ввиду, готовые куски кода если вдруг есть, на мою ситуацию. Справку я открыл первым делом)))
 
Artem Onopin: Есть 2 группы ордеров рыночные и локирующие. При срабатывании локирующего ордера, он переходит в группу рыночных ордеров. А на сколько мне известно, Магик поменять у сделки в процессе её существования нельзя или я ошибаюсь?

Магик задается при открытии ордера, Вы совершенно правы. Но что значит переход локирующего ордера в рыночный? Под локирующим понимается отложка, расположенная определенным образом? Если так, то все намного проще. В качестве магика локирующему ордеру назначается OrderTiket(). Если надо найти, кого ордер локирует, то берем OrderMagiс() и ищем ордер с таким OrderTiket(). Так пойдет?

 
Artem Onopin:

Идея хорошая, если не одно но. Локирующие ордера при срабатывании могут переходить из группы в группу, по условию стратегии. Есть 2 группы ордеров рыночные и локирующие. При срабатывании локирующего ордера, он переходит в группу рыночных ордеров. А на сколько мне известно, Магик поменять у сделки в процессе её существования нельзя или я ошибаюсь?


Возможно если бы вы сразу полностью описали алгоритм тогда вам ответили бы более конкретно.

...

В данном случае, как я вам советовал выше для вас не подойдет. Вам скорее всего лучше сделать так как предлагает LRA

Если есть открытый рыночный ордер например с тикетом 100  и для него открываете отложенный локирующий ордер и этому отложенному ордеру присваиваете магик 100 (тикет рыночного ордера)

 
LRA:

Магик задается при открытии ордера, Вы совершенно правы. Но что значит переход локирующего ордера в рыночный? Под локирующим понимается отложка, расположенная определенным образом? Если так, то все намного проще. В качестве магика локирующему ордеру назначается OrderTiket(). Если надо найти, кого ордер локирует, то берем OrderMagiс() и ищем ордер с таким OrderTiket(). Так пойдет?


Да, попробую так, посмотрим что получиться)))
 
Artem Onopin:

Да, попробую так, посмотрим что получиться)))


Не страдайте ерундой. Тикет вместо магика это маразм. Массивы и файлы - это тормоза. 

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

Если что, есть статья -  https://www.mql5.com/ru/articles/2744

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

 
Dmitry Fedoseev:


Не страдайте ерундой. Тикет вместо магика это маразм. Массивы и файлы - это тормоза. 

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

Если что, есть статья -  https://www.mql5.com/ru/articles/2744

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


Да с магиком тоже не выходит, как не крути и мне надо его будет в процессе работы эксперта изменять, а с магиком этот номер не пройдёт. Может по коменту, группировать его вроде можно изменять?

Статейку почитаю))

 
Artem Onopin:


Да с магиком тоже не выходит, как не крути и мне надо его будет в процессе работы эксперта изменять, а с магиком этот номер не пройдёт. Может по коменту, группировать его вроде можно изменять?

Статейку почитаю))

Нельзя менять комментарий.
Причина обращения: