Мы запускаем облачный сервис MQL5 Cloud Network! - страница 96

 

Мы постоянно шаг за шагом оптимизируем всю MQL5 сеть:

  • периодически делаем ошибки и приходится откатываться назад
  • подобрали хороший синтетический тест для оценки PR
  • для генетики выбираем агентов с PR > 100 и работаем только с самым быстрым клауд сервером
  • уже добавили учет реально потребленной памяти каждой задачей и в следующих билдах будем выдавать задачи агентам, у которых гораздо больше памяти, чем нужно задаче
  • добавляем контроль количества ошибок, совершенных агентом
  • агенты очень жестко выбирают самый быстрый клауд сервер, чтобы уменьшить сетевые задержки
  • оптимизируем алгоритм перераздачи задач от медленных агентов

Скорострельность сети постоянно повышается, так что это очень хорошее средство для расчетов. Для примера посмотрите на тему "Пример ускорения расчетов с применением MQL5 Cloud Network".

В ближайших билдах будут добавлены новые функции по передачу неограниченного количества рассчитанных данных(фреймов) с агентов. Это позволит делать расчетные фермы для любых областей деятельности.

 
Renat:

Мы постоянно шаг за шагом оптимизируем всю MQL5 сеть:

  • для генетики выбираем агентов с PR > 100 и работаем только с самым быстрым клауд серверов
Остальные раздайте бесплатно (кто галку соответствующую поставил), всё равно ж стоят...
 
Renat:

Мы постоянно шаг за шагом оптимизируем всю MQL5 сеть:

  • периодически делаем ошибки и приходится откатываться назад
  • подобрали хороший синтетический тест для оценки PR
  • для генетики выбираем агентов с PR > 100 и работаем только с самым быстрым клауд сервером
  • уже добавили учет реально потребленной памяти каждой задачей и в следующих билдах будем выдавать задачи агентам, у которых гораздо больше памяти, чем нужно задаче
  • добавляем контроль количества ошибок, совершенных агентом
  • агенты очень жестко выбирают самый быстрый клауд сервер, чтобы уменьшить сетевые задержки
  • оптимизируем алгоритм перераздачи задач от медленных агентов

Скорострельность сети постоянно повышается, так что это очень хорошее средство для расчетов. Для примера посмотрите на тему "Пример ускорения расчетов с применением MQL5 Cloud Network".

В ближайших билдах будут добавлены новые функции по передаче неограниченного количества рассчитанных данных(фреймов) с агентов. Это позволит делать расчетные фермы для любых областей деятельности.

Народ заждался, а то ведь не всякий результат укладывается в единственный дубль.
 

В ветке часто встречались жалобы пользователей на работу "клаудных" агентов. У кого-то возвращались нулевые результаты, сейчас вот проблема с памятью.

Для того чтобы пользователи клауда спали спокойней предлагаю добавить в агентов режим отладки суть которого в том что при включенной галочке задачи

клаудных агентов дублируются на локальные. После окончания оптимизации выдаётся файл или таблица в которой показаны результаты проходов в клауде и 

на локальном агенте. Это покажет действительно ли клауд глючит или проблема в эксперте. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
TheXpert:

А почему бы не ввести доп. требование для агентов? PR минимум 50 (можно даже 70-100) и обеспечение минимум 500 метров памяти на одного агента? Я так понимаю, это сразу снимет некоторые вопросы.

...

Похоже, это не решит проблему...

По-моему, она порождена агрессивным потреблением памяти агентами (вероятно, в погоне за быстродействием).

В подтверждение этих слов приведу результат натурного эксперимента. Сразу оговорюсь, что пока он проводился только на локальном агенте, но есть большая вероятность того, что нечто подобное происходит с облачными агентами.

Итак, на скорую руку сделан простейший мультивалютный советник без индикаторов и без торговли, практически пустышка:

input uint maxsym = 12;   // число символов

