Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 147

 
-Aleks-:

Прошу помощи - не могу понять, почему получаю ноль при вычислении массива VesMass в значениях i>0 ?

 

оказалось, что надо писать не 4 и 5 , а 4.0 и 5.0 - что за логика - мне не ясно...
 
-Aleks-:

 

оказалось, что надо писать не 4 и 5 , а 4.0 и 5.0 - что за логика - мне не ясно...
Читай документацию и станет ясно. Хорошо что сам справился.
 
Alexey Viktorov:
Читай документацию и станет ясно. Хорошо что сам справился.

 

Да читал я про что-то подобное раньше - вот и решил попробовать, но где логика сего не ясно... и в документации, кстати, найти ответ не смог.
 
-Aleks-:

 

Да читал я про что-то подобное раньше - вот и решил попробовать, но где логика сего не ясно... и в документации, кстати, найти ответ не смог.


Это особенность не только МКЛ, в С++ и других языках программирования тоже самое - деление двух целых чисел или переменных типа (int) даст усечённый до целого результат. В вашем случае 4/5=0. 

Можно написать 4.0/5 или (double)4/5 - тогда результатом будет вещественное число.
 
Vitalie Postolache:


Это особенность не только МКЛ, в С++ и других языках программирования тоже самое - деление двух целых чисел или переменных типа (int) даст усечённый до целого результат. В вашем случае 4/5=0. 

Можно написать 4.0/5 или (double)4/5 - тогда результатом будет вещественное число.

 Это то я понял, но не понял логику решения - т.е. потребность.

 
-Aleks-:

 Это то я понял, но не понял логику решения - т.е. потребность.


Ну вы же не спорите "почему 2*2=4 в арифметике, в чём логика решения"? Просто принимаете это за аксиому и пользуетесь. Вот так и с делением двух целых.
 
Vitalie Postolache:

Ну вы же не спорите "почему 2*2=4 в арифметике, в чём логика решения"? Просто принимаете это за аксиому и пользуетесь. Вот так и с делением двух целых.

 Я проверю сложением...

 


Kot:


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

Такой код тоже не работает.

int start() {   

           double pr=ObjectGetValueByShift("line",0);

 ‌   If (Bid==pr){

           Alert (pr);}

   return(0);‌}‌


Имя линии правильно прописываеш?

П‌опробуй этот скрипт, и покаж что в логах написано.

void OnStart()
  {
     double pr;
     int obj_total=ObjectsTotal(); 
     string name;
     int i; 
     
   for(i=0;i<obj_total;i++) 
     { 
      name=ObjectName(i); 
      if(ObjectType(name)!=OBJ_TREND) continue; 
      PrintFormat("Объект %d:     Имя объекта - %s",i,name); 
      pr=ObjectGetValueByShift(name,0);
      PrintFormat("Объект %d:     Цена - %.5f",i,pr);
      
     }  

  }

‌Скрипт объект определяет, имя правильное пишет. Но цену берет абсолютно левую. На фото отметил ее горизонтальной линией. Он эти цены выдает не зависимо пересекали бары линию или нет.

Файлы:
23.png  62 kb
 
Kot:


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

Такой код тоже не работает.

int start() {   

           double pr=ObjectGetValueByShift("line",0);

 ‌   If (Bid==pr){

           Alert (pr);}

   return(0);‌}

Bid может легко перескочить вашу линию, он не обязан задерживаться на каждом пункте (то есть точного равенства не будет ну никак)

поменяйте условие например на if ( (MathMin(Close[1],Open[0])<=pr && Bid>=pr) || (MathMax(Close[1],Open[0])>=pr && Bid<=pr)) или подобное..

 
Maxim Kuznetsov:

Bid может легко перескочить вашу линию, он не обязан задерживаться на каждом пункте (то есть точного равенства не будет ну никак)

поменяйте условие например на if ( (MathMin(Close[1],Open[0])<=pr && Bid>=pr) || (MathMax(Close[1],Open[0])>=pr && Bid<=pr)) или подобное..


Спасибо! идею понял.

А если ситуация другая. Есть на графике горизонтальные линии с разными именами. Нужно чтобы скрипт вычислил какой линии какая цена соответствует.

Причина обращения: