Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
x100intraday:
1. Основное, что меня интересует: возможно ли напрямую заполнять временнЫе буферы аналогично ценовым (не прибегая к CopyTime и прочим штатным функциям копирования в массив) и как, а если нет, то почему?
2. Неужели для этой цели придётся заводить другую пару буферов под хранение секунд с начала 1970 года, но с типом не datetime, а каким-нибудь double или long, например, а в необходимые моменты конвертировать через TimeToString в формат времени как литеральной строки?
1. Невозможно. С "почему?" - к разработчикам.
2. В вашем случае это самое простое решение. (гарантированно рабочее.) Поскольку вы ставите вопрос относительно заполнения буферов аналогично ценовым.
А на своём месте я бы постарался на алгоритмическом уровне избежать такого расточительства по отношению к памяти. И ни в коем случае не стал создавать буферы с заполненностью полезными данными в 3%.
А на своём месте я бы постарался на алгоритмическом уровне избежать такого расточительства по отношению к памяти. И ни в коем случае не стал создавать буферы с заполненностью полезными данными в 3%.
да, бяда))
"Константы даты и времени..." и "...могут быть представлены в виде литеральной строки".
а могут и не быть представленны.. это для ввода/вывода данных в привычном виде дата/время.
К тому же увязать массивы данного типа с индикаторными буферами возможности не имеем (да и не нужно?), SetIndexBuffer к массивам этого типа данных применять по известным причинам не можем.
типу datetime ничто не мешает быть в индикаторном буфере(таки желательно).
И не увязываем.
а зря)
Компилируем получившийся код. Получаем предупреждение: "truncation of constant value" в отношении строк в else с =EMPTY_VALUE (печально удивляемся) и ошибку в Эксперт-отчёте терминала: "Array out of range" в отношении тех же строк (в конец огорчаемся). По-видимому, в тип datetime EMPTY_VALUE помещаться не хочет, размер такого массива остаётся нулевым. Меняем EMPTY_VALUE на 0, ошибка исчезает, однако размер массива по-прежнему остаётся нулевым.
EMPTY_VALUE оно типа double.
С индикаторным буфером будет проще - не нужно размер массива определять.
Странно ещё и другое: размер буферов ExtUpperBuffer и ExtLowerBuffer ненулевой, значит, они всё-таки заполняются, но фракталы не появляются. С чего это вдруг?
эт, фиг его знает)
Основное, что меня интересует: возможно ли напрямую заполнять временнЫе буферы аналогично ценовым (не прибегая к CopyTime и прочим штатным функциям копирования в массив) и как, а если нет, то почему? Неужели для этой цели придётся заводить другую пару буферов под хранение секунд с начала 1970 года, но с типом не datetime, а каким-нибудь double или long, например, а в необходимые моменты конвертировать через TimeToString в формат времени как литеральной строки?
доступ к данным типа datetime аналогичен доступу к ценовым данным.
дататайм, по сути, тот же инт/лонг.
P.S.: кому лень воспроизводить у себя дополненный код Fractals.mq5, просто подскажите, как вы храните рассчитанные специфические временнЫе данные (без вызова хэндлов встроенных индикаторов и работы с ними)?
всё также, как и с целочисленными данными, int/datetime/long - одинаково.
да, бяда))
типу datetime ничто не мешает быть в индикаторном буфере(таки желательно).
а зря)
С индикаторным буфером будет проще - не нужно размер массива определять.
И что же конкретно я не так делаю? Ведь всё подробно расписал, исходник вообще штатный, проверенный временем, наипростейший! Модификации простые и очевидные... Теряюсь в догадках помутневшего рассудка... Меня когда клинит на чём-то, хоть автослесаря с разводным ключом вызывай...
И каким же руническим заклинанием массивы типа datetime увязывать с индикаторными буферами? Повторюсь, что:
SetIndexBuffer
Связывает указанный индикаторный буфер с одномерным динамическим массивом типа double, объявленном на глобальном уровне.
И что же конкретно я не так делаю? Ведь всё подробно расписал, исходник вообще штатный, проверенный временем, наипростейший! Модификации простые и очевидные... Теряюсь в догадках помутневшего рассудка... Меня когда клинит на чём-то, хоть автослесаря с разводным ключом вызывай...
И каким же руническим заклинанием массивы типа datetime увязывать с индикаторными буферами? Повторюсь, что:
SetIndexBuffer
Связывает указанный индикаторный буфер с одномерным динамическим массивом типа double, объявленном на глобальном уровне.
Далось вам это datetime. Пишите всё в double массив и перед использованием (если нужно) приводите к datetime.
По сути разница между datetime и double только в представлении. Время записанное в double можно без потерь конвертировать в datetime.
ЗЫ И тот у другой типы 8 байтовые.
И что же конкретно я не так делаю? Ведь всё подробно расписал, исходник вообще штатный, проверенный временем, наипростейший! Модификации простые и очевидные... Теряюсь в догадках помутневшего рассудка... Меня когда клинит на чём-то, хоть автослесаря с разводным ключом вызывай...
подробно эт код с изменениями, а так можно только смутно догадываться..
И каким же руническим заклинанием массивы типа datetime увязывать с индикаторными буферами? Повторюсь, что:
SetIndexBuffer
Связывает указанный индикаторный буфер с одномерным динамическим массивом типа double, объявленном на глобальном уровне.
Urain уже ответил. нуу, чтоб компилятор не ругался, как-то так:
Так-с... Ага...
Вроде ничего принципиально нового, но зато почву под ногами утвердили, так сказать.
Всем спасибо за лекарственные пинки. Буду пробовать...
Всем спасибо за лекарственные пинки.
Есть ли штатный аналог библиотечной функции array.Add()?
P.S.: если нет, дайте годовой запас снотворного.
Есть ли штатный аналог библиотечной функции array.Add()?
P.S.: если нет, дайте годовой запас снотворного.
Почему бы не хранить дату в индикат......орных буфер......ах типа double
Много точек добавил, а то какая та ссылка появляется.
Все корректно преобразуется без ошибок