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

 
Здравствуйте!
Подскажите пожалуйста, в какой теме кодобазы есть пример алгоритма который рисует цифирьки так,чтобы внизу и/или вверху окна выводились номера индексов баров? Как на картинке.
Всё дело в том, что графические объекты OBJ_TEXT крапится к цене и времени, а OBJ_LABEL к координатам окна в пикселях. Только вот как это объединить?
 
Leo59:
Здравствуйте!
Подскажите пожалуйста, в какой теме кодобазы есть пример алгоритма который рисует цифирьки так,чтобы внизу и/или вверху окна выводились номера индексов баров? Как на картинке.
Всё дело в том, что графические объекты OBJ_TEXT крапится к цене и времени, а OBJ_LABEL к координатам окна в пикселях. Только вот как это объединить?

Вам и нужно к цене, а цену указывать Higt или Low свечи, тогда объекты будут на местах

 
Vitaly Muzichenko:

Вам и нужно к цене, а цену указывать Higt или Low свечи, тогда объекты будут на местах

"внизу и/или вверху окна выводились номера индексов баров", а "указывать Higt или Low свечи" - это не "фокус".

 
Leo59:

"внизу и/или вверху окна выводились номера индексов баров", а "указывать Higt или Low свечи" - это не "фокус".

Это?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
  • www.mql5.com
В этом разделе представлены примеры для работы со свойствами графика. Для каждого свойства приведены одна или две законченные функции, которые позволяют задавать/получать значение этого свойства. Эти функции можно использовать в своих MQL5 программах как есть. На рисунке показана графическая панель для наглядной демонстрации того, как изменение...
 
Vitaly Muzichenko:

Это?

Я этот раздел уже не первый год вижу. Да только мозгов моих хватает только на это:
#property  indicator_chart_window

extern int History = 35;                                              // Сколько баров мы имеем ввиду
extern int Multiple = 5;                                              // Кратность отображаемой разметки

color    Color=0;
color    Color_multiple=Moccasin;                                     // Цвет индексов кратных "Multiple"
color    Color_between=MintCream;                                     // Цвет индексов промежуточных 
string   name="";
string   Text="";
int      Font_size=0;
int      Font_size_multiple=14;                                       // Размер шрифта индексов кратных "Multiple"
int      Font_size_between=8;                                         // Размер шрифта индексов промежуточных

bool     Back=true;                                                   //--- отобразим на переднем (false) или заднем (true) плане. Если (true), то подсветки дат не выводится
string   Font="Arial";                                                // Шрифт
double   Angle=270.0;                                                 // Угол наклона в градусах

int      Style=STYLE_DOT;                                             // Для всех - стиль пунктир
int      Width=1;                                                     // Толщина линии

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| Custom indicator initialization function                    F  1 | int init()
//+------------------------------------------------------------------+
int init()
   {
//    IndicatorShortName(IN + " (" + ")");                              // Короткое имя индикатора
    return(INIT_SUCCEEDED);                                           // Успешная инициализация приложения
   }

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| expert deinitialization function                             F 2 | int deinit()
//+------------------------------------------------------------------+
int deinit() // Время исполнения специальной функции deinit() ограничено периодом 2,5 секунды.
   {
    ObjectsDeleteAll(0, "label", 0);                                  // Идентификатор графика, префикс имени объекта, индекс окна
    return(0);                                                        // Выход из deinit()
   }

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//+------------------------------------------------------------------+
//| Custom indicator iteration function                         F  3 | int start()
//+------------------------------------------------------------------+
int start()
   {
    int i=0;
    int limit=Bars-IndicatorCounted()-1; 
    if(limit>1) limit=MathMin(Bars, History+(History==0)*Bars)-1;
    
    for(i=0; i<History; i++)
        {
         name = "label "+i;
         Text = DoubleToStr(i,0);
          
         if(MathMod(i, Multiple) == 0)                                     // MathMod() Возвращает вещественный остаток от деления двух чисел (i/Multiple).
             {
              Color = Color_multiple;
              Font_size = Font_size_multiple;

              if(ObjectFind(0, name)==-1)                                  // Если объект "name" не найден
                  {
                   ObjectCreate(0,name,OBJ_VLINE,0,Time[i],0);             // Создаем объект..
                   ObjectSetInteger(0,name,OBJPROP_STYLE,Style);           //--- установим стиль отображения линии
                   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);           //--- установим толщину линии
                   ObjectSetInteger(0,name,OBJPROP_COLOR,Color);           //--- установим цвет
                   ObjectSetString(0,name,OBJPROP_TEXT,Text);              //--- установим текст
                   ObjectSetString(0,name,OBJPROP_FONT,Font);              //--- установим шрифт текста
                   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,Font_size);    //--- установим размер шрифта
                   ObjectSetDouble(0,name,OBJPROP_ANGLE,Angle);            //--- установим угол наклона текста
                   // Для отображения текстового описания объекта необходимо включить галочку опции "Показывать описания объектов" в окне Графики->Свойства финансового инструмента (F8) > Общие.         
                   ObjectSetInteger(0,name,OBJPROP_BACK, Back);            //--- отобразим на переднем (false) или заднем (true) плане
                  }
               else                                                        // Если объект "name" найден
                  {
                   ObjectMove(0,name, 0, Time[i], 0);                     // Сообщение новых координат. 
                  }
             }
