Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Простой алгоритм.
На каждый тик делаешь простую операцию:
1. если данных нет - сохраняешь цену и сохраняешь время, когда ты ее сохранил.
2. если данные есть - проверяешь, прошло ли 5 секунд со времени сохранения. Если прошло - вот и твоя цена 5 сек назад.
3. если прошло 5 сек и более сохраняешь новую цену и новую дату.
Для получения только последней цены каждые 5 секунд - достаточно пары переменных - дата и цена.
Если нужна история 5 секундных цен - придется использовать массивы.
Реализовывать лень.
Добавляем каждый тик в новый элемент к массиву структур.
Получение цены: бежим в цикле по этому массиву и находим самый древний тик, время которого > (TimeCurrent() - 5). Тик слева от него (предыдущий) будет хранить нужную нам цену.
Ну и останется всего лишь как-то память освобождать - подчищать массив от неактуальных тиков. Каким способом - вопрос. Меняем индексацию, ресайзим до какого-то там размера, меняем индексацию?...
"Какой-то там размер" требует алгоритма его определения. Или отслеживания и обработки переполнений, если массив не динамический.
Реализовать в отдельном индикаторе, который будет заниматься только этим (что бы не пропускать тики), передавать данные в эксперта, который будет по ним торговать.
Не сильно простой алгоритм...
Добавляем каждый тик в новый элемент к массиву структур.
Получение цены: бежим в цикле по этому массиву и находим самый древний тик, время которого > (TimeCurrent() - 5). Тик слева от него (предыдущий) будет хранить нужную нам цену.
Ну и останется всего лишь как-то память освобождать - подчищать массив от неактуальных тиков. Каким способом - вопрос. Меняем индексацию, ресайзим до какого-то там размера, меняем индексацию?...
Реализовать в отдельном индикаторе, который будет заниматься только этим (что бы не пропускать тики), передавать данные в эксперта, который будет по ним торговать.
Не сильно простой алгоритм...
Если нужно просто сравнить текущую цену с той, что была 5 сек назад, то самый быстрый вариант это просто хранить эту цену в переменной и обновлять ее по прошествии 5 секунд. Да, возможны ситуации, когда можно пропустить какую-то из цен (либо, получить ее слишком поздно: через 6-9 секунд) из-за сбоя в потоке тиков, но,опять же, всё определяет конкретная задача - важно очень быстро, или важно очень точно.
Все зависит от конкретной задачи, для чего нужна цена. Если важно получить очень быстро данные, которые были 5 сек назад, то любые запросы тиковой истории и/или любой перебор накопленных тиков в цикле - это очень дорогие по времени операции.
Если нужно просто сравнить текущую цену с той, что была 5 сек назад, то самый быстрый вариант это просто хранить эту цену в переменной и обновлять ее по прошествии 5 секунд. Да, возможны ситуации, когда можно пропустить какую-то из цен (либо, получить ее слишком поздно: через 6-9 секунд) из-за сбоя в потоке тиков, но,опять же, всё определяет конкретная задача - важно очень быстро, или важно очень точно.
Я немного вас не понимаю. Вы хотите обновлять цену каждые 5 секунд. Ну вот обновляете вы ее к примеру на 0й, 5й, 10й, 15й и т.д. секунде. Необходимость получать возникает, к примеру на 1й, 8й, 12й, 19й секунде. В место 5ти секунд получается 1, 3, 2 и 4 соответственно. Это без учета пропусков цен и прочих "проскальзывание".
Да, все зависит от поставленной задачи. Если стоит задача "при необходимости (по запросу) получить цену, которая была 5 секунд назад", то метод "обновлять переменную раз в 5 секунд" абсолютно ее не выполняет. Такое решение подойдет только если вы строго каждые 5 секунд хотите знать, какая была цена ровно 5 секунд назад и собираетесь использовать ее для сравнения с текущей ценой. И то, точность все равно будет желать лучшего.
Я считаю, что затраты времени выполнения на копание в тиковой истории дадут гораздо меньшую погрешность, нежели любой другой из упомянутых в этой теме способов.*
* Решая задачу получения цены x секунд назад. А не "каждые 5 секунд узнать, что было 5 секунд назад" - читай на предыдущем выполнении OnTimer()
Я немного вас не понимаю. Вы хотите обновлять цену каждые 5 секунд. Ну вот обновляете вы ее к примеру на 0й, 5й, 10й, 15й и т.д. секунде. Необходимость получать возникает, к примеру на 1й, 8й, 12й, 19й секунде. В место 5ти секунд получается 1, 3, 2 и 4 соответственно. Это без учета пропусков цен и прочих "проскальзывание".
Да, все зависит от поставленной задачи. Если стоит задача "при необходимости (по запросу) получить цену, которая была 5 секунд назад", то метод "обновлять переменную раз в 5 секунд" абсолютно ее не выполняет. Такое решение подойдет только если вы строго каждые 5 секунд хотите знать, какая была цена ровно 5 секунд назад и собираетесь использовать ее для сравнения с текущей ценой. И то, точность все равно будет желать лучшего. Как по мне, дешевле уже заплатить за дорогие по времени операции - погрешность меньше будет (да и не такие уж они дорогие).
Если в переменной хранится цена, которая была не далее 5 секунд от текущей, то задача решена. Если от сохранения цены прошла 1-2-3-4 секунды, то мы просто ее игнорируем, как только прошло 5 (или более секунд) - вызываем обработчик, который принимает какое-либо решение (сравнивает текущую цену с ценой, которая была 5 секунд назад). Отслеживать можно каждый тик, там будет простое сравнение - прошло 5 секунд или нет от момента, как мы первый раз зафиксировали цену.
Т.е. принятие решения происходит, когда у нас есть текущая цена, и цена, которая была >= 5 секунд назад. Сразу после обработчика запоминаем новую цену и новую дату.
Какая разница, какое будет смещение. Ну запустил робота в 14:00:00. А первое решение он примет в 14:00:05, когда у него будут обе цены - текущая и прошлая.
Всем доброго доброго утра и хорошего настроения!
УВАЖАЕМЫЕ УЧАСТНИКИ ДАННОЙ ТЕМЫ! ВЕРОЯТНО ВЫ НЕ СДЕЛАЛИ САМОГО ГЛАВНОГО - НЕ ПРОЧИТАЛИ ПЕРВЫЙ ПОСТ АВТОРА ТЕМЫ!
Автор данной темы уже второй раз обращается с просьбой, цитирую: "... если бы кто-нибудь мог дать мне совет, как получить цену от 5 секунд назад, независимо от свечи и желательно без использования массива (если это возможно)!".
Ему раньше на форуме уже ответили на первую часть просьбы, которая не выделена жирным шрифтом в цитате. Сейчас нужно было просто ответить, что без использования массива ничего не получится и на этом точка!
С уважением, Владимир.
Всем доброго доброго утра и хорошего настроения!
УВАЖАЕМЫЕ УЧАСТНИКИ ДАННОЙ ТЕМЫ! ВЕРОЯТНО ВЫ НЕ СДЕЛАЛИ САМОГО ГЛАВНОГО - НЕ ПРОЧИТАЛИ ПЕРВЫЙ ПОСТ АВТОРА ТЕМЫ!
Автор данной темы уже второй раз обращается с просьбой, цитирую: "... если бы кто-нибудь мог дать мне совет, как получить цену от 5 секунд назад, независимо от свечи и желательно без использования массива (если это возможно)!".
Ему раньше на форуме уже ответили на первую часть просьбы, которая не выделена жирным шрифтом в цитате. Сейчас нужно было просто ответить, что без использования массива ничего не получится и на этом точка!
С уважением, Владимир.
:)
А почему все думают что в течение 5 сек. цена должна меняться хоть один раз. Она может не меняться и в течение минуты.
И поэтому самый простой и быстрый вариант предлагал Ivan Butko 2022.11.10 04:46 #8
Всем доброго доброго утра и хорошего настроения!
УВАЖАЕМЫЕ УЧАСТНИКИ ДАННОЙ ТЕМЫ! ВЕРОЯТНО ВЫ НЕ СДЕЛАЛИ САМОГО ГЛАВНОГО - НЕ ПРОЧИТАЛИ ПЕРВЫЙ ПОСТ АВТОРА ТЕМЫ!
Автор данной темы уже второй раз обращается с просьбой, цитирую: "... если бы кто-нибудь мог дать мне совет, как получить цену от 5 секунд назад, независимо от свечи и желательно без использования массива (если это возможно)!".
Ему раньше на форуме уже ответили на первую часть просьбы, которая не выделена жирным шрифтом в цитате. Сейчас нужно было просто ответить, что без использования массива ничего не получится и на этом точка!
С уважением, Владимир.
У автора ошибка в постановке задачи. Нет цены ровно 5 секунд назад относительно последнего тика, если последняя цена до 5 секунд и первая цена после 5 секунд назад.
Без массива можно, можно в глобальные переменные все засунуть)))
К тому же, что делать, если тиков нет более 6 секунд. Задача не описана полностью, автор не понимает до конца условий, в которых ставится задача. И задача где то там в 5 секундном отставании запоминать все тики и сравнивать их со временем прихода новых, а это без четких условий времени прихода тиков сложная задача. Простая она если тики приходят раз или чуть чаще в секунду. А если гораздо реже или гораздо чаще, то все сложнее, и когда чаще тяжелее по ресурсам.
:)
А почему все думают что в течение 5 сек. цена должна меняться хоть один раз. Она может не меняться и в течение минуты.
И поэтому самый простой и быстрый вариант предлагал Ivan Butko 2022.11.10 04:46 #8
Давать советы не соответствующие запросу все горазды и очень часто так и происходит.
Владимир прав. Чтобы было более понятно, я попробую перефразировать задачу:
Включили терминал. Запустили скрипт. Соответственно пока ещё нет ничего, ни цены ни времени в прошлом. И в этот момент надо получить цену которая была 5 секунд взад. Да ещё и не используя массив.
У автора ошибка в постановке задачи. Нет цены ровно 5 секунд назад относительно последнего тика, если последняя цена до 5 секунд и первая цена после 5 секунд назад.
Без массива можно, можно в глобальные переменные все засунуть)))
К тому же, что делать, если тиков нет более 6 секунд. Задача не описана полностью, автор не понимает до конца условий, в которых ставится задача. И задача где то там в 5 секундном отставании запоминать все тики и сравнивать их со временем прихода новых, а это без четких условий времени прихода тиков сложная задача. Простая она если тики приходят раз или чуть чаще в секунду. А если гораздо реже или гораздо чаще, то все сложнее, и когда чаще тяжелее по ресурсам.
Валерий, зачем фантазировать? Не изменилась цена, ну и флаг ей с попутным ветром. Нет цены, то-же самое. Вопрос не в том, что делать получив цену, а просто получить.
Валерий, зачем фантазировать? Не изменилась цена, ну и флаг ей с попутным ветром. Нет цены, то-же самое. Вопрос не в том, что делать получив цену, а просто получить.
Не знаю, тики шли 6 секунд назад и 4 секунды назад, между ними тиков не было, какой. Или между 5.01 и 4.99 было 100 или 1000 тиков с волатильностью 100 спредов, с какой точностью нужна цена и какая, вопрос тот же, до 5 секунд или после))))
В общем то копирование структуры тиков в 5 секундном диапазоне дубовое, но верное решение.))) Но красивей было бы на каждом тике получать всего лишь 2 цены, до 5 секунд и после и это легкое решение, но это сложнее в реализации, к тому для всех условий (часто редко) одинаково легких решений нет, как по мне.