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

 
AlexeyVik:

Ну вот у меня локальное время больше серверного на 1 час.

Исходя из этого объясни что тебя смущает в этих значениях?

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

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

Но представь если у тебя на локальном компе не +1, а -1 час разница с брокером.

И есть это простое условие:

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
   Print("Настала пятница и время больше чем 21:30");

В этом случае:

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

 
Leonid123456:

Здравствуйте.

Есть такая задача. (не могу прикрутить к тику)

Если сработал отложенный ордер {то...}

В советнике для подсчета ордеров использую Terminal.mqh.

Терминал // Mas_Tip[0] открытые Buy 

// если количество  ордеров Buy увеличилось на 1 то...

if (Mas_Tip[0]+1) 

{

функция 

 Все работает. Но срабатывает на каждом следующем тике.

Как прикрепить это дело к тику? А потом сравнить значение на предыдущем тике и на данном тике. 

А выделенную строку можешь перевести на наш человеческий язык? Что должно быть и что получается при выполнении этой строки...
 
AlexeyVik:
А выделенную строку можешь перевести на наш человеческий язык? Что должно быть и что получается при выполнении этой строки...

// если количество  ордеров Buy увеличилось на 1 то...

функция например открывает, или закрывает другие ордеры... 

Она не обязательно должна быть такой..if (Mas_Tip[0]+1)   можно сделать if (Mas_Tip[0] > Mas_Tip[1]) // если ордеров Buy больше чем Cell. То открыть отложенный например...

Дело в том что на следующем тике эти данные снова истина.  

 

 
Leonid123456:

// если количество  ордеров Buy увеличилось на 1 то...

функция например открывает, или закрывает другие ордеры... 

if (Mas_Tip[0]+1) 

в скобках у if должна быть bool, то есть true или false.

А здесь, очевидно, int. То есть целое число.

Конечно, true это 1, а false это 0 (если не путаю). Но все равно не правильно. Что возвращает Mas_Tip[0]?

 
ikatsko:

if (Mas_Tip[0]+1) 

в скобках у if должна быть bool, то есть true или false.

А здесь, очевидно, int. То есть целое число.

Конечно, true это 1, а false это 0 (если не путаю). Но все равно не правильно. Что возвращает Mas_Tip[0]?

кол-во открытых ордеров Buy.

 
Leonid123456:

// если количество  ордеров Buy увеличилось на 1 то...

функция например открывает, или закрывает другие ордеры... 

Нет, это ты так хочешь. А на самом деле это не так. В массиве Mas_Tip[0] имеется какое-то значение и если оно больше нуля то условие if(Mas_Tip[0]) уже будет истина. А если к этому значению ещё прибавить 1 то истина будет всегда потому, что количество открытых ордеров не может быть равно -1

 
AlexeyVik:

Нет, это ты так хочешь. А на самом деле это не так. В массиве Mas_Tip[0] имеется какое-то значение и если оно больше нуля то условие if(Mas_Tip[0]) уже будет истина. А если к этому значению ещё прибавить 1 то истина будет всегда потому, что количество открытых ордеров не может быть равно -1


пробовал сделать так

   bool  Fact_1 = false;                    // Глобальная перемен.
       bool  Fact_2 = false;                    // Глобальная перемен.
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
                          // Локальная перемен.
   if (Fact_2==true)                            //Если сообщение уже..
      return;                                   //..было, то выходим
 
   if (Mas_Tip[0]+1)
      Fact_1 = true;                            // Произошло событие 1
 
   
 
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
                               // Пользовательс. ф-ия
  {
             // Сообщение
   Fact_2 = true;                               // Произошло событие 2
   return;                                      // Выход из польз.ф-ии

} 

Получается одноразово. 

 
ikatsko:

if (Mas_Tip[0]+1) 

в скобках у if должна быть bool, то есть true или false.

А здесь, очевидно, int. То есть целое число.

Конечно, true это 1, а false это 0 (если не путаю). Но все равно не правильно. Что возвращает Mas_Tip[0]?

false это 0 а если не 0 то true

Попробуй такую строку

bool b;
b = 7.40;
if(b) Print("b = ", b);
Компилятор может предупредить о возможной потере точности но сработает.
 

можно отбросить Mas_Tip[0]

Как получить событие.  Открылся Buy.

 
Leonid123456:

можно отбросить Mas_Tip[0]

Как получить событие.  Открылся Buy.

запоминать в какой-то переменной старое кол-во Бай и сравнивать с текущим значением, возвращаемым функцией подсчёта баев, как ещё?