chart_id = 0 это не ТФ, это текущий график. Тебе надо найти chart_id для того графика на котором есть нужный объект. Вот это я и не делал из-за временной ненадобности.
Понятия не имею, причем. Поэтому методом тыка пытаюсь сделать сам и спрашиваю, т.к. не получилось.
sergeev: опишите вашу задачу, не надо темнить и вокруг да около на ощупь. что конкретно надо? получить данные с объекта? - ObjectGet Чем же она не понравилась?
вы серьезно спрашиваете? Я же уже раза 3 написал, что мне нужно получить данные прямоугольников (2 координаты цены и две временные координаты, по которым строятся прямоугольники) с двух других таймфреймов(Н4 и D), при этом находясь на третьем(Н1).
ObjectGet не подходит тем, что с ним нельзя получить что-либо с другого таймфрейма.
Индюк рисует прямоугольники на всех таймфреймах и я к нему дописываю код, по которому он будет передавать координаты прямоугольников других таймфреймов без необходимости на них переключаться. Я не знаю, как объяснить по-другому уже.
Понятия не имею, причем. Поэтому методом тыка пытаюсь сделать сам и спрашиваю, т.к. не получилось.
вы серьезно спрашиваете? Я же уже раза 3 написал, что мне нужно получить данные прямоугольников (2 координаты цены и две временные координаты, по которым строятся прямоугольники) с двух других таймфреймов(Н4 и D), при этом находясь на третьем(Н1).
ObjectGet не подходит тем, что с ним нельзя получить что-либо с другого таймфрейма.
Индюк рисует прямоугольники на всех таймфреймах и я к нему дописываю код, по которому он будет передавать координаты прямоугольников других таймфреймов без необходимости на них переключаться. Я не знаю, как объяснить по-другому уже.
Да пойми ты наконец, другой ТФ и другой график или чарт это разные понятия и соответственно разные подходы к решению вопросов.
Спасибо! Вас понял. Разве, что с ошибкой по OrderSelect, не понятно как остановить кроме как continue.
Удалил поздно сообщение, сделал почти также как описали.
Иногда можно совместить возвращаемое значение и признак ошибки. В случаях, когда по смыслу некоторое значение можно взять за признак ошибки. Например, цену усреднения, равную 0.
Тогда, как только OrderSelect() вернула признак ошибки, сразу же и наша функция возвращает признак ошибки:
#property strict/******************************************************************************/double CenaUsrednenija(constint type,constint 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 {
return0; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
}
}
return nn != 0 ? NormalizeDouble(bb / nn, _Digits) : 0; // Делить на 0 не следует
}
/******************************************************************************/voidOnStart() {
Print("CenaUsrednenija(OP_BUY, 536525) = ", CenaUsrednenija(OP_BUY, 536525));
}
Прогнал у себя, получил:
23:32:03 Script 1 EURUSD,H1: loaded successfully
23:32:031 EURUSD,H1: initialized
23:32:031 EURUSD,H1: type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.3662623:32:031 EURUSD,H1: type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.36778523:32:031 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525) = 1.3677923:32:031 EURUSD,H1: uninit reason 023:32:03 Script 1 EURUSD,H1: removed
Похоже на правду...
Да, в Print() не стал использовать условного выражения, чтобы избежать гипотетического деления на 0, поскольку этот Print() - отладочный...
С помощью ChartNextChartSymbol и ChartPeriod определяешь что это именно тот чарт который нужен и этот chart_id используешь.
Попробовал данные функции, но не получилось отобразить идентификаторы различных таймфреймов одного графика. То есть, насколько я понял, для получения chart_id разных таймфреймов одного инструмента, все они должны быть открыты как отдельные графики, так?
Замечательно! Именно в этом и было дело. Спасибо, дорогой товарищ!
если с другого чарт, пусть юзает вариант функции с идентификатором чарта.
тоже никаких проблем.
Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.
Пробую получить цену на текущем ТФ с chart_id = 0
- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?
Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.
Пробую получить цену на текущем ТФ с chart_id = 0
- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?
Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.
Пробую получить цену на текущем ТФ с chart_id = 0
что такое 3 ?
- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?
у вас вообще нереальная дыра в понимании что использовать
опишите вашу задачу, не надо темнить и вокруг да около на ощупь.
что конкретно надо? получить данные с объекта?
- ObjectGet Чем же она не понравилась?
что такое 3 ?
Значение цены нижней границы прямоугольника. https://docs.mql4.com/constants/objectconstants/enum_object_property
Понятия не имею, причем. Поэтому методом тыка пытаюсь сделать сам и спрашиваю, т.к. не получилось.
опишите вашу задачу, не надо темнить и вокруг да около на ощупь. что конкретно надо? получить данные с объекта? - ObjectGet Чем же она не понравилась?
вы серьезно спрашиваете? Я же уже раза 3 написал, что мне нужно получить данные прямоугольников (2 координаты цены и две временные координаты, по которым строятся прямоугольники) с двух других таймфреймов(Н4 и D), при этом находясь на третьем(Н1).
ObjectGet не подходит тем, что с ним нельзя получить что-либо с другого таймфрейма.
Индюк рисует прямоугольники на всех таймфреймах и я к нему дописываю код, по которому он будет передавать координаты прямоугольников других таймфреймов без необходимости на них переключаться. Я не знаю, как объяснить по-другому уже.
Значение цены нижней границы прямоугольника. https://docs.mql4.com/constants/objectconstants/enum_object_property
Понятия не имею, причем. Поэтому методом тыка пытаюсь сделать сам и спрашиваю, т.к. не получилось.
вы серьезно спрашиваете? Я же уже раза 3 написал, что мне нужно получить данные прямоугольников (2 координаты цены и две временные координаты, по которым строятся прямоугольники) с двух других таймфреймов(Н4 и D), при этом находясь на третьем(Н1).
ObjectGet не подходит тем, что с ним нельзя получить что-либо с другого таймфрейма.
Индюк рисует прямоугольники на всех таймфреймах и я к нему дописываю код, по которому он будет передавать координаты прямоугольников других таймфреймов без необходимости на них переключаться. Я не знаю, как объяснить по-другому уже.
Да пойми ты наконец, другой ТФ и другой график или чарт это разные понятия и соответственно разные подходы к решению вопросов.
Спасибо! Вас понял. Разве, что с ошибкой по OrderSelect, не понятно как остановить кроме как continue.
Удалил поздно сообщение, сделал почти также как описали.
Иногда можно совместить возвращаемое значение и признак ошибки. В случаях, когда по смыслу некоторое значение можно взять за признак ошибки. Например, цену усреднения, равную 0.
Тогда, как только OrderSelect() вернула признак ошибки, сразу же и наша функция возвращает признак ошибки:
Прогнал у себя, получил:
Похоже на правду...
Да, в Print() не стал использовать условного выражения, чтобы избежать гипотетического деления на 0, поскольку этот Print() - отладочный...
Как я понимаю, единственные варианты - ObjectGetDouble() для цены и ObjectGetInteger() для даты в моём случае.
Пробую получить цену на текущем ТФ с chart_id = 0
- значение как надо. Вместо 0 пробовал и идентификаторы и значения отсюда https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes , но возвращает 0. Как "правильный" chart_id должен выглядеть то?
.roman.:
Так я только с радостью понять и принять готов любое решение, если есть идеи. Поэтому и спрашиваю совет, как можно реализовать.
Вот посмотри как должен выглядеть chart_id ChartFirst ChartNext
С помощью ChartNext ChartSymbol и ChartPeriod определяешь что это именно тот чарт который нужен и этот chart_id используешь.
Вот посмотри как должен выглядеть chart_id ChartFirst ChartNext
С помощью ChartNext ChartSymbol и ChartPeriod определяешь что это именно тот чарт который нужен и этот chart_id используешь.
Попробовал данные функции, но не получилось отобразить идентификаторы различных таймфреймов одного графика. То есть, насколько я понял, для получения chart_id разных таймфреймов одного инструмента, все они должны быть открыты как отдельные графики, так?