Написал скрипт, который через систему
{
for(int y=0; y<9; y++)
{
//Загружаем котировки по функции aSymbol(x) и таймфрейму tf(y)
}
}
У котировки грузятся очень долго, неимоверно долго. Это нормально, или, возможно, есть какой-то более оптимальный код для таких задач? Просто я не понимаю, как еще можно пройтись по всем необходимым валютным парам и таймфреймам на каждой из них.
Не обязательно ждать подгрузки.
Сначала нужно, обязательно, добавить нужные символы (или проверить наличие) символов в окне "Обзор рынка". Потом пробежаться (первый раз вообще без проверки результата) по всем символам и таймфреймам при помощи любой функции CopyXXXX - тем самым будет:
Затем повторно пройдитесь по символам и таймфреймам при помощи CopyXXXX, но только в этот раз контролируйте количество запрошенного и код возврата ошибки.
Ваш вопрос о:
- почему история долго грузится первый раз с серверов брокеров на локальную машину? или
- почему ранее загруженная история с диска медленно(дайте время в сек) поднимается в память и отдается в расчет каждый раз?
Ваш вопрос о:
- почему история долго грузится первый раз с серверов брокеров на локальную машину? или
- почему ранее загруженная история с диска медленно(дайте время в сек) поднимается в память и отдается в расчет каждый раз?
Интересуют оба вопроса - но больше второй - почему, когда я уже скриптом накачал несколько Гбайт данных, они находятся у меня в /адрес сервера/название символа, а советник все равно не может их считать/считывает медленно (м1-д1 проходит быстро, на w1 и mn1 - по нескольку секунд (иногда - десятков секунд висит)
Если второй, то приведите логи и дополнительные данные:
- первые две строки старта приложения, чтобы была понятна точная конфигурация компьютера
- логи начала и конца загрузок вашего цикла, чтобы было точно видно сколько времени грузится каждый объект. соответственно, надо добавить распринтовку в начале и конце загрузки
- указание объема баров на графиках и глубину поднимаемых данных (с какой даты)
Ответы на эти вопросы мгновенно покажут причины.
Если второй, то приведите логи и дополнительные данные:
- первые две строки старта приложения, чтобы была понятна точная конфигурация компьютера
- логи начала и конца загрузок вашего цикла, чтобы было точно видно сколько времени грузится каждый объект. соответственно, надо добавить распринтовку в начале и конце загрузки
- указание объема баров на графиках и глубину поднимаемых данных (с какой даты)
Ответы на эти вопросы мгновенно покажут причины.
2016.12.29 05:43:21.222 Terminal Alpari MT5 x64 build 1495 started (Alpari International Limited)
2016.12.29 05:43:21.314 Terminal Windows Server 2012 R2 Standard (x64 based PC), IE 11.00, RDP, UAC, Intel Xeon E5-2620 0 @ 2.00GHz, RAM: 326 / 6141 Mb, HDD: 6727 / 19950 Mb, GMT-08:00
Последовал совету Владимира, сейчас скину дату первого и последнего забора данных (беру по 100 баров последних) - пока жду, когда прогрузится все
К слову, эта проблема появилась где-то два дня назад - до этого все было отлично (работало как часы, за 30 секунд успевали подгрузиться на веб-сервис 23 пары по всем тф с альпаришного мт5 и 32 акции по всем тф с инсты)
Даже без остальных данных:
- Памяти свободной мало - 326 мб свободно из 6141 мб означает, что кто-то другой отъел всю память. Сколько терминалов на компьютере?
- Это однозначно сурово урезанная виртуалка (даже диск на 20 гб). Сколько там ядер доступно? Диски HDD, а не SSD?
Вы практически все окружение умолчали, задавая свой вопрос.
Ну а "два дня назад работало" означает, что хост нагрузили и ваша виртуалка оказалась в стесненных условиях. Даже поднять 1 гб данных чартов (исходные данные - это минутки) на дешевом VPS - это часто не десятки секунд, а до пары минут. Если при этом проявляется недостаток оперативной памяти, то в работу включается своп и тогда все вообще умирает. Ссылка на домашний компьютер недостоверна, так как не были представлены ни логи с виртуалки, ни с домашнего компьютера.
Не забывайте, что вы кроме подъема кучи данных создаете 207 копий индикаторов.
Это к слову(может не про этот случай, ибо данных мало) "я беру VPS за 5 долларов, ставлю туда 5-10 терминалов и все ок!". Нисколько не ок. Люди просто даже не понимают, какие дикие задержки они имеют на дисках, памяти, сети, графике и цпу. На ровном месте у них латенси прыгает до сотен миллисекунд на простых операциях, которые в обычных условиях занимают меньше миллисекунды.
Пишу это, так как практически за каждым вопросом о производительности стоит VPS или мизер ресурсов, о которых молчит автор. Это выясняется позже.
Даже без остальных данных:
- Памяти свободной мало - 326 мб свободно из 6141 мб означает, что кто-то другой отъел всю память. Сколько терминалов на компьютере?
- Это однозначно сурово урезанная виртуалка (даже диск на 20 гб). Сколько там ядер доступно? Диски HDD, а не SSD?
Вы практически все окружение умолчали, задавая свой вопрос.
Ну а "два дня назад работало" означает, что хост нагрузили и ваша виртуалка оказалась в стесненных условиях. Даже поднять 1 гб данных чартов (исходные данные - это минутки) на дешевом VPS - это часто не десятки секунд, а до пары минут. Если при этом проявляется недостаток оперативной памяти, то в работу включается своп и тогда все вообще умирает. Ссылка на домашний компьютер недостоверна, так как не были представлены ни логи с виртуалки, ни с домашнего компьютера.
Не забывайте, что вы кроме подъема кучи данных создаете 207 копий индикаторов.
Это к слову(может не про этот случай, ибо данных мало) "я беру VPS за 5 долларов, ставлю туда 5-10 терминалов и все ок!". Нисколько не ок. Люди просто даже не понимают, какие дикие задержки они имеют на дисках, памяти, сети, графике и цпу. На ровном месте у них латенси прыгает до сотен миллисекунд на простых операциях, которые в обычных условиях занимают меньше миллисекунды.
Пишу это, так как практически за каждым вопросом о производительности стоит VPS или мизер ресурсов, о которых молчит автор. Это выясняется позже.
Т.е. если я приведу логи с домашнего компьютера, на котором достаточно памяти, на котором достаточно всего, одним словом, и будут похожие результаты - то мы продолжим эту дискуссию?
Когда приведете все полные ответы для двух компьютеров из комментария 4.
Но вы умудрились даже не ответить на проквотированный вами текст с вопросами. При таком уровне внимательности я сомневаюсь в целесообразности моего участия.
Если второй, то приведите логи и дополнительные данные:
- первые две строки старта приложения, чтобы была понятна точная конфигурация компьютера
- логи начала и конца загрузок вашего цикла, чтобы было точно видно сколько времени грузится каждый объект. соответственно, надо добавить распринтовку в начале и конце загрузки
- указание объема баров на графиках и глубину поднимаемых данных (с какой даты)
Ответы на эти вопросы мгновенно покажут причины.
2016.12.29 06:19:36.704 Terminal Windows Server 2012 R2 Standard (x64 based PC), IE 11.00, RDP, UAC, Intel Xeon E5-2620 0 @ 2.00GHz, RAM: 4397 / 6141 Mb, HDD: 6535 / 19950 Mb, GMT-08:00
2. 2016.12.29 06:23:33.077 BWSignal_Alpari_Final (AUDCAD,H1) EURUSD MN1 20 bars have been copied //Это первый символ и таймфрейм
2016.12.29 06:26:08.322 BWSignal_Alpari_Final (AUDCAD,H1) USDSEK M1 20 bars have been copied //Это последний символ и таймфрейм
3. Подгружаю 20 баров через CopyTime
Спасибо.![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Написал скрипт, который через систему
for (int x=0; x<23; x++)
{
for (int y=0; y<9; y++)
{
//Загружаем котировки по функции aSymbol(x) и таймфрейму tf(y)
}
}
У котировки грузятся очень долго, неимоверно долго. Это нормально, или, возможно, есть какой-то более оптимальный код для таких задач? Просто я не понимаю, как еще можно пройтись по всем необходимым валютным парам и таймфреймам на каждой из них.
Если же я пробую в советнике использовать аналогичный прием, работая с данными индикатора
for (int x=0; x<23; x++)
{
for (int y=0; y<9; y++)
{
//записываем в массив (индикаторный буфер) данные по индикатору RSI с aSymbol(x) и таймфрейму tf(y)
}
}
То первый прогон по "иксу" идет нормально, ошибок не выдает, но после месячного таймфрейма на первой паре терминал долго думает и выдает мне ошибку 4806, мол, извини, я не могу найти данные индикатора. Как я понял, это происходит из-за того, что не успевают обработаться все графики и таймфреймы, типа терминал не успел подгрузить данные и советнику не с чего брать значения. Так ли это? И если так - то как это исправить?