Скачать MetaTrader 5

Помогите разобраться.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Gerkl
117
Gerkl  
Здравствуйте уважаемые форумчане. Я новичок в програмировании но хотелось бы научиться. Прочитал весь учебник, полазил по форуму но ответ на волнующий сеня вопрос так и не нашел. Мне нужно найти решение к чледующей задаче:
На графике имеются несколько прямоугольников разных цветов, как из них выбрать нужный мне прямоугольник по определенному цвету (цвет я определяю заранее),  а также получить дополнительные данные этого прямоугольника типа цена1, цена2 и т.д. 
Прямоугольники на график наношу вручную.
помогите пожалуйста с кодом или посоветуйте где поискать.
Заранее спасибо.
Andrey F. Zelinsky
33090
Andrey F. Zelinsky  

каждый графический объект имеет свойства -- свойства можно как задавать, так и считывать.

Логика вашей задачи такая:

-- перебираете на графике все объекты

-- ищите нужный заданного типа (прямоугольник) и цвета

-- дальше получаете тот параметр что вам нужен

Все команды по работе с объектами -- к каждой команде есть пример -- в справке (например, для МТ4, для МТ5 аналогично) 

Пример перебора объектов https://docs.mql4.com/ru/objects/objectstotal 

Пример считывания свойства  https://docs.mql4.com/ru/objects/objectget .

Vasyl Nosal
19297
Vasyl Nosal  
for(int i=ObjectsTotal()-1;i>=0;i--)

{ 

if(ObjectType==прямугол && ObjectGetInteger(0,name,OBJPROP_COLOR)==clrYellow) ...

} 
Gerkl
117
Gerkl  
Спасибо за информацию. Но все это я уже пробовал. Фунция реагирует на измененте цвета или только первого объекта или только последнего. Необходимо как то обнулить интерации что бы с каждым новым тиком поиск начинался заного. Одним простым оперетором здесь не обойтись. Будем думать дальше как создать отдельную функцию по нахождению нужного объекта из множества. 
Vladimir Karputov
Модератор
68781
Vladimir Karputov  
Gerkl:
Спасибо за информацию. Но все это я уже пробовал. Фунция реагирует на измененте цвета или только первого объекта или только последнего. Необходимо как то обнулить интерации что бы с каждым новым тиком поиск начинался заного. Одним простым оперетором здесь не обойтись. Будем думать дальше как создать отдельную функцию по нахождению нужного объекта из множества. 
Может пора показать свой код? 
Gerkl
117
Gerkl  

Да показывать то в общем и нечего. Я же говорю, что я новичок.

 

//+------------------------------------------------------------------+
//|                                                           SD.mq4 |
//|                                           Copyright 2015,        |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, "
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
input color    zone=clrSilver; //Trading Zone

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---  
  string obj_name;
  color obj_color;
  int obj_total=ObjectsTotal();
  int i;
  
     for (i=ObjectsTotal()-1;i>=0;i--)// last rectangle
         {
         obj_name=ObjectName(i);
         obj_color=ObjectGet(obj_name,OBJPROP_COLOR);
                            if (ObjectGetInteger(0,obj_name,OBJPROP_COLOR)==zone)
               Comment(i,"zone found",obj_name);
           else 
           
               Comment ("No zones");
                     
         }
         Sleep(3000);
           
         
//---
  }
//+------------------------------------------------------------------+
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Dmitry Fedoseev
46929
Dmitry Fedoseev  
boolz=false;   
  
for (i=ObjectsTotal()-1;i>=0;i--)// last rectangle
     {
         obj_name=ObjectName(i);
         obj_color=ObjectGet(obj_name,OBJPROP_COLOR);
         if (ObjectGetInteger(0,obj_name,OBJPROP_COLOR)==zone){
           z=true; 
           break;
         }
     }
}

if(z)Comment(i,"zone found",obj_name);
else 
Comment ("No zones");
Попробуйте так.
Gerkl
117
Gerkl  
Dmitry Fedoseev:
Попробуйте так.
Спасибо, попробовал. К сожалению данная функция вообще никак не реагирует на изменение цвета прямоугольника. Все время выдает z=false. Подскажите кто знает как обнулить "i" для оператора "for" , чтобы с каждым новым тиком i=0 и процесс поиска начинался бы с начала. 
Dmitry Fedoseev
46929
Dmitry Fedoseev  
Gerkl:
Спасибо, попробовал. К сожалению данная функция вообще никак не реагирует на изменение цвета прямоугольника. Все время выдает z=false. Подскажите кто знает как обнулить "i" для оператора "for" , чтобы с каждым новым тиком i=0 и процесс поиска начинался бы с начала. 
Разберитесь с самой проверкой цвета. Смысл в том, что как наткнулись на объект с нужным цветом, выскакиваем из цикла.
Gerkl
117
Gerkl  

Не знаю, что я тут нахимичил, но вроде работает. решил использовать оператор While вместо  for. Первый шаг сделан. Спасибо всем за помощь. 

void OnTick()
  {
//---  
   string obj_name;
   color obj_color=clrNONE;
   int obj_total=ObjectsTotal(OBJ_RECTANGLE);
   bool z=false;
   int i=0;
   while(i<=obj_total)// last rectangle
     {

      obj_name=ObjectName(i);
      obj_color=ObjectGet(obj_name,OBJPROP_COLOR);
      i=i+1;
      if(ObjectType(obj_name)==OBJ_RECTANGLE && obj_color==zone_color)
        {
         z=true;
         
         if(z)
            break;
         else
            i=i+1;
        }
     }
   if(z)
      Comment(i,"zone found",obj_color);
   else
      Comment(i,"No zones");
  }
Gerkl
117
Gerkl  

Правда не знаю как исправить это предупреждение об ошибке. Вроде типы всех перенных совпадают.

Файлы:
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий