Опять вопрос про быстродействие.

 

Имею в советнике вот такое копирование данных.



    ASize=2000;
     co=CopyBuffer ( hi, 0,                  0,_ASize, ib0); 
     co=CopyHigh   (_Symbol,_Period, 0,_ASize, high);
     co=CopyLow    (_Symbol,_Period, 0,_ASize, low);

     co=CopyTime   (_Symbol,_Period, 0,_ASize, time);


оптимизационные прогоны с 2010 Март 1 по 2010 Ноябрь 1 - идут.... Даже я бы сказал стоят очень долго - по минут пять.

И это при том, что я уже нарочно оставил 3000$ чтобы если сливает так по быстрее.

Мне кажется  - не дело это такое копирование, туда-сюда.


Либо дайте как было в МТ4 либо исправьте либо раскажите как мне быть.

Вот пока писал этот пост прогон на 2.2 Core2Dou c 4 ГИГАМИ прошел только на 50% А на 2.4 четвертом пентиуме 12%.


Это ужас. Извините. 


=============================================================

Дополню -

2011.02.04 09:57:12    Core 1    genetic pass (3, 59) returned result 10.91 in 646 sec
2011.02.04 09:56:36    Agent_213.170.84.3:2001    genetic pass (8, 397) started
2011.02.04 09:56:36    Agent_213.170.84.3:2001    genetic pass (5, 447) returned result 11.31 in 607 sec
2011.02.04 09:56:12    Agent_213.170.84.3:2000    genetic pass (7, 615) started
2011.02.04 09:56:12    Agent_213.170.84.3:2000    genetic pass (0, 636) returned result 11.27 in 586 sec
2011.02.04 09:55:04    Core 2    genetic pass (6, 288) started
2011.02.04 09:55:04    Core 2    genetic pass (4, 29) returned result 11.75 in 518 sec

Вот что-то уже закончилось. 

====

Кстати - может быть имеет смысл нанять специалиста по высокопроизводительным вычислениям. Просто я именно этим и занимаюсь ( точнее занимался ) поэтому знаю, что знания и опыт имеют силу. Себя не предлагаю - в Казань увы поехать не смогу :) А иначе я думаю вы не согласитесь. Это в плане полу-шутки. Но все же действительно - есть специальные алгоритмы, может их по пробовать.

 

А за сколько нужно?

Для примера пустой советник (только таймер подключил с интервалом в 1 секунду) на тестах показал у меня 1 минуту 15 секунд.

Проц:  Intel Pentium 4  3.00GHz, 3071 MB, PR33

Параметры тестирования: EURUSD, H1, Каждый тик, произвольная задержка.

 
Interesting:

А за сколько нужно?

Для примера пустой советник (только таймер подключил с интервалом в 1 секунду) на тестах показал у меня 1 минуту 15 секунд.

Проц:  Intel Pentium 4  3.00GHz, 3071 MB, PR33

Параметры тестирования: EURUSD, H1, Каждый тик, произвольная задержка.




Прогоните такой же пустой в МТ4.

Сколько нужно? - Ну что сказать если оптимизация из 300 прогонов ( это очень мало ) и каждый по 600 секунд ( это 10 минут ) то 300*10 = 3000 , да / на 60 = 50 часов. Ну что тут сказать. Ну сколько нужно? :) 


 Да и я не тестирую на М1.

 
Четыре массива по 2000 баров на каждом тике... Вычисления, требующие исторических данных, надо в индикаторе делать.
 
Integer:
Четыре массива по 2000 баров на каждом тике... Вычисления, требующие исторических данных, надо в индикаторе делать.

ОК, мне интересна задуманная МQ методика - раскажите как задуманно, что это правильно?

В индикаторе ? И сигналы гнать в советник? Как? Через iCustom?

 
Academic:

Прогоните такой же пустой в МТ4.

Сколько нужно? - Ну что сказать если оптимизация из 300 прогонов ( это очень мало ) и каждый по 600 секунд ( это 10 минут ) то 300*10 = 3000 , да / на 60 = 50 часов. Ну что тут сказать. Ну сколько нужно? :) 

Да и я не тестирую на М1.

Чисто визуально - 10-15 секунд на формирование исторических данных + 3-4 секунды тестирования.

И это без таймера, который по хорошему тоже следует прописать с обработкой в 1 секунду.

А оптимизация тут и не аргумент (пусть MT4 сначала удаленными агентами обзаведется).

 
Interesting:

Чисто визуально - 10-15 секунд на формирование исторических данных + 3-4 секунды тестирования.

И это без таймера, который по хорошему тоже следует прописать с обработкой в 1 секунду.

А оптимизация тут и не аргумент (пусть MT4 сначала удаленными агентами обзаведется).

