Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1482

 
Novichokkk #:

Если

ExtADXPeriod=14

получается ExtADXPeriod<<1 равносильно значению 9 

равносильно 28 (14<<1 всё равно что 14*2, пока разрядов хватает)

не обращайте внимания, всё равно компилятор заведомые const выражения посчитает при компиляции и в код они не попадут. Только их результат

это могла быть преждевременная оптимизация или непосредственный автор хотел показать что крутЪ

 
Maxim Kuznetsov #:

равносильно 28 (14<<1 всё равно что 14*2, пока разрядов хватает)

не обращайте внимания, всё равно компилятор заведомые const выражения посчитает при компиляции и в код они не попадут. Только их результат

это могла быть преждевременная оптимизация или непосредственный автор хотел показать что крутЪ

1-Почему 28?

14 раскладываем в двоичную форму. Будет 1110.

Смещаем на один бит влево, получится 0111, переводим обратно в десятичную, будет 9. 1*1+1*2+1*4=7 (ошибся не 9).


2-Все же хотелось бы конкретный пример в данном случае, что правильнее вставить в такую конструкцию вместо ExtADXPeriod<<1 ?

 
Novichokkk #:

14 раскладываем в двоичную форму. Будет 1110.

Смещаем на один бит влево, получится 0111,

у нас с вами разные "влево" :-)

1110<<1 := 11100

 
Maxim Kuznetsov #:

у нас с вами разные "влево" :-)

1110<<1 := 11100

В интернете читал. Это для 32 бит я так понимаю, для 16 то же самое, на разряд ведь ничего не перескакивало. Но я только учусь, наверное Вы правы.

Не суть, это так, попутно вникал. Удивила такая конструкция в терминале. Это даже не из кодбазы индикатор, из терминала из папки Examples.

Файлы:
8888.jpg  49 kb
 

Как изменить старую конструкцию?

ObjectSetText("Maximum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5),8,"Arial",Red);

Тут всё понято.  Такой-то объект, так-то описываем, таким-то размером шрифта, тип шрифта, цвет.

Но это из старого.

Почитал чем заменяется 

ObjectSetText

На

ObjectGetInteger, ObjectSetString, ObjectSetInteger StringLen

Но Во всех этих функциях нет таких параметров как в ObjectSetText. 

Документация по MQL5: Графические объекты / ObjectGetInteger
Документация по MQL5: Графические объекты / ObjectGetInteger
  • www.mql5.com
ObjectGetInteger - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Был такой код на мкл4

int OnInit()
  {
   SetIndexBuffer(0,H);
   SetIndexStyle(0,2);
   SetIndexBuffer(1,L);
   SetIndexStyle(1,2);

   if(ObjectCreate("Maximum",OBJ_LABEL,0,0,0))
     {
      ObjectSet("Maximum",OBJPROP_XDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_YDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_CORNER,1);
     }
   ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

   if(ObjectCreate("Minimum",OBJ_LABEL,0,0,0))
     {
      ObjectSet("Minimum",OBJPROP_XDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_YDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_CORNER,3);
     }
   ObjectSetText("Minimum",DoubleToStr(WindowPriceMin(),4),8,"Arial",Blue);

   return(0);
  }



Переделал так на мкл5, только ObjectSetText не понял как переделать.


int OnInit()
  {
   SetIndexBuffer(0, H, INDICATOR_DATA);
   PlotIndexSetInteger(1,5,0);
   SetIndexBuffer(1, L, INDICATOR_DATA);
   PlotIndexSetInteger(2,5,0);

   if(ObjectCreate(0,"Maximum",OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(0,"Maximum",OBJPROP_XDISTANCE,1);
      ObjectSetInteger(0,"Maximum",OBJPROP_YDISTANCE,1);
      ObjectSetInteger(0,"Maximum",OBJPROP_CORNER,1);
     }
   ObjectSetText("Maximum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5),8,"Arial",Red);

   if(ObjectCreate(0,"Minimum",OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(0,"Minimum",OBJPROP_XDISTANCE,1);
      ObjectSetInteger(0,"Minimum",OBJPROP_YDISTANCE,1);
      ObjectSetInteger(0,"Minimum",OBJPROP_CORNER,3);
     }
   ObjectSetText("Minimum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MIN,0),5),8,"Arial",Blue);

   return(0);
  }
 
Novichokkk #:

Как изменить старую конструкцию?

Тут всё понято.  Такой-то объект, так-то описываем, таким-то размером шрифта, тип шрифта, цвет.

Но это из старого.

Почитал чем заменяется 

На

ObjectGetInteger, ObjectSetString, ObjectSetInteger StringLen

Но Во всех этих функциях нет таких параметров как в ObjectSetText. 

Шрифт, размер, цвет, цвет фона и прочее ставятся отдельными вызовами https://www.mql5.com/ru/docs/constants/objectconstants/enum_object_property

 
JRandomTrader #:

Шрифт, размер, цвет, цвет фона и прочее ставятся отдельными вызовами https://www.mql5.com/ru/docs/constants/objectconstants/enum_object_property

Получается вместо

ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

Нужно делать так?

    ObjectSetString(0,"Maximum",OBJPROP_TEXT,DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5)); // описание-что вставляем в объект "Maximum"
    ObjectSetString(0,"Maximum",OBJPROP_FONTSIZE,8);    // размер шрифта описания                                      
    ObjectSetString(0,"Maximum",OBJPROP_FONT,"Arial");  // какой шрифт
    ObjectSetString(0,"Maximum",OBJPROP_COLOR,Red);     // цвет шрифта
 
Novichokkk #:

Получается вместо

Нужно делать так?

OBJPROP_FONTSIZE и OBJPROP_COLOR - через ObjectSetInteger()

Вместо DoubleToString() иногда удобнее StringFormat(), можно более гибко управлять форматом.

 

Почему такой скрипт выводит 196

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
//---
   Alert((int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR));
   
  }
//+------------------------------------------------------------------+

А такой 104

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
//---
   Alert(CHART_FIRST_VISIBLE_BAR);
   
  }
//+------------------------------------------------------------------+

Результат ведь должен быть одинаковый.