Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нашёл причину. Галочка "Точная шкала времени.
Если стоит галка то формула тангенса полностью совпадает с ObjectGetValueByTime(), если галки нет, то чем больше угол трендовой тем больше разница в результатах.
Вывод, если хотим, чтоб при убранной галке ваша пользовательская функция совпадала с ObjectGetValueByTime(), то нужно округлять значение времени до времени открытия свечи таймфрейма.
Гифка работает только если на неё кликнуть.
ps вот такой вариант округления в пользовательской функции, даёт одинаковый результат с ObjectGetValueByTime(), не зависимо от галки в настройках.
Думаю здесь все понимают, что вот это
и то, что написал я, это одно и то же. Формула тангенса.
Об этом уже сказано. Только есть вариант преобразования попроще, на мой взгляд
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Аналог ObjectGetValueByTime может кто то реализовывал ?
Alexey Viktorov, 2026.04.17 13:24
Ну ведь преобразовать ничего не сто́ит.
Вот такое время
функция ObjectGetValueByTime читает отбросив минуты без округления. Поэтому в написании своей функции надо это учитывать и также отбрасывать если закрались такие поправки.
Ещё: функция ObjectGetValueByTime не видит правую координату если она находится «в будущем».
Экспериментирую
Результат
Не сходятся значения.
Пробовал ставить 0 то же не сходятся.
Исключил бар за пределами.
Вы почему упорно не хотите сказать на каком графике и по каким координатам нарисована линия?
Как я погляжу у всех участников обсуждения в том или ином варианте значения сходятся, а у вас ни при каких условиях не получается…
Об этом уже сказано. Только есть вариант преобразования попроще, на мой взгляд
Согласен с вами, это тот же ху# только в левой руке. Разницы нет.
Я бы только убрал лишние буквы(приведение к int), а так да, ваше округление немного красивее моего.
Друзья, может кто то реализовывал аналог ObjectGetValueByTime ?
Пробовал формулу линейной интерполяции но результат сильно отличается от ObjectGetValueByTime.
Может кто то уже решал подобную задачу, поделитесь примером.
Да, Игорь правильно все сказал, что нужно все пересчитывать через индексы баров, так как время по оси X распределено не равномерно (имеет разную плотность)
Так как у меня все преобразования Цена-Время <-> XY давно реализованы в iCanvas, то я набросал демонстрирующий пример с правильными преобразованиями. Можешь заглянуть в класс iCanvas чтобы посмотреть все методы.
В примере все координаты сохраняются в формате Цена-Время. На входе имеется тестовое время (вертикальная красная линия) и также тестируется пересечение всех линий с временем указателя мышки.
Правильно ли я перебрал функцию ?
Накидал советник для экспериментов.
Но результаты все равно не сходятся.
Правильно ли я перебрал функцию ?
Накидал советник для экспериментов.
Но результаты все равно не сходятся.
Во-первых нужно переходить с int на double, когда дело касается номера бара.
Во-вторых твоя задача сводится к правильному вычислению номера бара. Увы iBarShift для этого не годится. Так как она возвращает только целочисленные номера реальных баров. А нам нужны дробные и мнимые будущие со знаком минус. Поэтому мне пришлось написать свою функцию double wBarShift, для которой нужно держать массив времени открытия баров в актуальном состоянии:
вот такие пирожки.
Именно поэтому я вообще не использую объекты, как анахронизм.
Возможно для любителей объектов следует из моей библиотеки iCanvas создать другую библиотеу без канваса. Канвас по сути - это лишь дополнительная фича в этой библиотеке.
Важно пояснить, что такое моя библиотека iCanvas.
Это большой жирный костыль на фатальный симантический баг MQ, который MQ никак не хотят исправлять, и скорей всего не исправят. Почему фатальный? Да потому, что если бы они его исправили, то произошло ровно то, что произошло, когда компания Google создала движок V8, произведя браузерную революцию. Именно по причине этого бага МТ5 никак не может выстрелить в мире трейдинга, а плетется где-то на переферии.
Поэтому мне пришлось написать свою функцию double wBarShift, для которой нужно держать массив времени открытия баров в актуальном состоянии:
возможно эту функцию можно сильно упростить без использования массива времени открытия баров. Просто когда я ее создавал, у меня было главное требование - высочайшая производительность, выше чему у стандартной iBarShift, так как ее вызов при работе с Canvas и при привязки канваса с чарту, происходит чрезвычайно часто. Поэтому держать массив времени открытия баров и поддерживать его в актуальном состоянии было оправдано.
Поэтому можете попробовать создать функцю-аналог iBarShift, но которая возвращает дробные и отрицательные бары (будущие быры). Вместо массива времени использовать внутри стандартную функцию iBarShift.
Но в текущей реализации wBarShift намного быстрее стандартного iBarShift. Примерно в 3-4 раза. На моем процессоре 20 наносекунд против 70 наносекунд.
Правильно ли я перебрал функцию ?
Накидал советник для экспериментов.
Но результаты все равно не сходятся.
и все стало работать корректно.
но тебе не надо вешать мою библу если тебе не нужен канвас(слишком жрет много ресурсов, т.к. с каждым товым баром обновляется большая таблица параметров чарта.
Поэтому тебе нужно написать свой iiBarShift
В подтверждение моих слов я заменил в твоем коде iBarShift на мой wBarShift и изменил int на double
и все стало работать корректно.
но тебе не надо вешать мою библу если тебе не нужен канвас(слишком жрет много ресурсов, т.к. с каждым товым баром обновляется большая таблица параметров чарта.
Поэтому тебе нужно написать свой iiBarShift
Честно сказать я не совсем понимаю, есть бары у них есть номера. Мне нужно знать значения на 0 текущем баре. Без заглядывания за пределы 0 бара в отрицательную сторону.
У нас есть номера баров, есть цены, почему функция не верно считает ?
Для меня загадка, наверно я уже стал стар..
Честно сказать я не совсем понимаю, есть бары у них есть номера. Мне нужно знать значения на 0 текущем баре. Без заглядывания за пределы 0 бара в отрицательную сторону.
У нас есть номера баров, есть цены, почему функция не верно считает ?
Для меня загадка, наверно я уже стал стар..