Да нужны ли они эти удаленные агенты, если все так плохо? Тем более не далее как позавчера наблюдал и пришлось отказаться от удаленных агентов, как были разные результаты на одних и тех же параметрах на локальном и удаленном агенте. Ну то есть, наглядно это было так - прогоны с неким параметром равным 256 и 257 имеют +11 а с равным 258 и 259 +10000 ( сделок 0 ) , далее опять 260 и 261 +12 а 262 и 263 +10000. Запустил тоже самое но только на локальных агентах - получил ровный график, без таких вот странных провалов. Ну то есть я специально не проверял, но сам график отличался как свет и день. Причем оптимизация шла по одному параметру. Вот - теперь не очень верю, увы в достоверность тестирорвания на удаленных агентах.
 
Academic:

ОК, мне интересна задуманная МQ методика - раскажите как задуманно, что это правильно?

В индикаторе ? И сигналы гнать в советник? Как? Через iCustom?

Какая у MQ задумана методика не знаю, скорее нет методики, просто дают средства программирования, а потом смотрят и диву даются, как этим пользуются.

Придерживаюсь таких принципов: вычисления делать в индикаторе, если постоянно нужны какие-то промежуточные значение, то выделять для них буферы и тянуть за собой, при переходе к вычислению очередного бара. Должен соблюдаться приницип обсчета только одного бара и использования значений других буферов только с тем же индексом, что у обсчитываемого бара, или с фиксированным отступом (главное не бегать в циклах по истории на каждом баре, а в буфере подтягивать за собой значение, как в индикаторе МА сделано - на каждом баре берется значение с предыдущего бара, старое отнимается, новое прибавляется...).  В советнике - через iCustom() копировать значение только с одного буфера. Если формирующийся бар не используется, то еще делать проверку времени бара, чтобы копировать значение только один раз на бар (но обязательно делать копирование на каждом баре, даже если значение не нужно). Еще можно тики пропускать, если цена не сильно изменилась  - выходим из OnTick() - это для пятизнака.

 
Academic:


Имею в советнике вот такое копирование данных. 

Приведите полный исходный код, пожалуйста. Если не публично, то через сервисдеск.

Это поможет нам воспроизвести ситуацию и разобраться.


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

 
Renat:

Приведите полный исходный код, пожалуйста. Если не публично, то через сервисдеск.

Это поможет нам воспроизвести ситуацию и разобраться.


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

Вычислений нет - есть четыре ифа десяток гр.объектов ( которые как я понимаю роли в тестере не играют ), вывод комментария, один цикл не больше чем на 2000 ( но на деле примерно до 100 почти 99% ) , и от 300 до 700 трейдов за указанный период. То есть копирование этих данных и есть узкое место. На мой взгляд, у вас сделано не удачно - что надо копировать, зачем если я вызвал iCustom, то могу иметь его буфер сразу, даже если он перемещается ( пере выделяется ) и его размер меняется, кроме того зачем обязательно  копировать исторические данные в советнике. Почему нельзя получить буфера в OnInit таким же образом?

Прошу прощения за навязчивость, но  все же еще раз  хочу предложить подумать на тему нанять специалиста по высокопроизводительному вычислению. Только имейте ввиду, их знающих на самом деле предметную область крайне мало, тут ведь мультипроцессорные вычисления и в том же интеловом компиляторе нет даже примитивов и намеков на высокопроизводительное параллельное вычисление. И только ради Бога, не осваивайте эту область сами - пусть тогда уж будет лучше как есть - чем будут мега-таинственные глюки которые вы не отловите никогда. Это не фарс, это действительно так.

Параллельные вычисления в MetaTrader 5 штатными средствами
Параллельные вычисления в MetaTrader 5 штатными средствами
  • 2010.11.24
  • Andrew
  • www.mql5.com
Время является неизменной ценностью на протяжении всей истории человечества, и мы стремимся не расходовать его понапрасну. Из этой статьи вы узнаете, как можно ускорить работу вашего эксперта, если у вашего компьютера многоядерный процессор. Причем, реализация описываемого метода не требует знания каких-либо еще языков кроме MQL5.
 
Renat:

Возможно ли, что при последовательном копировании:

     co=CopyBuffer ( hi, 0,                  0,_ASize, ib0);
     co=CopyHigh   (_Symbol,_Period, 0,_ASize, high);
     co=CopyLow    (_Symbol,_Period, 0,_ASize, low);
     co=CopyTime   (_Symbol,_Period, 0,_ASize, time);

будут получены смещённые данные?

Например:

1. скопировали данные индикатора, High.

2. пришел первый тик нового бара.

3. копируются данные Low,Time.

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
Причина обращения: