evillive: создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?
В этих значениях ничего не смущает, там все правильно, но речь то не об этом.
Проблема конкретно с пятницей не актуальна если у тебя время локальное больше чем время брокера на Х часов.
Но представь если у тебя на локальном компе не +1, а -1 час разница с брокером.
И есть это простое условие:
В этом случае:
1. у брокера наступит первый тик пятницы, например сегодняшний тик, у которого время 2014.11.07 00:00
2. берем количество секунд, прошедших с 01.01.1970 00:00 до момента рассматриваемого тика, то есть до 2014.11.07 00:00
3. берем количество секунд, прошедших с 01.01.1970 00:00 до 06.11.2014 21:30 (это именно вчерашняя дата, т.к. берется время локального компа, у которого на момент рассматриваемого тика не пятница, а четверг, то есть 6 число, а если быть еще точнее, то 2014.11.06 23:00, разница в 1 час)
Вуаля, количество секунд в пункте 2 больше чем в пункте 3.
А значит в первый пятничный тик исполнится указанный в коде принт, хотя если бы функция StringToTime() брала дату с сервера брокера, то все бы сработало как и задумано, принт выскочил бы в пятницу только после того, как время перевалит за 21:30
Да... Я не сразу понял проблему. У меня всегда локальное больше серверного и я не сталкивался с такой проблемой. Выход один учитывать день и не пользоваться укороченным представлением времени.
AlexeyVik: Да... Я не сразу понял проблему. У меня всегда локальное больше серверного и я не сталкивался с такой проблемой. Выход один учитывать день и не пользоваться укороченным представлением времени.
ну да, как вариант подсовывать функции нужное время, вместе с датой, извлеченной из TimeCurrent(), в этом случае проблемы вроде не должно быть
к слову говоря, у меня время локального компа всегда больше чем время брокера, но тем не менее данная проблема вышеописанным образом проявилась в прошлую пятницу одновременно на двух разных брокерах (один демо, второй реал). Почему это произошло - до сих пор загадка. Впрочем код уже заменил на другой, так что такой траблы больше не должно случиться
ну да, как вариант подсовывать функции нужное время, вместе с датой, извлеченной из TimeCurrent(), в этом случае проблемы вроде не должно быть
к слову говоря, у меня время локального компа всегда больше чем время брокера, но тем не менее данная проблема вышеописанным образом проявилась в прошлую пятницу одновременно на двух разных брокерах (один демо, второй реал). Почему это произошло - до сих пор загадка. Впрочем код уже заменил на другой, так что такой траблы больше не должно случиться
Да вариантов можно найти несколько. Например проверять наступление пятницы по локальному, а не по серверному времени. Правда в таком случае если собьётся время компа то можно огрести кучу неприятностей.
evillive: создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?
Вы не могли бы дать пример кода?
еще ведь после сравнения нужно заново перезаписать переменную, иначе будет тоже самое бесконечно выполняться код. (допустим было 6, а стало 7 надо в переменную вписать что стало 7 после сравнения)
еще ведь после сравнения нужно заново перезаписать переменную, иначе будет тоже самое бесконечно выполняться код. (допустим было 6, а стало 7 надо в переменную вписать что стало 7 после сравнения)
Не мучайтесь, вот Вам функция Кима, которой я пользуюсь, и во всех билдах работает:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+----------------------------------------------------------------------------+int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
} } } } }
return(kp);
}
//+----------------------------------------------------------------------------+
И это впридачу:
int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic);
int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);
От Вас только требуется делать проверку согласно Вашим задачам:
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?
В этих значениях ничего не смущает, там все правильно, но речь то не об этом.
Проблема конкретно с пятницей не актуальна если у тебя время локальное больше чем время брокера на Х часов.
Но представь если у тебя на локальном компе не +1, а -1 час разница с брокером.
И есть это простое условие:
В этом случае:
1. у брокера наступит первый тик пятницы, например сегодняшний тик, у которого время 2014.11.07 00:00
2. берем количество секунд, прошедших с 01.01.1970 00:00 до момента рассматриваемого тика, то есть до 2014.11.07 00:00
3. берем количество секунд, прошедших с 01.01.1970 00:00 до 06.11.2014 21:30 (это именно вчерашняя дата, т.к. берется время локального компа, у которого на момент рассматриваемого тика не пятница, а четверг, то есть 6 число, а если быть еще точнее, то 2014.11.06 23:00, разница в 1 час)
Вуаля, количество секунд в пункте 2 больше чем в пункте 3.
А значит в первый пятничный тик исполнится указанный в коде принт, хотя если бы функция StringToTime() брала дату с сервера брокера, то все бы сработало как и задумано, принт выскочил бы в пятницу только после того, как время перевалит за 21:30
Да... Я не сразу понял проблему. У меня всегда локальное больше серверного и я не сталкивался с такой проблемой. Выход один учитывать день и не пользоваться укороченным представлением времени.
ну да, как вариант подсовывать функции нужное время, вместе с датой, извлеченной из TimeCurrent(), в этом случае проблемы вроде не должно быть
к слову говоря, у меня время локального компа всегда больше чем время брокера, но тем не менее данная проблема вышеописанным образом проявилась в прошлую пятницу одновременно на двух разных брокерах (один демо, второй реал). Почему это произошло - до сих пор загадка. Впрочем код уже заменил на другой, так что такой траблы больше не должно случиться
ну да, как вариант подсовывать функции нужное время, вместе с датой, извлеченной из TimeCurrent(), в этом случае проблемы вроде не должно быть
к слову говоря, у меня время локального компа всегда больше чем время брокера, но тем не менее данная проблема вышеописанным образом проявилась в прошлую пятницу одновременно на двух разных брокерах (один демо, второй реал). Почему это произошло - до сих пор загадка. Впрочем код уже заменил на другой, так что такой траблы больше не должно случиться
создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?
Вы не могли бы дать пример кода?
еще ведь после сравнения нужно заново перезаписать переменную, иначе будет тоже самое бесконечно выполняться код. (допустим было 6, а стало 7 надо в переменную вписать что стало 7 после сравнения)
Вы не могли бы дать пример кода?
еще ведь после сравнения нужно заново перезаписать переменную, иначе будет тоже самое бесконечно выполняться код. (допустим было 6, а стало 7 надо в переменную вписать что стало 7 после сравнения)
Не мучайтесь, вот Вам функция Кима, которой я пользуюсь, и во всех билдах работает:
И это впридачу:
От Вас только требуется делать проверку согласно Вашим задачам:
if(BuyPos >= n)Не мучайтесь, вот Вам функция Кима, которой я пользуюсь, и во всех билдах работает:
И это впридачу:
От Вас только требуется делать проверку согласно Вашим задачам:
Не мучайтесь, вот Вам функция Кима, которой я пользуюсь, и во всех билдах работает:
И это впридачу:
От Вас только требуется делать проверку согласно Вашим задачам:
Подключил. работает бесконечно...
Удалось решить вопрос с помощью последнего метода в этой статье https://www.mql5.com/ru/articles/1399
Подключил. работает бесконечно...
Удалось решить вопрос с помощью последнего метода в этой статье https://www.mql5.com/ru/articles/1399
В каком смысле бесконечно? Поставьте условие, какое нужно!
А OrdersTotal() показывает общее число. Его потом используйте в цикле для закрытий и модификаций!