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

 
fxsaber #:

Вот так.

void OnTick()
{
  OrderSelect(0, SELECT_BY_POS);
  
  if (OrdersTotal() != 2)
    OpenPosition(1 - OrderType());
}

Сильно так-себе условие. А если OrdersTotal() > 2? На всю котлету?

Ни чем не хуже:

OrdersTotal() < 2
 
Vladislav Boyko #:

Сильно так-себе условие. А если OrdersTotal() > 2? На всю котлету?

Ни чем не хуже:

Вот так моя паранойя одобряет

switch(OrdersTotal())
  {
   case 0:
   case 1: OpenPosition(1 - OrderType()); break;
   default: break;
  }
 
Vladislav Boyko #:

Вот так моя паранойя одобряет

1 - OrderType()

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

 
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).