Ошибки, баги, вопросы - страница 1805
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
@Slawa уточните пожалуйста, есть ли какие-то ограничения, на запись индикаторных буферов вне функции OnCalculate()? Всегда ли будет все корректно записываться в случае записи буферов в функциях: OnTimer(), OnBookEvent(), OnChartEvent()?
НО можете нарваться на перераспределение буферов в момент добавления нового бара (перераспределение производится с запасом, поэтому не на каждом новом баре).
PS хотя нет. вся обработка идёт в одном потоке, поэтому коллизий не должно быть. Пробуйте
Явных ограничений нет. Попробуйте.
НО можете нарваться на перераспределение буферов в момент добавления нового бара (перераспределение производится с запасом, поэтому не на каждом новом баре)
Вот тут подробнее, пожалуйста. Что за распределение, как с ним быть?
Как раз написал вопрос потому, что замечаю "подвисания" на новом баре. Причем эти подвисания обнуляют буферные значения = 0 (причем пустое значение установленное явно мной - EMPTY_VALUE). Пока не удалось поймать этот момент. Иногда происходит просто "скачок" индикатора и сразу восстановление в нормальное состояние, иногда именно "залипает". При залипании не пишутся значения в файл и отрисовка буферов не производится. Запись в буферы произвожу в OnBookEvent().
Тот же самый код в OnCalculate() отрабатывает нормально, но OnCalculate() не позволяет собрать все значения открытого интереса и других биржевых параметров.
Лечится только переключением ТФ. Да, одновременно запущены 5-7 одинаковых индикаторов, пишущих разные данные.
Добавлено:
Да, еще сегодня при включении терминала заметил точно такую же штуку. Все просто повисло, во всех буферах, на всех значениях нули, индикатор историю (записанную в файл) не выдал. Т.е. просто все повисло. Рынок еще был закрыт. Изменил ТФ - история подргузилась, НО, опять к вопросу о необходимости временной метки к значениям SESSION: была произведена запись последнего известного значения на момент закрытия терминала! Синхронизация истории прошла успешно, ошибок не было. Но TimeCurrent() вернул ошибочное значение (где-то 21:03). Хотя реальное время прихода этого значения 23:49:59. В общем, какая-то печаль...
Вот тут подробнее, пожалуйста. Что за распределение, как с ним быть?
Как раз написал вопрос потому, что замечаю "подвисания" на новом баре. Причем эти подвисания обнуляют буферные значения = 0 (причем пустое значение установленное явно мной - EMPTY_VALUE). Пока не удалось поймать этот момент. Иногда происходит просто "скачок" индикатора и сразу восстановление в нормальное состояние, иногда именно "залипает". При залипании не пишутся значения в файл и отрисовка буферов не производится. Запись в буферы произвожу в OnBookEvent().
Тот же самый код в OnCalculate() отрабатывает нормально, но OnCalculate() не позволяет собрать все значения открытого интереса и других биржевых параметров.
Лечится только переключением ТФ. Да, одновременно запущены 5-7 одинаковых индикаторов, пишущих разные данные.
Делаем перераспределение буфера на 1250 баров, копируем в новый буфер 1000 баров из прежнего буфера. Новый буфер выставляем вместо прежнего буфера, прежний буфер удаляем. Добавляем 1001-й бар.
Что значит "как с ним быть"?
Имейте в виду, что все индикаторы одного символа считаются последовательно друг за другом в одном потоке. Если какой-то индикатор тормозит, то тормозится и весь поток обработки символа
Запросто. Приходит первый тик нового бара. Буфер распределён на 1000 баров и полностью заполнен.
Делаем перераспределение буфера на 1250 баров, копируем в новый буфер 1000 баров из прежнего буфера. Новый буфер выставляем вместо прежнего буфера, прежний буфер удаляем. Добавляем 1001-й бар.
Что значит "как с ним быть"?
Имейте в виду, что все индикаторы одного символа считаются последовательно друг за другом в одном потоке. Если какой-то индикатор тормозит, то тормозится и весь поток обработки символа
Про один поток - это я в курсе. А перераспределение, как я понял, влияет на OnBookEvent() сильнее, чем на OnCalculate()?
Но пока индикатор (любой индикатор на этом символе!) не закончит какой-либо расчёт (OnCalculate, OnTimer, OnChartEvent, OnBookEvent), новый тик не поступит на обработку.
Перераспределение производится при приходе нового тика. Сразу после прихода нового тика вне очереди вызывается OnCalculate. И только после этого продолжается обработка событий, поступивших индикатору
Но пока индикатор (любой индикатор на этом символе!) не закончит какой-либо расчёт (OnCalculate, OnTimer, OnChartEvent, OnBookEvent), новый тик не поступит на обработку.
Еще, насколько я понимаю, индикаторы на одном символе рассчитываются последовательно, т.е. если я кинул последовательно индикатор i1, i2, i3, то и рассчитываться они будут в том же порядке?
Сейчас для теста добавил еще стандартный МАКД, он последний в списке, посмотрю будет ли на нем подвисание с образованием нового бара.
Еще, насколько я понимаю, индикаторы на одном символе рассчитываются последовательно, т.е. если я кинул последовательно индикатор i1, i2, i3, то и рассчитываться они будут в том же порядке?
Сейчас для теста добавил еще стандартный МАКД, он последний в списке, посмотрю будет ли на нем подвисание с образованием нового бара.
Но если Вы будете удалять-добавлять разные индикаторы, то последовательность пересчёта может Вас удивить. Поэтому не закладывайтесь на последовательность
По началу - да, расчёт будет в той же последовательности.
Но если Вы будете удалять-добавлять разные индикаторы, то последовательность пересчёта может Вас удивить. Поэтому не закладывайтесь на последовательность
Вот о чем я говорил:
По GOLD-3.17 образовался новый бар, по всем моим индикаторам, рассчитываемым в OnBookEvent() по этому символу все текущие значения обнулились. По логике индикатора, в момент формирования нового бара буферы не обнуляются, а в них сразу же записывается текущее значение. МАКД не обнулился. Журнал пуст, значит рассинхронизации не было, все значения должны были быть корректны. В данном случае глюк продолжался секунд 5. Вчера ловил по несколько минут глюки.
Все остальные символы - нормально. Повторюсь, в логику индикатора не заложен сброс значений в 0! Поэтому вопрос: при перераспределении новые элементы, по идее, должны содержать мусор. А тут 0.0 и зависание...
Да, еще: если бы завис один индикатор, остальные должны были бы сохранить свои значения?! А тут все, разом обнулились. Есть ситуации, когда такое может быть?Аналогичное зависание произошло по BR-3.17:
@Slawa есть идеи в какую сторону копать? Может быть есть более оптимальный способ сбора биржевых данных и их отображения?