Скачать MetaTrader 5

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

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

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

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

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

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

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

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

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

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

Vasyl Nosal
18537
Vasyl Nosal 2015.12.24 23:23  
for(int i=ObjectsTotal()-1;i>=0;i--)

{ 

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

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

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

 

//+------------------------------------------------------------------+
//|                                                           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
42883
Dmitry Fedoseev 2015.12.27 00:04  
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 2015.12.27 23:56  
Dmitry Fedoseev:
Попробуйте так.
Спасибо, попробовал. К сожалению данная функция вообще никак не реагирует на изменение цвета прямоугольника. Все время выдает z=false. Подскажите кто знает как обнулить "i" для оператора "for" , чтобы с каждым новым тиком i=0 и процесс поиска начинался бы с начала. 
Dmitry Fedoseev
42883
Dmitry Fedoseev 2015.12.28 00:40  
Gerkl:
Спасибо, попробовал. К сожалению данная функция вообще никак не реагирует на изменение цвета прямоугольника. Все время выдает z=false. Подскажите кто знает как обнулить "i" для оператора "for" , чтобы с каждым новым тиком i=0 и процесс поиска начинался бы с начала. 
Разберитесь с самой проверкой цвета. Смысл в том, что как наткнулись на объект с нужным цветом, выскакиваем из цикла.
Gerkl
117
Gerkl 2015.12.28 04:05  

Не знаю, что я тут нахимичил, но вроде работает. решил использовать оператор 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 2015.12.28 04:10  

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

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