//------------------------------------------------------------------    OnInit
int OnInit()
{
  Print("maxsym=",maxsym);
  Print("OnInit begins SymbolsTotal: ",SymbolsTotal(true),"/",SymbolsTotal(false));
// танцы с бубном для инициализации в тестере
  for(uint i=0; i<maxsym; i++)
  {
    SymbolSelect(SymbolName(i,false),true);
    MqlRates rh[60];   // Массив значений цен для 60-х последних баров
    MqlRates rm[60];   // Массив значений цен для 60-х последних баров
    if(CopyRates(SymbolName(i,false),PERIOD_H1,0,60,rh)!=60) // Копируем в массив значения цен 60-х последних баров
      { Print("OnInit: CopyRates ",SymbolName(i,false)," не загружена история"); return(WRONG_VALUE); }
    if(CopyRates(SymbolName(i,false),PERIOD_M1,0,60,rm)!=60) // Копируем в массив значения цен 60-х последних баров
      { Print("OnInit: CopyRates ",SymbolName(i,false)," не загружена история"); return(WRONG_VALUE); }
  }

  for(uint i=0; i<maxsym; i++)
    {
     Print(i," ",SymbolName(i,true));
    }
  Print("OnInit ends   SymbolsTotal: ",SymbolsTotal(true),"/",SymbolsTotal(false));

  return(0);
}
//------------------------------------------------------------------    OnDeinit
void OnDeinit(const int reason)
  {
  }
//------------------------------------------------------------------    OnTick
void OnTick()
  {

  }

Единственный параметр - число используемых символов.

Все тесты производились при следующих условиях:

Нетбук на Intel Atom N270 @ 1.60GHz, 1014MB (максимальный зарегистрированный PR агентов в метрике билда 567 равен 25), Windows XP SP3 Home, естественно x32. В свойствах системы - дополнительно - быстродействие параметры - дополнительно - виртуальная память установлена в "РАЗМЕР ПО ВЫБОРУ СИСТЕМЫ" (чтобы не получать нехватку виртуальной памяти).

Тестовый счёт чемпионата 2011 на MetaQuotes-Demo, GPBUSD, M1, Обычный, Все тики, 10000 USD, 1:100, без визуализации, Медленная, Balance max, No

В качестве инструмента измерения использовался Диспетчер задач: органолептически фиксировались показания потребления памяти на вкладке "Процессы" сразу после окончания теста (по "свистку") и физическая память (доступно) на вкладке "Быстродействие". Перед каждым проходом MT5 перезапускался. Запуск теста производился при количестве свободной памяти около 500Мб.

Первая серия проходов - одинаковый период минимальный ( одни сутки), на каждом проходе добавляем в обработку по 1 инструменту (на указанном счёте доступно 12), значения в мегабайтах:

Число инструментов Память Пиковое использование памяти Вирт.п. Физическая память

(Память-использование) (Память-максимум) (Объём виртуальной памяти) Доступно
1 59 103 68 -
2 108 148 118 -
3 158 193 169 339
4 205 238 219 290
5 253 283 269 236
6 303 328 320 186
7 356 377 375 117
8 405 422 425 69
9 453 468 475 59
9 454 468 476 73
10 502 513 526 35
11 2 539 576 64
12 2 526 630 75



Заметен практически линейный рост "Память-максимум" (названия столбцов как в XP, в W7 немного по-другому). Видно практически линейный рост с шагом около 45Мб при росте числа инструментов до 10 (упёрлись в размер свободной памяти).

Вторая серия проходов - фиксируем число инструментов на минимуме (один), увеличиваем период:

Период тестирования Период тестирования Память Пиковое использование памяти Вирт.п. Физическая память

суток(выходные включены) (Память-использование) (Память-максимум) (Объём виртуальной памяти) Доступно
08.12.2011-09.12.2011 1 59 103 68                   -
01.06.2011-09.12.2011 191 61 80 71 479
01.01.2011-09.12.2011 342 61 67 71 478
01.01.2010-09.12.2011 707 83 89 96 455
01.01.2009-09.12.2011 1072 102 108 114 437
01.01.2008-09.12.2011 1438 120 126 141 418

По столбцам "память" и "Вирт.п." видно практически одинаковые значения при периоде до года, далее рост примерно на 18Мб в год. Из проведённых ранее наблюдений за содержимым папки тестера "Bases" и журналами тестирования известно, что тестер берёт историю целыми годами, при этом всегда берётся не менее двух лет (т.е., по минимуму, года, попадающие в период тестирования + один предшествующий год).

Из полученных выше данных напрашивается следующий грубый расчёт минимальных требований к ОДНОМУ агенту по памяти (для x32 систем):

13-15Мб - сам тестер + (40Mб за минимальный период тестирования + 20 Мб за каждый дополнительный год тестирования) * число инструментов.

Облачный агент может быть несколько экономнее (за счёт объёма логов, которые, скорее всего, тоже размещаются в памяти), но в реальном советнике есть ещё собственные потребности в памяти данных и индикаторов.

Для x64 систем, вероятно, нужно ещё больше...