//         else
//             {
//              Color = Color_between;
//              Font_size = Font_size_between;
//
//              if(ObjectFind(0, name)==-1)                                  // Если объект "name" не найден
//                  {
//                   ObjectCreate(0,name,OBJ_VLINE,0,Time[i],0);             // Создаем объект..
//                   ObjectSetInteger(0,name,OBJPROP_STYLE,Style);           //--- установим стиль отображения линии
//                   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);           //--- установим толщину линии
//                   ObjectSetInteger(0,name,OBJPROP_COLOR,Color);           //--- установим цвет
//                   //ObjectSetString(0,name,OBJPROP_TEXT,Text);              //--- установим текст
//                   //ObjectSetString(0,name,OBJPROP_FONT,Font);              //--- установим шрифт текста
//                   //ObjectSetInteger(0,name,OBJPROP_FONTSIZE,Font_size);    //--- установим размер шрифта
//                   ObjectSetDouble(0,name,OBJPROP_ANGLE,Angle);            //--- установим угол наклона текста
//                   // Для отображения текстового описания объекта необходимо включить галочку опции "Показывать описания объектов" в окне Графики->Свойства финансового инструмента (F8) > Общие.         
//                   ObjectSetInteger(0,name,OBJPROP_BACK, Back);            //--- отобразим на переднем (false) или заднем (true) плане
//                  }
//               else                                                        // Если объект "name" найден
//                  {
//                   ObjectMove(0,name, 0, Time[i], 0);                     // Сообщение новых координат. 
//                  }
//             }
        }
    return(0);
   }

 
Leo59:
Здравствуйте!
Подскажите пожалуйста, в какой теме кодобазы есть пример алгоритма который рисует цифирьки так,чтобы внизу и/или вверху окна выводились номера индексов баров? Как на картинке.
Всё дело в том, что графические объекты OBJ_TEXT крапится к цене и времени, а OBJ_LABEL к координатам окна в пикселях. Только вот как это объединить?

С помощью этих функций ChartTimePriceToXY и ChartXYToTimePrice можно хоть куда расположить

 
Leo59:
Здравствуйте!
Подскажите пожалуйста, в какой теме кодобазы есть пример алгоритма который рисует цифирьки так,чтобы внизу и/или вверху окна выводились номера индексов баров? Как на картинке.
Всё дело в том, что графические объекты OBJ_TEXT крапится к цене и времени, а OBJ_LABEL к координатам окна в пикселях. Только вот как это объединить?

Зачем циферки на графике? В документации есть готовое решение как посмотреть номер бара

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
//| Custom indicator initialization function                         | //| Custom indicator iteration function                              |
 
Leo59:
Я этот раздел уже не первый год вижу. Да только мозгов моих хватает только на это:

Ненавязчивая рекомендация:

Если-уж пытаетесь освоить mql5, постарайтесь избавиться от extern, int init(), int deinit() и int start()

замените их полноценными input, int OnInit(), void OnDeinit(const int reason) и void OnTick()

 

Приветствую!


Подскажите, как сделать массив инпутов 

пытаюсь вот так:

input double   Df_1 = 0.8;

input double   Df_2 = 0.1;

input double   Df_3= 0.3;


const double Df[3] = {Df_1 ,Df_2 ,Df_3 };


но выдает ошибку :

'Df_1' - constant expression required 

 'Df_2' - constant expression required 

 'Df_3' - constant expression required 

ссылаясь на строгу инициализации массива
 
Anttonnio:

Приветствую!


Подскажите, как сделать массив инпутов 

пытаюсь вот так:

input double   Df_1 = 0.8;

input double   Df_2 = 0.1;

input double   Df_3= 0.3;


const double Df[3] = {Df_1 ,Df_2 ,Df_3 };


но выдает ошибку :

'Df_1' - constant expression required 

 'Df_2' - constant expression required 

 'Df_3' - constant expression required 

ссылаясь на строгу инициализации массива

Массив нужно инициализировать константами.

Если хотите его заполнить input-параметрами, то сначала объявите его, а потом поэлементно заполните.