Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 650

 
AlexeyVik:

Я понял так, что ему надо получить параметры объекта с другого чарта.

если с другого чарт, пусть юзает вариант функции с идентификатором чарта.

тоже никаких проблем.

 
sergeev:

если с другого чарт, пусть юзает вариант функции с идентификатором чарта.

тоже никаких проблем.

Совершенно верно, но мне пока небыло необходимости пользования идентификатора чарта и с этим я знаком только теоретически, по-тому и предложил вариант нанесения объектов на текущем чарте.
 
rov_kvn:



Замечательно! Именно в этом и было дело. Спасибо, дорогой товарищ!
 
sergeev:

если с другого чарт, пусть юзает вариант функции с идентификатором чарта.

тоже никаких проблем.


Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.

Пробую получить цену на текущем ТФ с chart_id = 0

double price1 = ObjectGetDouble(0,"Supply",3);

- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?

 
.roman.:

Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.

Пробую получить цену на текущем ТФ с chart_id = 0

- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?

chart_id = 0 это не ТФ, это текущий график. Тебе надо найти chart_id для того графика на котором есть нужный объект. Вот это я и не делал из-за временной ненадобности.
 
.roman.:

Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.

Пробую получить цену на текущем ТФ с chart_id = 0

double price1 = ObjectGetDouble(0,"Supply",3);


что такое 3 ?



- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?

при чем тут периоды ТФ к идентификатору чарта?


у вас вообще нереальная дыра в понимании что использовать


опишите вашу задачу, не надо темнить и вокруг да около на ощупь.

что конкретно надо?  получить данные с объекта?

- ObjectGet Чем же она не понравилась?

 
sergeev:

что такое 3 ?


Значение цены нижней границы прямоугольника. https://docs.mql4.com/constants/objectconstants/enum_object_property


при чем тут периоды ТФ к идентификатору чарта?

Понятия не имею, причем. Поэтому методом тыка пытаюсь сделать сам и спрашиваю, т.к. не получилось.

sergeev:
опишите вашу задачу, не надо темнить и вокруг да около на ощупь. что конкретно надо? получить данные с объекта? - ObjectGet Чем же она не понравилась?

вы серьезно спрашиваете? Я же уже раза 3 написал, что мне нужно получить данные прямоугольников (2 координаты цены и две временные координаты, по которым строятся прямоугольники) с двух других таймфреймов(Н4 и D), при этом находясь на третьем(Н1). 

ObjectGet не подходит тем, что с ним нельзя получить что-либо с другого таймфрейма.

Индюк рисует прямоугольники на всех таймфреймах и я к нему дописываю код, по которому он будет передавать координаты прямоугольников других таймфреймов без необходимости на них переключаться.  Я не знаю, как объяснить по-другому уже.

 
.roman.:

Значение цены нижней границы прямоугольника. https://docs.mql4.com/constants/objectconstants/enum_object_property



Понятия не имею, причем. Поэтому методом тыка пытаюсь сделать сам и спрашиваю, т.к. не получилось.

вы серьезно спрашиваете? Я же уже раза 3 написал, что мне нужно получить данные прямоугольников (2 координаты цены и две временные координаты, по которым строятся прямоугольники) с двух других таймфреймов(Н4 и D), при этом находясь на третьем(Н1). 

ObjectGet не подходит тем, что с ним нельзя получить что-либо с другого таймфрейма.

Индюк рисует прямоугольники на всех таймфреймах и я к нему дописываю код, по которому он будет передавать координаты прямоугольников других таймфреймов без необходимости на них переключаться.  Я не знаю, как объяснить по-другому уже.

Да пойми ты наконец, другой ТФ и другой график или чарт это разные понятия и соответственно разные подходы к решению вопросов.
 
AlexeyVik:
Да пойми ты наконец, другой ТФ и другой график или чарт это разные понятия и соответственно разные подходы к решению вопросов.

Так я только с радостью понять и принять готов любое решение, если есть идеи. Поэтому и спрашиваю совет, как можно реализовать.
 
Top2n:

Спасибо! Вас понял. Разве, что с ошибкой по OrderSelect, не понятно как остановить кроме как  continue.

Удалил поздно сообщение, сделал почти также как описали.

Иногда можно совместить возвращаемое значение и признак ошибки. В случаях, когда по смыслу некоторое значение можно взять за признак ошибки. Например, цену усреднения, равную 0.

Тогда, как только OrderSelect() вернула признак ошибки, сразу же и наша функция возвращает признак ошибки:

#property strict

/******************************************************************************/
double CenaUsrednenija(const int type,const int Magic){
  double nn = 0, bb = 0;

  for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() == Symbol() && OrderType() == type && OrderMagicNumber() == Magic)
      {
        double op = OrderOpenPrice();
        double llot = OrderLots();

        bb += op * llot;
        nn += llot;
        Print("  type = ", type, " Цена открытия = ", op, " Лот = ", llot, " itog = op * llot = ", op * llot, " factb = bb / nn = ", bb / nn);
      }
    } else {
      return 0; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
    }
  }

  return nn != 0 ? NormalizeDouble(bb / nn, _Digits) : 0; // Делить на 0 не следует
}

/******************************************************************************/
void OnStart() {
  Print("CenaUsrednenija(OP_BUY, 536525) = ", CenaUsrednenija(OP_BUY, 536525));
}

Прогнал у себя, получил:

23:32:03 Script 1 EURUSD,H1: loaded successfully
23:32:03 1 EURUSD,H1: initialized
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.36626
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.367785
23:32:03 1 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525) = 1.36779
23:32:03 1 EURUSD,H1: uninit reason 0
23:32:03 Script 1 EURUSD,H1: removed

Похоже на правду...

Да, в Print() не стал использовать условного выражения, чтобы избежать гипотетического деления на 0, поскольку этот Print() - отладочный...

Причина обращения: