Ошибки, баги, вопросы - страница 3538

 
Maxim Kuznetsov #:

:-) за такое в приличных местах бьют 

Тогда уже и OrderSelect проверять. Я только на условие обратил внимание. По мне, оно сильно опасное.

 
Maxim Kuznetsov #:

:-) за такое в приличных местах бьют 

Vladislav Boyko #:

Тогда уже и OrderSelect проверять.

Контекст был расчета просадки, а вы к тестерному советнику прицепились.

Отсутствие проверки сделано специально, потому что такая логика. Как и сравнение с двойкой.


ЗЫ Для эстетов можно писать так.

OpenPosition(!OrderType());
 
fxsaber #:

Контекст был расчета просадки, а вы к тестерному советнику прицепились.

Отсутствие проверки сделано специально, потому что такая логика. Как и сравнение с двойкой.

Та понятно, что тестерный. Это не придирки. Я к тому, что лучше не привыкать так писать.

fxsaber #:
ЗЫ Для эстетов можно писать так.

OpenPosition(!OrderType());

Сам таким грешил. Но C#, к примеру, откажется компилировать !(int), поэтому стараюсь отвыкать от подобной эстетики.

 
Andrei Iakovlev #:

Если задать

#define H1Seconds PeriodSeconds(PERIOD_H1)

компилятор в код сразу вставит 3600 или программа будет вычислять, чему равно PeriodSeconds(PERIOD_H1), каждый раз, когда надо?

?

 
Andrei Iakovlev #:

Если задать

компилятор в код сразу вставит 3600 или программа будет вычислять, чему равно PeriodSeconds(PERIOD_H1), каждый раз, когда надо?

Скорее всего, будет каждый раз вычислять, так как препроцессор сделает эту замену до компиляции. Получается, что вы как будто много раз в этих местах сами написали вызов функции. А дальше уже всё зависит от компилятора. Будет ли он заменять вызов этой стандартной функции на подстановку значений или такая оптимизация в нем не реализована.
Можете попробовать это выяснить, написав тестовый код, засекающий время выполнения в случае с подстановкой вызова функции и подстановкой 3600.
 
Yuriy Bykov #:
Скорее всего, будет каждый раз вычислять, так как препроцессор сделает эту замену до компиляции. Получается, что вы как будто много раз в этих местах сами написали вызов функции. А дальше уже всё зависит от компилятора. Будет ли он заменять вызов этой стандартной функции на подстановку значений или такая оптимизация в нем не реализована.
Можете попробовать это выяснить, написав тестовый код, засекающий время выполнения в случае с подстановкой вызова функции и подстановкой 3600.

Зависит от реализации PeriodSeconds . Если по уму делалось то точно 3600 будет, иначе ХЗ, сложно прогнозировать, не имея данных, как это под капотом работает, но, с большой долей вероятности, все же 3600 будет подставлено.

 

Получил зависание терминала таким образом - рисую каналы (OBJ_CHANNEL) на разных ТФ (см картинку), потом смотрю реализацию на М15, для чего масштабирую график через ctrl-колёсико. Замечаю, что сначала появляются тормоза, а потом терминал зависает совсем, что приходится сбрасывать через диспетчер задач. Убрал все индикаторы, тормоза остались. Отрисовал каналы через линии (OBJ_LINE)  - тормозов нет. Вернул канналы -- тормоза есть. Направление -- реализация каналов. Если посмотрите на картинку, то увидите, что линии каналов имеют толщину 2 и стиль - черточка (STYLE_DASH). Через интерфейс свойств такое установить неполучится, а программно в своём индикаторе -- запросто. Пробую привести к "стандартному" виду - или толщина в 1 или стиль - сплошная линия. Тормозов и зависаний нет. Т.е. проблема проявляется именно в этом нестандартном сочетании -- толщина 2 (и выше) и стиль отличный от сплошнеая линия (STYLE_SOLID).




 
Холостые прогоны после оптимизации Запускаешь сет с множеством трейдов, а результата - нет. Ничего не происходит. Позиции не открываются, в журнале - ничего, дежурные записи о начале тестирования с выводом настроек как обычно. И тишина. Запускаешь какой-нибудь 100500-ый сет в списке - прогоняется со странными результатами, не соответсвующими показаниям сета. Запускаешь другой советник - работает. Запускаешь третий советник - то работает, то не работает. Терминал от Альфа, но такая же проблема наблюдалась и на стандартном метаквотовском Большинство советников - работает как надо, но некоторые - нет.
 
Подтверждаю, такая проблема есть. Лечится только перезапуском терминала. Специально воспроизвести не получается.
 
Будут восстановлены сообщения выше?