Не вьехал по МТ-5 - страница 4

 
api писал(а) >>

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

Без слипа как раз это очень просто. А вот использование слипа не даст завесить машину.

 
stringo писал(а) >>

Без слипа как раз это очень просто. А вот использование слипа не даст завесить машину.

Да-да, я описАлся. Без WaitForSingleObject. ))

 
stringo >>:

До закрытого бета-тестирования у нас как раз и был реализован синхронный вариант - хэндл не возвращался до тех пор, пока не посчитаются данные. Получили реальные тормоза в кастомных индикаторах, которые используют данные других индикаторов (в частности MA).

Поэтому я и посоветовал: открывайте все хэндлы в OnInit, а пользуйтесь в OnTick, OnTimer или OnCalculate. В подавляющем большинстве случаев между вызовами данные уже посчитаются. Для проверки используйте функцию BarsCalculated

Мне просто интересно - сравнивали ли Вы производительность просчета одного и того же буфера на МТ4 и МТ5? Пока из ваших слов складывается впечатление, что МТ5 тормозит по сравнению с МТ4, что и вынуждает делать на системном уровне всякие "обходные" маневры, вместо того чтобы ускорить процесс до показателей МТ4.

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

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

 

Вообще проблемы расчёта индикаторов в пятёрке уже обсуждались. Кратко повторю.

В четвёрке каждый индикатор имеет одну копию (вместе со всеми буферами).

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

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

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

Нет проблемы с граблями. В наших примерах уже показано, как надо работать с индикаторами. В справке тоже всё это будет. Или Вы - не читатель? Кроме того, все действия по синхронизации вы можете скрыть в своих собственных классах, один раз написал и забыл

 

А зачем Вы все это написали? Следует ли это расценивать как завуалированный ответ, что мол МТ5 действительно тормозит по сравнению с МТ4 из-за вышеописанных новшеств?

Сама концепция "централизации" расчетов и отвязки их от интерфейса хороша, но она не означает необходимости асинхронного вызова. Возможность асинхронного расчета в отдельном потоке прекрасно сосуществует с определением синхронного программного интерфейса к классам этого потока (если хотите, в дополнение к асинхронному). Основное назначение вызова индикатора из эксперта - получить готовые данные, а не "отвалить" (как Вы выражаетесь) побыстрее с фигой. Если предположить, что поточность распространяется не только на индикаторы, но и на эксперты, то остановка потока конкретного эксперта ничем не грозит терминалу.

А сейчас Вы вынуждаете каждого программиста MQL заниматься реализацией на своем прикладном уровне таких системных вещей, которые должны быть один раз и навсегда реализованы в самой платформе. А также обрекаете своих сотрудников на написание инструкций, пояснений и ответов на вопросы, которые были бы просто не нужны, если б платформа делала всё молча и без побочных эффектов. Кроме того, Вам то должно быть известно, что малая часть пользователей читает хелп достаточно внимательно, и потому качество программы определяется тем, насколько она сама защищает пользователя от ошибок. У Вас же диаметрально противоположный подход.

Я практически не участвую в ветках по МТ5 (эта - редкое исключение), потому что бесполезно - Вы легко пропускаете мимо ушей любые аргументы или просто не понимаете. В результате мы, видимо, получим систему, которую Вы спроектировали так, как могли, а не как лучше. Но все это, ИМХО, конечно.

 

Приходится "ездить" из одной темы в другую, чтобы что-то не пропустить.

Но все равно можно до одури читать все, а если не будут существенные моменты из обсуждений отражены в Справке или в еще каком-то общедоступном сборном документе - чтение всех этих обсуждений будет потерянным временем.

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

---------

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

Причина обращения: