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

 

Есть ли возможность заставить оптимизатор сделать несколько проходов заместо одного ?

Или несколько форвардов заместо одного?

 

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

Подскажите, как сделать, чтобы рисовались все вертикальные линии, соответствующие заданным условиям. У меня сейчас так:

if(условие 1)
      {
       if(условие 2)  VLine();
      }

 Рисует только первую линию. Думаю, что надо задать цикл, но не понимаю какой. Помогите пожалуйста.

 
novic #:

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

Подскажите, как сделать, чтобы рисовались все вертикальные линии, соответствующие заданным условиям. У меня сейчас так:

 Рисует только первую линию. Думаю, что надо задать цикл, но не понимаю какой. Помогите пожалуйста.

Что скрывается за VLine() ?
 
Tretyakov Rostyslav #:
Что скрывается за VLine() ?
bool VLine(const long            chart_ID=0,        // ID графика 
                 const string          name="VLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 datetime              time=0,            // время линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если время линии не задано, то проводим ее через последний бар 
   if(!time) 
      time=TimeCurrent(); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим вертикальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать вертикальную линию! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  }  
 
novic #:

Тогда так

if(условие 1)
      {
       if(объекта нет)  VLine();
      }
if(условие 2)
      {
       if(объекта нет)  VLine();
      }
 
Tretyakov Rostyslav #:

Тогда так

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

И удалять построенную линию не хочу. Надо, чтобы все линии оставались.

 
Ivan Butko #:

Точно! Попробую, спасибо!

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

 
novic #:
не понимаю. после построения первой линии объект всегда есть.

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

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

 
novic #:

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

И удалять построенную линию не хочу. Надо, чтобы все линии оставались.

Нашел скрипт построения пятничных вертикальных линий. Там задействован цикл

int start()
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
if(!f)return(0); f=0;
for(int i=Counted_Bars;i>0;i--)
    if(TimeDayOfWeek(Time[i])-TimeDayOfWeek(Time[i-1])>1)
       VLine(i);
        
return(0);
}//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+

void VLine(int ls)
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
string name= Times( ls);
j++; ArrayResize(Name,j); Name[j-1]= name;
if(ObjectFind( name)==-1)ObjectCreate(name, OBJ_VLINE,0,Time[ls],0);
ObjectSet(name, OBJPROP_BACK,1);
ObjectSet(name, OBJPROP_TIME1, Time[ls]);
ObjectSet(name, OBJPROP_COLOR, Color);
ObjectSet(name, OBJPROP_STYLE, type_line);
return(0);
}

но как его применить для себя не понимаю.

 
Tretyakov Rostyslav #:

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

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

Прочитал:  ObjectFind

Функция возвращает индекс окна, которому принадлежит искомый объект

Что это мне дает? И как задавать разные имена в процессе создания линии?

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