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

 
Tretyakov Rostyslav #:

Я Вам ответил

а Вы что - " не понимаю. после построения первой линии объект всегда есть. "

я написал -

"Чтобы создавать несколько однотипных объектов, надо давать разные имена.

И почитай что такое ObjectFind"

Но если у Вас нет желания прочитать пример в справке, то никто не захочет пересказывать Вам.

И всё же, отбросим эмоции и попробуем разобраться: вот пример из  ObjectFind

if(ObjectFind(0,"line_object2")!=win_idx) return(0);

И что мне дает подтверждение, что искомый объект находится в главном окне? Я ведь его сам туда поместил при создании.

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

 
novic #:

И всё же, отбросим эмоции и попробуем разобраться: вот пример из  ObjectFind

И что мне дает подтверждение, что искомый объект находится в главном окне? Я ведь его сам туда поместил при создании.

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

Для начала, покажи рабочий код создания первой линии.
 
novic #:


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

Задать чтоб именем служила дата того бара на котором создаётся объект, тогда имена будут разные. В скрипте, что вы показывали есть пример чему равен name;

 
to_ha #:

Задать чтоб именем служила дата того бара на котором создаётся объект, тогда имена будут разные. В скрипте, что вы показывали есть пример чему равен name;

скрипт компилируется с ошибкой и четырьмя предупреждениями. Ошибку убрал, убрав return(0), а с предупреждениями затык. И не понимаю, для чего такая расширенная функция, как её адаптировать для периода Н1.
 
novic #:
 как её адаптировать для периода Н1.

Шото типа этого???

А что на Н1 должно быть???

Это на базе скрипта вашего

void OnStart()
  {
   
   for(int i=Bars-1; i>0; i--)
      if(TimeDayOfWeek(Time[i])-TimeDayOfWeek(Time[i-1])>1)
         VLine(IntegerToString(i),Time[i]);
   
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void VLine(string name,datetime time)
  {
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  // if(ObjectFind(name)==-1)
      ObjectCreate(name, OBJ_VLINE,0,0,0);
  ObjectSetInteger(0,name,OBJPROP_TIME,time); 
   
  }
//+------------------------------------------------------------------+
 
to_ha #:

Шото типа этого???

А что на Н1 должно быть???

Это на базе скрипта вашего

Нет. Время надо выразить строкой и добавить к имени линии.

Если не заморачиваться сильно, то примерно так

void VLine(string name)
  {
   name += (string)TimeCurrent();
   if(ObjectFind(name) < 0)
      ObjectCreate(name, OBJ_VLINE,0,0,0);
   
  }

Либо взять время бара. Без разницы…

 
Valeriy Yastremskiy #:

Да нормально все, хорошо что спред не сильно большой, а был бы большой еще большие чудеса увидел бы. Дело в том что машки считаются по цене бид, она ниже, а открываешься по Аск, она выше))) А закрываешься по Бид, и там все правильно. Что бы приблизить к реальному, в  условие открытия надо добавить спред на этом тике, и условие будет выполнятся, когда цена аск действительно опустится ниже, если конечно все данные будут верны.)

Спасибо за ответ, имею ввиду!

 
to_ha #:

Шото типа этого???

А что на Н1 должно быть???

Это на базе скрипта вашего

Линии рисует, но по каким условиям, не понятно и почему-то только в 23-00 по пятницам. Как сделать, чтобы рисовал например во время образования условия if(cl1>op1 && cl2<op2 && cl3>op3) ?
 
Alexey Viktorov #:

Нет. Время надо выразить строкой и добавить к имени линии.

Если не заморачиваться сильно, то примерно так

Либо взять время бара. Без разницы…

Компиляция вашего варианта выдает ошибку: 'VLine' - wrong parameters count.