Индикаторы: Daily Change Text

 

Daily Change Text:

Индикатор показывает на дневном таймфрейме 'Daily Change'

Daily Change Text

Автор: Vladimir Karputov

 
подумал что в mql5 завезли функцию которая возвращает % daily change и ... а с какой целью столько лишнего в коде? эту задачу можно было решить в пару строк )))
 
#property indicator_chart_window
//--- input parameters
input int      Depth=3;   //количество дней
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   MqlDateTime stm;
   ObjectsDeleteAll(0,"dc*",0,-1);
   if(_Period==PERIOD_D1)
     {
      TimeToStruct(TimeCurrent(),stm);
      int i=rates_total-Depth+1;
      while(i<=rates_total)
        {
         datetime ltm=StructToTime(stm);
         int shift=rates_total-iBarShift(NULL,0,ltm,true)-1;
         ObjectCreate(0,"dc"+i,OBJ_TEXT,0,ltm,high[shift]+(high[shift]-low[shift])/30);
         ObjectSetString(0,"dc"+i,OBJPROP_TEXT,DoubleToString((close[shift]-close[shift-1])*100.0/close[shift-1],2)+" %");
         ObjectSetDouble(0,"dc"+i,OBJPROP_ANGLE,90.0);
         ObjectSetInteger(0,"dc"+i,OBJPROP_ANCHOR,ANCHOR_LEFT);
         stm.day--;
         i++;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"dc*",0,-1);
  }
//+------------------------------------------------------------------+в 

как-то так ;)

 
Roman Vladimirovich #:

как-то так ;)

Код в стиле старого терминала - выстрелил, а там хоть не расцветай.

Нет ни одной настройки. Нет ни одной проверки на ошибки. Нет даже намека на проверку в какую строну был дневной прирост: в "+" или в "-", постоянное создание объектов вместо модификации существующих ...

Но тем не менее спасибо - в качестве наглядного примера бездумности программирования в стиле старого терминала.

 
      while(i<=rates_total)
        {
         datetime ltm=StructToTime(stm);
         int shift=rates_total-iBarShift(NULL,0,ltm,true)-1;
         double dc=(close[shift]-close[shift-1])*100.0/close[shift-1];
         ObjectCreate(0,"dc"+i,OBJ_TEXT,0,ltm,high[shift]+(high[shift]-low[shift])/30);
         ObjectSetString(0,"dc"+i,OBJPROP_TEXT,DoubleToString(dc,2)+" %");
         if(dc>0) ObjectSetInteger(0,"dc"+i,OBJPROP_COLOR,clrBlue);
         ObjectSetDouble(0,"dc"+i,OBJPROP_ANGLE,90.0);
         ObjectSetInteger(0,"dc"+i,OBJPROP_ANCHOR,ANCHOR_LEFT);
         stm.day--;
         i++;
        }
 
Vladimir Karputov #:

Код в стиле старого терминала - выстрелил, а там хоть не расцветай.

Нет ни одной настройки. Нет ни одной проверки на ошибки. Нет даже намека на проверку в какую строну был дневной прирост: в "+" или в "-" , постоянное создание объектов вместо модификации существующих ...

Но тем не менее спасибо - в качестве наглядного примера бездумности программирования в стиле старого терминала.

настройка ровно одна - количество дней. для этой задачи больше не требуется. в какую сторону был дневной прирост указывает знак "-" .... для большей наглядности +1 строка в код и надписи цветные.
да, ошибки, сейчас только подумал что нужно проверять если числа попадают на начало месяца, ну еще строка. о каких ошибках я мог еще не вспомнить за 2 минуты написания кода?
 
Roman Vladimirovich #:
настройка ровно одна - количество дней. для этой задачи больше не требуется. в какую сторону был дневной прирост указывает знак "-" .... для большей наглядности +1 строка в код и надписи цветные.
да, ошибки, сейчас только подумал что нужно проверять если числа попадают на начало месяца, ну еще строка. о каких ошибках я мог еще не вспомнить за 2 минуты написания кода?

Вспоминать не нужно, нужно знать. Например постоянное создание объекта вместо его модификации - это очень дорого. 

 
Vladimir Karputov #:

Вспоминать не нужно, нужно знать. Например постоянное создание объекта вместо его модификации - это очень дорого. 

удалить и создать дорого? для кого? компилятор и тестер почему то так не считают, судя по затратам памяти и времени.   
 
Roman Vladimirovich #:
удалить и создать дорого? для кого? компилятор и тестер почему то так не считают, судя по затратам памяти и времени.   

Пожалуйста пишите в ветку "Вопросы от начинающих ...". Заодно там подскажут, что предложение начинается в Заглавной буквицы.

 
Vladimir Karputov #:

Пожалуйста пишите в ветку "Вопросы от начинающих ...". Заодно там подскажут, что предложение начинается в Заглавной буквицы.

Дорого обходится использование массивов там где это не требуется. Кусок кода, который у вас написан под комментарием //-- current bar после цикла, и параметры InpAnchor и  InpCorner тоже не дешевые, потому что ни на что не влияют. Дорого ровно на 2мб памяти (для такого обьёма кода это наверное даже непростительно дорого), и увеличение времени исполнения более чем в 2 раза.

 
Roman Vladimirovich #:

Дорого обходится использование массивов там где это не требуется. Кусок кода, который у вас написан под комментарием //-- current bar после цикла, и параметры InpAnchor и  InpCorner тоже не дешевые, потому что ни на что не влияют. Дорого ровно на 2мб памяти (для такого обьёма кода это наверное даже непростительно дорого), и увеличение времени исполнения более чем в 2 раза.

Вы вправе иметь собственное мнение и писать код как Вам вздумается.