[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 53

 

Кажись что-то проясняется.... Вот ситуация: объявлена глобальная переменная double Delete_Level. В теле оператора if ей присваивается новое значение:

Delete_Level = MA3

А при выходе из тела значение  Delete_Level на глобальном уровне не меняется. Вопрос: как изменить значение глобальной переменной Delete_Level при выходе из тела оператора if?

 
vovan-gogan:

Извиняюсь, но полегче никак?) Помогите понять в чем ошибка в


В том, что НИКОГДА не произойдет абсолютно верного равенства - это настоящий мир, реальный, в котором существуют некие погрешности и допуски для того или иного процесса, операции и т.д. Учите "базу"... :-Р Проще - некуда. Сделайте, как Вам порекомендовал, напишите - заработало ли условие? Самому интересно. Благодарю.


 
vovan-gogan:

Кажись что-то проясняется.... Вот ситуация: объявлена глобальная переменная double Delete_Level. В теле оператора if ей присваивается новое значение:

А при выходе из тела значение Delete_Level на глобальном уровне не меняется. Вопрос: как изменить значение глобальной переменной Delete_Level при выходе из тела оператора if?


Да как не меняется? Конечно, меняется. Принтами код обложите и вкладку "Журнал" смотрите, через F12 - тест по шагам в режиме визуализации.
 
sergeev:

а что такое дата в вашем понимании и понимании MQL ?
Я хотел бы сделать проверку перед выставлением ордера. Допустим сессия начинается в 10-30, далее в 10-35 все условия для открытия ордера на "бай" выполнены, но он не должен выставляться до тех пор, пока текущее время не станет больше либо равно 10-45.
 
Roman.:

Да как не меняется? Конечно, меняется.


  Вот так. Например в советнике сначала объявляю глобальную переменную int Orders, а потом в случае выставления отложенного ордера, значение int Orders должно измениться как показано ниже: 

int Orders;
if (MA2_2<MA1_2 && MA2_1>MA1_1)//пересечение МА
{
   if (OrdersTotal()>= 1)
   {
   return;
   }
         SL = 30;
         TP = 12;
         S_Price = Low[1] - 1* Point;
         if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен. Orders=",Orders );
            }
}           

 Но изменений в Orders не происходит. И каждый раз выводится сообщение, что "Ордер выставлен. Orders=1"

 
vovan-gogan:


Вот так. Например в советнике сначала объявляю глобальную переменную int orders, а потом в случае выставления отложенного ордера, значение int orders должно измениться как показано ниже:

Но изменений в orders не происходит. И каждый раз выводится сообщение, что "Ордер выставлен. Orders=1"


Там нужна не глобальная, но локальная переменная ф-ии start. Так пробуйте

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен.Orders = ",Orders );
            }
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
Roman.:


Там нужна не глобальная, но локальная переменная ф-ии start. Так пробуйте


В моем примере разве не то же самое? В чем отличие? Разве что я функцию start не добавил.
 
vovan-gogan:

В моем примере разве не то же самое? В чем отличие? Разве что я функцию start не добавил.

Вы пробуйте мой вариант.
 
Roman.:

Вы пробуйте мой вариант.

Но я не вижу отличи чтобы пробовать. Скажите пожалуйста что я не так сделал именно.
 
Скажите почему когда открываю график (реал тайм) с периодом М30 и накладываю индикатор с параметром int shift=iBarShift(NULL,PERIOD_M5,some_time); shift будет таким как надо, но когда я этот же индикатор прогоняю через тестер с периодом М30 shift не расчитывается?