Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2172

 
Andrei Sokolov #:

Надеюсь есть какие-то фен-шуйные способы получения данных индикатором с другого тф.

Можете поискать - разработчики заявили, что это норма - примерно с год назад.

 
Grigori.S.B #:

Спасибо, но я уже все возможные варианты перебрал:

Всегда возвращает нижнюю цену.

Возможно я не правильно Вас понял, но у меня проблем не возникло

      if(ObjectFind(0,"REST")==0)
        {
         double a=ObjectGetDouble(0,"REST",OBJPROP_PRICE1);
         double b=ObjectGetDouble(0,"REST",OBJPROP_PRICE2);
         Print(DoubleToString(a,Digits),"/",DoubleToString(b,Digits));
        }
 

Всем доброго вечера и хорошего настроения!

Наступил ступор. Никак не пойму почему линия рисуется на всю ширину экрана монитора, а не по точкам привязки от нулевого и до 3 бара:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Line_In()
  {
   double arr_high[];
   ArraySetAsSeries(arr_high,true);
   int copy_high=CopyHigh(_Symbol,PERIOD_H1,0,3,arr_high);
   if(copy_high>0)
     {
      int candle_high=ArrayMaximum(arr_high,0,3);
      int copy_rates=CopyRates(_Symbol,PERIOD_H1,0,3,mql_rates);
      if(copy_rates>0)
        {
         ObjectDelete(0,"Line_In");
         ObjectCreate(0,"Line_In",OBJ_HLINE,0,mql_rates[candle_high].time,
                      mql_rates[candle_high].high,mql_rates[0].time,mql_rates[0].high);
         ObjectSetInteger(0,"Line_In",OBJPROP_COLOR,Red);
         ObjectSetInteger(0,"Line_In",OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,"Line_In",OBJPROP_WIDTH,2);
         ObjectSetInteger(0,"Line_In",OBJPROP_RAY_RIGHT,true);
        }
     }
  }

Точки привязки выделил желтым цветом. Горизонтальная линия, показывающая максимальный хай, должна рисоваться от 3 и до нулевого бара. Что написал ни так?

С уважением, Владимир.

 
MrBrooklin #:

Всем доброго вечера и хорошего настроения!

Наступил ступор. Никак не пойму почему линия рисуется на всю ширину экрана монитора, а не по точкам привязки от нулевого и до 3 бара:

Точки привязки выделил желтым цветом. Горизонтальная линия, показывающая максимальный хай, должна рисоваться от 3 и до нулевого бара. Что написал ни так?

С уважением, Владимир.

Потому, что это не трендовая линия и вторая координата тут как собаке сигнал поворота. Даже координата времени лишняя…

 
Alexey Viktorov #:

Потому, что это не трендовая линия и вторая координата тут как собаке сигнал поворота. Даже координата времени лишняя…

Привет, Алексей! Правильно ли тебя понял, что для двух точек привязки должна применяться только трендовая линия, а никак не горизонтальная?

С уважением, Владимир.

Добавлено.

Изменил код, часть проблемы ушла. Теперь осталась вторая часть проблемы. От третьего бара линия всё равно рисуется до края экрана монитора.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Line_In()
  {
   double arr_high[];
   ArraySetAsSeries(arr_high,true);
   int copy_high=CopyHigh(_Symbol,PERIOD_H1,0,3,arr_high);
   if(copy_high>0)
     {
      int candle_high=ArrayMaximum(arr_high,0,3);
      int copy_rates=CopyRates(_Symbol,PERIOD_H1,0,3,mql_rates);
      if(copy_rates>0)
        {
         ObjectDelete(0,"Line_In");
         ObjectCreate(0,"Line_In",OBJ_TREND,0,mql_rates[candle_high].time,
                      mql_rates[candle_high].high,mql_rates[0].time,mql_rates[candle_high].high);
         ObjectSetInteger(0,"Line_In",OBJPROP_COLOR,Red);
         ObjectSetInteger(0,"Line_In",OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,"Line_In",OBJPROP_WIDTH,2);
         ObjectSetInteger(0,"Line_In",OBJPROP_RAY_RIGHT,true);
        }
     }
  }

Как ограничить её длину нулевым баром?

С уважением, Владимир.

 
MrBrooklin #:

Привет, Алексей! Правильно ли тебя понял, что для двух точек привязки должна применяться только трендовая линия, а никак не горизонтальная?

С уважением, Владимир.

Добавлено.

Изменил код, часть проблемы ушла. Теперь осталась вторая часть проблемы. От третьего бара линия всё равно рисуется до края экрана монитора.

Как ограничить её длину нулевым баром?

С уважением, Владимир.

ObjectSetInteger(0,"Line_In",OBJPROP_RAY,false);
 

Алексей и Ростислав! ОГРОМНОЕ спасибо и дай бог Вам крепкого здоровья! Всё заработало так, как надо.

С уважением, Владимир.

 

Формулировка в Справочнике для меня, конечно, убийственная!

OBJPROP_RAY

Вертикальная линия продолжается на все окна графика

bool


Никогда бы в жизни не догадался, что это имеет какое-то отношение к ограничению продолжения трендовой линии.

С уважением, Владимир.

 

Всем доброго утра и хорошего настроения!

С целью продолжения самообучения задам ещё несколько вопросов про линии:

  1. Например, мне нужно нарисовать несколько линий (5, 10, 20 и т.д.) с разными точками привязки по уровню цены. Правильно ли понимаю, что для этого каждой линии нужно присвоить своё собственное имя? Если это так, то руками мне понятно, как присвоить новое имя, а автоматически в роботе, как это реализовать?
  2. Если потом нужно убрать с графика какую-то линию, то перебирать все имена в цикле, находить и удалять не нужную? Правильно ли понимаю, что это делается только через цикл или есть какой-то другой способ?
  3. Если нужно переместить выбранную линию с одной точки привязки по уровню цены на другой уровень цены, то для этого применяется только функция ObjectMove?
С уважением, Владимир.
 
MrBrooklin #:

Всем доброго утра и хорошего настроения!

С целью продолжения самообучения задам ещё несколько вопросов про линии:

  1. Например, мне нужно нарисовать несколько линий (5, 10, 20 и т.д.) с разными точками привязки по уровню цены. Правильно ли понимаю, что для этого каждой линии нужно присвоить своё собственное имя? Если это так, то руками мне понятно, как присвоить новое имя, а автоматически в роботе, как это реализовать?
  2. Если потом нужно убрать с графика какую-то линию, то перебирать все имена в цикле, находить и удалять не нужную? Правильно ли понимаю, что это делается только через цикл или есть какой-то другой способ?
  3. Если нужно переместить выбранную линию с одной точки привязки по уровню цены на другой уровень цены, то для этого применяется только функция ObjectMove?
С уважением, Владимир.
Имя генерирую префикс плюс текстовое время и может плюс номер бара
Причина обращения: