Вопросы по коду. - страница 7

 
Sergey Gridnev #:
Потому что нумерация начинается с нуля.

Сергей, поясните, пожалуйста.


В этом случае нужно писать так -  for(int i=0; i<=OrdersTotal(); i++)

а в обратном порядке так  - for(int i=OrdersTotal()-1; i>=0; i--) и в обоих случаях будут перебраны все ордера.

Я правильно понял?

 
gnesnyi #:

Сергей, поясните, пожалуйста.


В этом случае нужно писать так -  for(int i=0; i<=OrdersTotal(); i++)

а в обратном порядке так  - for(int i=OrdersTotal()-1; i>=0; i--) и в обоих случаях будут перебраны все ордера.

Я правильно понял?

for(int i=0; i<OrdersTotal(); i++)

 
gnesnyi #:

Сергей, поясните, пожалуйста.


В этом случае нужно писать так -  for(int i=0; i<=OrdersTotal(); i++)

а в обратном порядке так  - for(int i=OrdersTotal()-1; i>=0; i--) и в обоих случаях будут перебраны все ордера.

Я правильно понял?

Прямой перебор:
for(i=0; i<OrdersTotal(); i++) {}

Обратный:
for(i=OrdersTotal()-1; i>=0;i--) {}
Можно так:
for(i=OrdersTotal(); --i>=O;) {} 
И так:
for(i=OrdersTotal(); i-- >0;) {}
 

Судя по всему я не совсем корректно написал код:

if(ObjectGet(name,OBJPROP_COLOR)==clrYellow && (int)ObjectGet(name,OBJPROP_STYLE)==0 &&  ObjectGet(name,OBJPROP_TYPE)==2) {

            nameNew=StringSubstr(ObjectName(i), 0, 6);  //Print("   Обрезали имя найденного объекта - ",nameNew);

            nameNew=StrToDouble(DoubleToStr(nameNew,0)+1);  //Print("   Получили новое имя - ",nameNew);

После компиляции мне было сказано, что я троечник вот такими словами - implicit conversion from 'string' to 'number'.

Что сделать, чтобы перейти в отличники?

P.S. 

Изначально имя объекта состоит только из цифр без каких либо символов.


 
gnesnyi #:

Судя по всему я не совсем корректно написал код:

if(ObjectGet(name,OBJPROP_COLOR)==clrYellow && (int)ObjectGet(name,OBJPROP_STYLE)==0 &&  ObjectGet(name,OBJPROP_TYPE)==2) {

            nameNew=StringSubstr(ObjectName(i), 0, 6);  //Print("   Обрезали имя найденного объекта - ",nameNew);

            nameNew=StrToDouble(DoubleToStr(nameNew,0)+1);  //Print("   Получили новое имя - ",nameNew);

После компиляции мне было сказано, что я троечник вот такими словами - implicit  conversion from 'string' to 'number'.

Что сделать, чтобы перейти в отличники?



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

implicit  conversion from 'string' to 'number' = неявное  преобразование  из  "строки"  в  "число". 


Во-вторых, взглянуть на строку для которой это сообщение и понять, где же происходит это "преобразование" (а в программировании оно называется - приведение типов).


Подсказка: посмотрите в помоще параметры каких типов ожидает получить функция DoubleToStr.

 
PapaYozh #:


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

implicit  conversion from 'string' to 'number' = неявное  преобразование  из  "строки"  в  "число". 


Во-вторых, взлянуть на строку для которой это сообщение и понять, где же происходит это "преобразование" (а в программировании оно называется - приведение типов).


Подсказка: посмотрите в помоще параметры каких типов ожидает получить функция DoubleToStr.

Оооо, да я двоечник, оказывается!

Спасибо,  PapaYozh, разобрался.

 

Вот что я навоял. Цель: найти объект на другом графике с таймфреймом М1.

for(long chart_id = ChartFirst(); chart_id != -1; chart_id = ChartNext(chart_id))

     {      

      ENUM_TIMEFRAMES period = ChartPeriod(chart_id);

      if(period == PERIOD_M1) 

         Print("  Нашли chart_id - ",chart_id); 

         int obj_total = ObjectsTotal(chart_id, 0, OBJ_HLINE); 

         string name; 

         for(int i=0; i<obj_total; i++) 

         { 

            name = ObjectName(i); 

            if(ObjectGet(name,OBJPROP_COLOR)==clrWhite &&  ObjectGet(name,OBJPROP_TYPE)==OBJ_HLINE) 

            {

               Print("   Нашли объект", name);

            }

         }     

     }

В итоге работает только до нахождения  chart_id нужного графика, а объект не ищет.

Подскажите в чем ошибка, пожалуйста.

 
Это MQL4?
 
gnesnyi #:

Вот что я навоял. Цель: найти объект на другом графике с таймфреймом М1.

for(long chart_id = ChartFirst(); chart_id != -1; chart_id = ChartNext(chart_id))
     {      
      ENUM_TIMEFRAMES period = ChartPeriod(chart_id);
      if(period == PERIOD_M1) 
         Print("  Нашли chart_id - ",chart_id); 
         int obj_total = ObjectsTotal(chart_id, 0, OBJ_HLINE); 
         string name; 
         for(int i=0; i<obj_total; i++) 
         { 
            name = ObjectName(i); 
            if(ObjectGet(name,OBJPROP_COLOR)==clrWhite &&  ObjectGet(name,OBJPROP_TYPE)==OBJ_HLINE) 
            {
               Print("   Нашли объект", name);
            }
         }     
     }

В итоге работает только до нахождения  chart_id нужного графика, а объект не ищет.

Подскажите в чем ошибка, пожалуйста.

1. Научитесь вставлять код.

2. Привыкайте использовать функции языка MQL5.

Вот так работает

  for(long chart_id = ChartFirst(); chart_id != -1; chart_id = ChartNext(chart_id))
   {
    ENUM_TIMEFRAMES period = ChartPeriod(chart_id);
    if(period == PERIOD_M1)
      Print("  Нашли chart_id - ",chart_id);
    int obj_total = ObjectsTotal(chart_id, 0, OBJ_HLINE);
    string name;
    for(int i=0; i<obj_total; i++)
     {
      name = ObjectName(chart_id, i, 0, OBJ_HLINE);
      if(ObjectGetInteger(chart_id, name, OBJPROP_COLOR) == clrWhite &&  ObjectGetInteger(chart_id, name, OBJPROP_TYPE) == OBJ_HLINE)
       {
        Print("   Нашли объект", name);
       }
     }
   }

3. Если в ObjectsTotal указываете тип объекта, то обязательно надо указывать тип объекта в функциях получения свойств объекта.

 
Alexey Viktorov #:

1. Научитесь вставлять код.

2. Привыкайте использовать функции языка MQL5.

Вот так работает

3. Если в ObjectsTotal указываете тип объекта, то обязательно надо указывать тип объекта в функциях получения свойств объекта.

Алексей, спасибо! В документации этого нюанса нет.

Обожаю писать код - ломаешь голову целый день, потом добавил два слова и счастлив как ребенок:)

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