Всем привет! Функция простенькая, но не работает, где то ошибся но не могу понять, где? Направьте в правильном направлении)) Суть функции FindCloseSellStop() проверить наличие тикетов в массиве и сравнить есть ли они в истории сделок, если есть, то true если нет то false. Это нужно для, обнуления массива, если тикеты, которые есть в массиве MassLockSellTrade уже в истории, то значит обнуляем массив, так как сделки уже закрыты.
Без комментариев, только намёк.
Надеюсь сам справишься.
- docs.mql4.com
Если MODE_HISTORY, то вместо OrdersTotal() надо OrdersHistoryTotal().
Но только бегать по всей истории - это жуткие тормоза будут.
Лучше пройтись по массиву Тикетов, выделять ордера по тикету и смотреть время их закрытия, если время больше нуля, значит закрыт - значит в истории.
Без комментариев, только намёк.
Надеюсь сам справишься.
Вот я лоханулся, аж самому стыдно))))))))) Спасибо!
Если MODE_HISTORY, то вместо OrdersTotal() надо OrdersHistoryTotal().
Но только бегать по всей истории - это жуткие тормоза будут.
Лучше пройтись по массиву Тикетов, выделять ордера по тикету и смотреть время их закрытия, если время больше нуля, значит закрыт - значит в истории.
Спасибо, учту!
количество ордеров в истории зависит от выбранного в терминале периода: История счета, правая кнопка мыши (ПКМ, контекстное меню), Выбрать период. Надо подождать загрузки данных с сервера
//+-------------------------------------------------------+ //| Скрипт проверки истории PROBA.mq4| //+-------------------------------------------------------+ void OnStart() { Alert("Ордеров в истории Сегодня OrdersHistoryTotal() = ",OrdersHistoryTotal()); }В соответствии с выбранным периодом меняю текст в скрипте. Вот что получилось.
Сегодня 2 августа. За месяц меньше чем за неделю. Видимо 2 дня это уже другой месяц? Если выбрать Сегодня - учитываются те, что после полуночи
Всем привет! Функция простенькая, но не работает, где то ошибся но не могу понять, где? Направьте в правильном направлении)) Суть функции FindCloseSellStop() проверить наличие тикетов в массиве и сравнить есть ли они в истории сделок, если есть, то true если нет то false. Это нужно для, обнуления массива, если тикеты, которые есть в массиве MassLockSellTrade уже в истории, то значит обнуляем массив, так как сделки уже закрыты.
//+------------------------------------------------------------------+ //| магик,тип ордера и массив тикетов передаются при вызове функции | //+------------------------------------------------------------------+ bool FindCloseSellStop(int magic, int type, int &mass[]) { int size = ArraySize(mass); for(int i = 0; i < size; i++) { if(OrderSelect(mass[i], SELECT_BY_TICKET)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic && OrderType() == type) { if(mass[i] == OrderTicket() && OrderCloseTime() > 0) return(true); } } } return(false); } //+------------------------------------------------------------------+p.s. Подправил немного функцию - искала только SELLLIMIT, сейчас ищет любые типы ордеров/позиций.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Функция простенькая, но не работает, где то ошибся но не могу понять, где? Направьте в правильном направлении)) Суть функции FindCloseSellStop() проверить наличие тикетов в массиве и сравнить есть ли они в истории сделок, если есть, то true если нет то false. Это нужно для, обнуления массива, если тикеты, которые есть в массиве MassLockSellTrade уже в истории, то значит обнуляем массив, так как сделки уже закрыты.