Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 769

 
evillive:
запоминать старое кол-во Бай и сравнивать с текущим, как ещё?
Именно это и не получается
 
Leonid123456:
Именно это и не получается
создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?
 
evillive:
создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?
Спасибо!
 
tuner:

В этих значениях ничего не смущает, там все правильно, но речь то не об этом.

Проблема конкретно с пятницей не актуальна если у тебя время локальное больше чем время брокера на Х часов.

Но представь если у тебя на локальном компе не +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(), в этом случае проблемы вроде не должно быть

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

 
tuner:

ну да, как вариант подсовывать функции нужное время, вместе с датой, извлеченной из TimeCurrent(), в этом случае проблемы вроде не должно быть

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

Да вариантов можно найти несколько. Например проверять наступление пятницы по локальному, а не по серверному времени. Правда в таком случае если собьётся время компа то можно огрести кучу неприятностей.
 
evillive:
создать целочисленную переменную, присвоить ей количество покупок, а потом ещё раз когда надо подсчитать покупки и сравнить с значением той переменной не получается?

Вы не могли бы дать пример кода?

еще ведь после сравнения нужно заново перезаписать переменную, иначе будет тоже самое бесконечно выполняться код. (допустим было 6, а стало 7 надо в переменную вписать что стало 7 после сравнения)

 
Leonid123456:

Вы не могли бы дать пример кода?

еще ведь после сравнения нужно заново перезаписать переменную, иначе будет тоже самое бесконечно выполняться код. (допустим было 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);

От Вас только требуется делать проверку согласно Вашим задачам:

if(BuyPos >= n) 
 
borilunad:

Не мучайтесь, вот Вам функция Кима, которой я пользуюсь, и во всех билдах работает:

И это впридачу:

От Вас только требуется делать проверку согласно Вашим задачам:

 

 

Спасибо большое! 
 
borilunad:

Не мучайтесь, вот Вам функция Кима, которой я пользуюсь, и во всех билдах работает:

И это впридачу:

От Вас только требуется делать проверку согласно Вашим задачам:

 

 

Подключил. работает бесконечно...

Удалось решить вопрос с помощью последнего метода в этой статье  https://www.mql5.com/ru/articles/1399&nbsp