Сначала положит первый запрос на ордер в трейдовый поток, потом второй. Если повезет, конечно. Что поток с ними будет делать - тайна. Паузы не будет, это точно.
да, и если поток будет свободен
При всем уважении, это не решение. Это огород.
есть идеи лучше?) Кроме "сменить брокера и терминал"? =)
Сначала положит первый запрос на ордер в трейдовый поток, потом второй. Если повезет, конечно. Что поток с ними будет делать - тайна. Паузы не будет, это точно.
да, и если поток будет свободен
Сам спросил, сам тут же и ответил. :) Функция также показывает, свободен поток в данный момент времени или нет. Race condition again though (sigh). Поток может оказаться занятым между селекторной и трейдовой фунцией. Мутекс (который все почему-то называют семафором) мог бы помочь. Только его невозможно реализовать в текущей имплементации без другого рейс кондишна. Да и не царское (=юзерское) это дело. Все эти проблемы давным давно преодолены в миллионе реализаций реал тайм процессов. Юниксовые сокеты и файл дескрипторы, например.
При всем уважении, это не решение. Это огород.
есть идеи лучше?) Кроме "сменить брокера и терминал"? =)
Конечно. :) Бывало и хуже. Вот, взять любой UI, например. Каждый юзер желает знать, почему между нажатием его любимого ctrl-alt-del и перезагрузкой компьютера проходит так много времени (особенно если этот юзер управляет миг31 (не симулятором) ). :) В конце концов, даже виндовз способен возпроизводить потоковое видео в реальном времени. А уж пару торговых операций увязать с сервером... Тем более, с собственным торговым потоком. :)
Если серьезно, идей, стопроцентно гарантирующих корректное выполнение торговых операций в ситуации, когда сам торговый движок не способен это сделать, быть не может. Все подобные идеи, по идее (прошу прощения за тавтологию ;)), должны сразу же быть реализованы на нижнем уровне прозрачно для пользователя.
Обнаружил багу, OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) говорит что находит уже закрытый ордер, ошибка повторяется постоянно:
интересно, а что возвращает OrderClosePrice() после OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES)??? =) Как можно закрывать позицию по цене 0.0000?
А багу не ты первый обнаружил =) Ордер не успевает переместиться в MODE_HISTORY.
Функция также показывает, свободен поток в данный момент времени или нет.
не правда :)
Если бы показывала, не было бы 20-ти страничных обсуждений "как избавиться от ошибок". И у меня проверка была практически с самого начала - до фени.
Хотя как тогда объяснить то, что у mike-а работало без ошибок? Правда, у него всего 3 эксперта, у меня обычно штук 8 висело..
Нифига себе не успевает, он у меня уже минут 10 как был закрыт а все равно находился. OrderClosePrice как раз возвращает нужную цену :) я долго не мог понять почему у меня не работает закрытие как в примере по ask и bid - постоянно говорит что invalid price и тогда я заменил на OrderClosePrice - и все заработало. Этот ClosePrice похоже та цена что показывается в метатрейдере в отрытых позициях, т.е. текущий бид или аск. Но точно не 0. А кажись я понял почему bid/ask не работал - я тестировал из скрипта и похоже bid и ask возможно были не установлены...
А как же тогда узнать закрыт ли ордер по тикету или нет? Перебирать что-ли все позиции?
я проверяю именно по OrderCloseTime() =) И что интерсно, работает =)))
А ещё можно перебирать SELECT_BY_POS - MODE_TRADES, и если есть - значит не закрыт
Вопрос по новому билду: Раньше, например в билд 183, после работы тестера в режиме оптимизации, результаты этой работы, весь получившийся файл, из папки Optimization Rezults можно было скопировать просто функцией Copy. Теперь эта функция копирует только одну строку из этого файла, и чтобы скопировать файл нужно выделит все строки. Это так задумано специально или получилось случайно? По моему удобнее было когда копировался весь файл, т.к. в копировании одной строки смысла не вижу.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
//------------------------------------------------------------------------ // close order //------------------------------------------------------------------------ bool CloseOrder(int OrderHandle) { color clr; Print("Trying to close order ", OrderHandle); // wait for trade context if (!WaitForTradeContext()) return(false); if (!OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES)) { Print("Can not locate order info"); return(false); } if (OrderType() == OP_BUY) clr = Yellow; else clr = Red; if (OrderClose(OrderHandle, OrderLots(), OrderClosePrice(), 5, clr)) { Print("Successful"); return(true); } else { Print("Failed: ", ErrorDescription(GetLastError())); return(false); } }Сам спросил, сам тут же и ответил. :) Функция также показывает, свободен поток в данный момент времени или нет.
Race condition again though (sigh). Поток может оказаться занятым между селекторной и трейдовой фунцией. Мутекс (который все почему-то называют семафором) мог бы помочь. Только его невозможно реализовать в текущей имплементации без другого рейс кондишна. Да и не царское (=юзерское) это дело.
Все эти проблемы давным давно преодолены в миллионе реализаций реал тайм процессов. Юниксовые сокеты и файл дескрипторы, например.
Конечно. :)
Бывало и хуже. Вот, взять любой UI, например.
Каждый юзер желает знать, почему между нажатием его любимого ctrl-alt-del и перезагрузкой компьютера проходит так много времени (особенно если этот юзер управляет миг31 (не симулятором) ). :)
В конце концов, даже виндовз способен возпроизводить потоковое видео в реальном времени. А уж пару торговых операций увязать с сервером...
Тем более, с собственным торговым потоком. :)
Если серьезно, идей, стопроцентно гарантирующих корректное выполнение торговых операций в ситуации, когда сам торговый движок не способен это сделать, быть не может. Все подобные идеи, по идее (прошу прощения за тавтологию ;)), должны сразу же быть реализованы на нижнем уровне прозрачно для пользователя.
Как можно закрывать позицию по цене 0.0000?
А багу не ты первый обнаружил =) Ордер не успевает переместиться в MODE_HISTORY.
Если бы показывала, не было бы 20-ти страничных обсуждений "как избавиться от ошибок". И у меня проверка была практически с самого начала - до фени.
Хотя как тогда объяснить то, что у mike-а работало без ошибок? Правда, у него всего 3 эксперта, у меня обычно штук 8 висело..
А по поводу ордера, я лопухнулся (как и ты =) - если выбираешь SELECT_BY_TICKET, он последний параметр не смотрит ;) выбирает из всех ордеров.
А ещё можно перебирать SELECT_BY_POS - MODE_TRADES, и если есть - значит не закрыт
Раньше, например в билд 183, после работы тестера в режиме оптимизации, результаты этой работы, весь получившийся файл, из папки Optimization Rezults можно было скопировать просто функцией Copy. Теперь эта функция копирует только одну строку из этого файла, и чтобы скопировать файл нужно выделит все строки. Это так задумано специально или получилось случайно? По моему удобнее было когда копировался весь файл, т.к. в копировании одной строки смысла не вижу.