Всем привет! :)
Тестирую ТС. Наблюдаю появление двух одинаковых позиций. По логике алгоритма должна быть одна.
Делаю проверки.
Как видно, вторая позиция появляется без выполнения условия if(query==true). Поэтому мне не понятно, в силу каких причин и обстоятельств она появилась в тестере :).
Строка
где Buy = 0, свидетельствует, что до момента выполнения запроса позиций Buy в рынке не было.
Может быть тут необходимо ПАУЗУ для запросов делать? Или кто - нибудь может подсказать в чём может быть ошибка в алгоритме?
Может проблема имеет схожие корни?

- 2018.02.19
- www.mql5.com
Всем привет! :)
Тестирую ТС. Наблюдаю появление двух одинаковых позиций. По логике алгоритма должна быть одна.
Делаю проверки.
Как видно, вторая позиция появляется без выполнения условия if(query==true). Поэтому мне не понятно, в силу каких причин и обстоятельств она появилась в тестере :).
Строка
где Buy = 0, свидетельствует, что до момента выполнения запроса позиций Buy в рынке не было.
Может быть тут необходимо ПАУЗУ для запросов делать? Или кто - нибудь может подсказать в чём может быть ошибка в алгоритме?
Нужен код в котором происходит подсчёт позиций. Без кода ничего не сказать.
Всем привет! :)
Тестирую ТС. Наблюдаю появление двух одинаковых позиций. По логике алгоритма должна быть одна.
Делаю проверки.
Как видно, вторая позиция появляется без выполнения условия if(query==true). Поэтому мне не понятно, в силу каких причин и обстоятельств она появилась в тестере :).
Строка
где Buy = 0, свидетельствует, что до момента выполнения запроса позиций Buy в рынке не было.
Может быть тут необходимо ПАУЗУ для запросов делать? Или кто - нибудь может подсказать в чём может быть ошибка в алгоритме?
Из логов же видно, что все события произошли практически в одно и тоже время. На сервер был отправлен ордер, но позиция еще не открылась (ордер не был исполнен на сервере) по этому, если в переменной Buy хранится кол-во открытых позиций ее значение равно нулю. И вполне естественно, что на следующем тике, который произошел практически через несколько милисекунд был отправлен еще один ордер.
Может проблема имеет схожие корни?
Лог из Тестера.
Может проблема имеет схожие корни?
Вполне может быть. По "аналогии", можно сказать , вставил ZeroMemory(mrequest); ZeroMemory(mresult); - вроде бы помогло. Проверю и предложенное решение.
Нужен код в котором происходит подсчёт позиций. Без кода ничего не сказать.
Дело в том, что до пересчёта позиций дело так и не доходило. Позиция в терминале тестера появлялась сразу после отправки запроса.
Из логов же видно, что все события произошли практически в одно и тоже время. На сервер был отправлен ордер, но позиция еще не открылась (ордер не был исполнен на сервере) по этому, если в переменной Buy хранится кол-во открытых позиций ее значение равно нулю. И вполне естественно, что на следующем тике, который произошел практически через несколько милисекунд был отправлен еще один ордер.
Подумаю. Но не совсем понятно. В терминале тестера позиция присутствует ведь реально. Следовательно, влияет на результат в реальном времени. Поэтому не понятно, почему на сервере ордер не был отработан, если в терминале тестера он явно существует.
Дело в том, что до пересчёта позиций дело так и не доходило. Позиция в терминале тестера появлялась сразу после отправки запроса.
Это Вы так думаете. Отсылка торгового приказа != появилась позиция. Более того между отсылкой торгового приказа и появлением позиции проходит некоторое время - и в это время придут несколько тиков и в эти несколько тиков Вы всё ещё будете думать, что позиции нет и слать дальше торговые приказы.
В общем как всегда - нет кода и ветка превращается в филиал гадалки на кофейной гуще :)
Это Вы так думаете. Отсылка торгового приказа != появилась позиция. Более того между отсылкой торгового приказа и появлением позиции проходит некоторое время - и в это время придут несколько тиков и в эти несколько тиков Вы всё ещё будете думать, что позиции нет и слать дальше торговые приказы.
В общем как всегда - нет кода и ветка превращается в филиал гадалки на кофейной гуще :)
Ответ, для меня, в отношении допущенной ошибки, уже давно получен в сообщениях выше. В вашем посте, в котором сказано о сервере, всё понятно и из документации. Не понятно ваше высказывание в отношении того, что в терминале тестера - две позиции. Я не понимаю :). Согласен, так же как и 15 лет назад и десять, с вашими утверждениями в отношении исполнения приказов. Тем не менее, в терминале тестера имеется ДВЕ ПОЗИЦИИ, при чём, если наличие одной из них подтверждается условием if(query==true) print(), то вторая вообще появляется из "воздуха". Вот это я не могу понять или просто не хватает опыта, возможно, знаний. Пусть, согласен, да, по сути, оно так и есть, всё происходит так как вы и утверждаете, но позиция может быть открыта на основании алгоритма и этот алгоритм проверяется выше приведённым условием ... но! query не равно ни true, ни false. то есть нет подтверждения исполнения приказа, нет и отказа в исполнении. И вот это мне не понятно. Мне кажется, что привёл более чем достаточную инфу для подтверждения этого события. И подтверждение этого события осуществляется в логах, копия части этой распечатки приведена мною выше.
Суть. После очищения памяти в структуре запроса - эта "ошибка" исчезла. Но мне все равно не понятно, почему в терминале появлялась вторая позиция :).
Если бы запрос отправлялся на сервер "два" раза, то if(query==true) давала два print() в логах, а по факту он всего один.
Тем не менее, в терминале тестера имеется ДВЕ ПОЗИЦИИ, при чём, если наличие одной из них подтверждается условием if(query==true) print(), то вторая вообще появляется из "воздуха". Вот это я не могу понять или просто не хватает опыта, возможно, знаний.,,
Не ну точно, похоже вам уже пора >>>. Без кода говорить не о чем.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Тестирую ТС. Наблюдаю появление двух одинаковых позиций. По логике алгоритма должна быть одна.
Делаю проверки.
Как видно, вторая позиция появляется без выполнения условия if(query==true). Поэтому мне не понятно, в силу каких причин и обстоятельств она появилась в тестере :).
Строка
где Buy = 0, свидетельствует, что до момента выполнения запроса позиций Buy в рынке не было.
Может быть тут необходимо ПАУЗУ для запросов делать? Или кто - нибудь может подсказать в чём может быть ошибка в алгоритме?