PS. Две строки 9 в первой таблице - не опечатка, а следствие постановочной ошибки в советнике. Параметр 0 соответствует одному инструменту, на одном из шагов при увеличении параметра на 1 число инструментов не меняется.

 
Хотелось бы узнать..Если оптимизации делать с терминала НЕ MQ, то какая история используется в облаках?Какие торговые условия? Брокера (пересылается агентам) или MQ ?
 
В облаке используется история того брокера, на котором открыт текущий счет в терминале. Вся история и рыночное окружение доставляются на каждого агента автоматически и прозрачно. Именно этой работой занимаются географически распределенные клауд срверы.
 
Renat:

...

  • агенты очень жестко выбирают самый быстрый клауд сервер, чтобы уменьшить сетевые задержки

 ... 

В квартире два роутера, два различных провайдера. Скорость первого 25/75 (день/ночь), второго - круглосуточно 8Mbit. Вопрос: влияет ли скорость/пинг провайдера на "сетевые задержки"? И как определить, с каким из провайдеров будут быстрее связываться/работать мои агенты?
 
WChas:
В квартире два роутера, два различных провайдера. Скорость первого 25/75 (день/ночь), второго - круглосуточно 8Mbit. Вопрос: влияет ли скорость/пинг провайдера на "сетевые задержки"? И как определить, с каким из провайдеров будут быстрее связываться/работать мои агенты?

Агенты ежедневно перезамеряют скорость доступа на полном цикле авторизации к четырем клауд серверам и выбирают наиболее быстрый.

За счет этого сокращаются пути доставки данных до каждого агента, так как практически всю сетевую нагрузку несут на себе географически распределенные серверы в США, Европе и Азии. Задача и данные однократно доставляются на клауд сервер и уже сервер раздает задание и синхронизирует историю тысячам агентов. Кроме того, везде используются механизмы кеширования, что на порядки сокращает объем передаваемых данных.

Чтобы проверить, к какому серверу идет подключение, достаточно посмотреть логи агента:

PR      0       Startup 13:30:04        Startup thread finished successfully
LH      0       Network 13:32:04        connected to 1.agents.mql5.com
QI      0       Network 13:32:05        authorized on 1.agents.mql5.com
EN      0       Network 13:32:06        connected to 2.agents.mql5.com
GK      0       Network 13:32:06        authorized on 2.agents.mql5.com
HL      0       Network 13:32:06        connected to 3.agents.mql5.com
MD      0       Network 13:32:07        authorized on 3.agents.mql5.com
LQ      0       Network 13:32:07        connected to 4.agents.mql5.com
LF      0       Network 13:32:09        authorized on 4.agents.mql5.com
IG      0       Network 13:32:30        connected to 1.agents.mql5.com
DP      0       Network 13:32:31        authorized on 1.agents.mql5.com
QD      0       Network 13:32:31        connected to 2.agents.mql5.com
NM      0       Network 13:32:32        authorized on 2.agents.mql5.com
MJ      0       Network 13:32:32        connected to 3.agents.mql5.com
GO      0       Network 13:32:32        authorized on 3.agents.mql5.com
FH      0       Network 13:32:36        connected to 4.agents.mql5.com
PH      0       Network 13:32:36        authorized on 4.agents.mql5.com
CM      0       Network 13:32:58        connected to 1.agents.mql5.com
JJ      0       Network 13:32:59        authorized on 1.agents.mql5.com
KS      0       Network 13:32:59        connected to 2.agents.mql5.com
FD      0       Network 13:33:00        authorized on 2.agents.mql5.com
EQ      0       Network 13:33:00        connected to 3.agents.mql5.com
OQ      0       Network 13:33:00        authorized on 3.agents.mql5.com
QF      0       Network 13:33:01        connected to 4.agents.mql5.com
FS      0       Network 13:33:02        authorized on 4.agents.mql5.com
QH      0       Network 13:33:24        MQL5 Cloud Network server 3.agents.mql5.com selected after rescan
EO      0       Network 13:33:24        connected to 3.agents.mql5.com

Видно, как происходит тройная оценка скорости подключения к каждому серверу с последующим выбором самого быстрого. Если выбранный сервер будет недоступен, то автоматически запустится процесс новых перевыборов.

Фактически сейчас каждый агент стабилизировался и работает только со своим близким сервером. Разница на уровне локальных провайдеров практически незаметна, так как наибольшее влияние оказывает скорость международных каналов.

 
А что означают два первых столбца в логе агента? Остальные вроде понятно.
Причина обращения: