Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну вот - шах и мат Часть локальных агентов успевают схватить котировки и наполнить массив Но большая часть вываливается в аут из-за скорости.
Ещё один код да Винчи ) Вы поболтать пришли или послушать что люди советуют?
Покажите как вычисляете data[0]
Ещё один код да Винчи ) Вы поболтать пришли или послушать что люди советуют?
Послушать. Буду рад если вы мне скажете что я должен ответить на "как вычисляете" Код я прислал. Что-то другое надо?
Массив data заполняется значениями из copybuffer - 10 значений`. Потом происходит сортировка и data[0] - это самое свежее значение индикатора на тике.
Еще раз код (чуть больше, но на суть не повлияет) Например, 5 инструментов по 5 периодов
Полноценно работают пара агентов, остальные вернули ошибку о которой я сказал. На мой взгляд, если пара агентов работают, ошибка-то все же не в коде наверное. Его надо дополнить проверкой data[0] и если нет такого члена - не обращаться к нему в текущем тике.
Проблема заключается именно, как я сделал вывод, в том, что на старте оптимизации не успевает каждый агент на тике получить значение из-за загрузки параметров. Но вот здесь я уже могу ошибаться - может ли быть такая асинхронность?
Ну вот - шах и мат Часть локальных агентов успевают схватить котировки и наполнить массив Но большая часть вываливается в аут из-за скорости. Не в массивах дело и не в коде, а в процедуре. Теперь (поскольку я с таким не сталкивался, а хочется решить задачку как можно быстрее, уж простите - не лень, а оптимизация времени). Кто подскажет: как в случае отсутствия значений индикатора в массиве (из-за того что они не успевают прогрузится к первому тику) не вываливать ошибку размерности массива (ибо в таком случае он пустой - 0 членов после copybuffer), а вернуть сову снова в стадию получения данных?
Разделите один цикл на два. В первом грузите данные, во втором их обрабатывайте. Будут дырки, но не будет сюрпризов.
Разделите один цикл на два. В первом грузите данные, во втором их обрабатывайте. Будут дырки, но не будет сюрпризов.
Пока не могу понять как это сделать - ведь значение одно для двухмерного массива. Один цикл перебирает инструменты, второй - периоды внутри инструмента. В итоге получается, например, значение индюка для EURUSD на 15 минутном таймфрейме
Пока не могу понять как это сделать - ведь значение одно для двухмерного массива. Один цикл перебирает инструменты, второй - периоды внутри инструмента. В итоге получается, например, значение индюка для EURUSD на 15 минутном таймфрейме
Наверно функция CopyBuffer отработала с ошибкой и не изменила размер массива.
Результат CopyBuffer всегда надо проверять.
Если Вы делаете это однократно то размер динамического массива определяется самостоятельно, но если Вы в следующий раз попытаетесь дописать что то в него, то перед записью необходимо увеличить его размер командой ArrayResize. Просто во внутреннем массиве поставьте эту команду и вопросов не должн возникнуть при многократной записи новых данных в массив. Если я правильно всё понял
Я делал ресайз прямо в цикле - не помогло (это в самом первом сообщении топика написал:).
Но!
Может его надо делать после copybuffer, если copybuffer принудительно сокращает массив до кол-ва значений в нем самом
Наверно функция CopyBuffer отработала с ошибкой и не изменила размер массива.
Результат CopyBuffer всегда надо проверять.
Да-да Я тоже в ходе дискуссии к этому пришел. Сейчас попробую после него ресайз сделать
Наверно функция CopyBuffer отработала с ошибкой и не изменила размер массива.
Результат CopyBuffer всегда надо проверять.
Не решило проблему:(
Что еще интересно: в момент проверки и ресайзов - никаких ошибок, ошибка возникает уже позже в коде - при обращении к data[0] для работы с ним