Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 643

 
Alexey Viktorov:

Не последней по списку, а самой "молодой" по времени.

Хотя и я так-же не внимателен. Вопрос о модификации, а я пишу закрытие... А если просто модифай то и дыр никаких в списке ордеров не будет... Только может потребоваться добавить переменные и им присвоить значения и ОБЯЗАТЕЛЬНО проверку параметров, чтобы не получать ошибку #1. Ну с этим Мила сама справится.

Artyom Trishkin:

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

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

Насколько я знаю, ордера в списке располагаются как раз от самого раннего (OrdersTotal()-1) до самого позднего (0). Если это не так (список сортируется не по времени) и у Вас есть доказательства, предоставьте их пожалуйста.

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

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

 
Alexey Kozitsyn:

Насколько я знаю, ордера в списке располагаются как раз от самого раннего (OrdersTotal()-1) до самого позднего (0). Если это не так (список сортируется не по времени) и у Вас есть доказательства, предоставьте их пожалуйста.

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

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

Хоспидя... Доказательства им подавай...

Видать, вы не совсем помните такие ситуации, будучи давно обсуждаемыми на mql4.com. Вот тогда-то и пришли к выводу, что лучше всё же искать по времени ордер для однозначного определения его времени открытия/закрытия. Уже устал повторять, что была зависимость от сортировки. Потом сделали так, что перестала быть. Народ расслабился, и начал делать так, как предлагаете вы. А потом бац.., и опять появилась зависимость от сортировки. Народ взвыл - роботы с ума сошли. А потом опять зависимость пропала от сортировки.

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

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

Удачи.

 
Artyom Trishkin:

Хоспидя... Доказательства им подавай...

Видать, вы не совсем помните такие ситуации, будучи давно обсуждаемыми на mql4.com. Вот тогда-то и пришли к выводу, что лучше всё же искать по времени ордер для однозначного определения его времени открытия/закрытия. Уже устал повторять, что была зависимость от сортировки. Потом сделали так, что перестала быть. Народ расслабился, и начал делать так, как предлагаете вы. А потом бац.., и опять появилась зависимость от сортировки. Народ взвыл - роботы с ума сошли. А потом опять зависимость пропала от сортировки.

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

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

Удачи.

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

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

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

А принимать мой способ или нет - пусть каждый для себя решает сам. Самый лучший вариант, открыть много ордеров и посмотреть, как же СЕЙЧАС происходит сортировка.

И Вам удачи. 

 
Artyom Trishkin:

Вы уверены, что показали надёжный способ пропуска последней позиции в списке?

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

Всё же, ИМХО, тут нужны два цикла - в первом ищем по времени открытия самую свежую позицию, во втором модифицируем все, кроме той, тикет которой нашли в первом цикле.

Нет, не уверен, но логически правильный.

Ниже прочел о коварстве MQ - появилась тревожность. Спасибо за предостережение.

 
Alexey Kozitsyn:

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

Зачем каждый раз перебирать? Вот это и есть не рационально.

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

И пользуйтесь данными, полученными на этом тике. После их изменения на этом тике, на следующем вы получите новые данные и новые поля двух структур. Мне кажется - это нормальный баланс между надёжностью и скоростью. Вот это и есть оптимальность. А то, что вы называете оптимальностью, ИМХО - это шапкозакидательство ;)

 
Artyom Trishkin:

Зачем каждый раз перебирать? Вот это и есть не рационально.

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

И пользуйтесь данными, полученными на этом тике. После их изменения на этом тике, на следующем вы получите новые данные и новые поля двух структур. Мне кажется - это нормальный баланс между надёжностью и скоростью. Вот это и есть оптимальность. А то, что вы называете оптимальностью, ИМХО - это шапкозакидательство ;)

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

 
Alexey Kozitsyn:

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

Ваши же слова:

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

"Повсюду" - разве в данном контексте обсуждения не синоним "каждый раз"?

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

Может я не так вас понял? Но ваше, мною процитированное выражение, ИМХО, исключает неоднозначность понимания.

 
Artyom Trishkin:

Ваши же слова:

"Повсюду" - разве в данном контексте обсуждения не синоним "каждый раз"?

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

Может я не так вас понял? Но ваше, мною процитированное выражение, ИМХО, исключает неоднозначность понимания.

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

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

 
Alexey Kozitsyn:

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

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

Уже давно сделан класс, который позволяет легко и не напрягаясь иметь данные по любым символам и любым магикам. И ничего таскать не нужно, тем более целый массив, а лишь ДВА ордера - последний открытый и последний закрытый. Каждый раз, после долгих расчётов или ожидания, нужно перезаполнять поля структур, что впрочем, и вам приходится делать, или вы не обновляете окружение?

Ладно. Разговор "ниочём"... Делайте как вам удобнее. Не заморачивайтесь о надёжности - ну её...

 
Artyom Trishkin:

Уже давно сделан класс, который позволяет легко и не напрягаясь иметь данные по любым символам и любым магикам. И ничего таскать не нужно, тем более целый массив, а лишь ДВА ордера - последний открытый и последний закрытый. Каждый раз, после долгих расчётов или ожидания, нужно перезаполнять поля структур, что впрочем, и вам приходится делать, или вы не обновляете окружение?

Ладно. Разговор "ниочём"... Делайте как вам удобнее. Не заморачивайтесь о надёжности - ну её...

А я и обновляю окружение, просто Ваш метод поиска будет занимать гораздо больше времени, вот и все, а на счет надежности - это спорно.