Скорость работы функции

 

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

КОД №1

int Tr_H1_Bar_B2 = 0, Tr_H1_Bar_S2 = 0;
double tBar0_H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
if(tBar0_H1 > 0) Tr_H1_Bar_B2 = 1;
if(tBar0_H1 < 0) Tr_H1_Bar_S2 = 1;
-----------------------------------------------------------------------------------------------------------------------

КОД №2

bool Tr_H1_Bar_B2 = false, Tr_H1_Bar_S2 = false;
double tBar0_H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
if(tBar0_H1 > 0) Tr_H1_Bar_B2 = true;
if(tBar0_H1 < 0) Tr_H1_Bar_S2 = true;
-----------------------------------------------------------------------------------------------------------------------

 

КОД №3

bool Tr_H1_Bar_B2, Tr_H1_Bar_S2;
double tBar0_H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
Tr_H1_Bar_B2 = (tBar0_H1 > 0);
Tr_H1_Bar_S2 = (tBar0_H1 < 0);

 

Не совсем понятно вот это

не совсем понятно вот это

Tr_H1_Bar_B2 = (tBar0_H1 > 0);
Tr_H1_Bar_S2 = (tBar0_H1 < 0);

мне нужно на выходе получить истину или лож
 
softbit:

Не совсем понятно вот это

мне нужно на выходе получить истину или лож


именно это Вы и получите.
 
softbit:

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

КОД №1

int Tr_H1_Bar_B2 = 0, Tr_H1_Bar_S2 = 0;
double tBar0_H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
if(tBar0_H1 > 0) Tr_H1_Bar_B2 = 1;
if(tBar0_H1 < 0) Tr_H1_Bar_S2 = 1;
-----------------------------------------------------------------------------------------------------------------------

КОД №2

bool Tr_H1_Bar_B2 = false, Tr_H1_Bar_S2 = false;
double _H1 = (iClose(NULL,PERIOD_H1,0) - iOpen(NULL,PERIOD_H1,0))/Point;
if(tBar0_H1 > 0) Tr_H1_Bar_B2 = true;
if(tBar0_H1 < 0) Tr_H1_Bar_S2 = true;
-----------------------------------------------------------------------------------------------------------------------

От деления на Point знак результата не зависит. Поэтому, можно определить:

bool tBar0_H1 = (iClose(NULL,PERIOD_H1,0) > iOpen(NULL,PERIOD_H1,0))

и, далее по тексту,

if ( tBar0_H1)

{

// обработка ситуации iClose(NULL,PERIOD_H1,0) > iOpen(NULL,PERIOD_H1,0)

}

else

{

// иначе обработка ситуации iClose(NULL,PERIOD_H1,0) <= iOpen(NULL,PERIOD_H1,0)

}

 
Если я правильно понимаю то Условный оператор if сильно заменляет скорость обработки кода. Дело в том что у меня в коде много этого оператора if
 
softbit:
Если я правильно понимаю то Условный оператор if сильно заменляет скорость обработки кода. Дело в том что у меня в коде много этого оператора if


Вас об этом предупреждали:

Справочник MQL4 - Основы языка - Синтаксис

........

вычисление логического выражения производится до конца и не прерывается досрочно.

 
softbit:
Если я правильно понимаю то Условный оператор if сильно заменляет скорость обработки кода. Дело в том что у меня в коде много этого оператора if

Нет, неправильно.

 
Сами iClose iOpen работаю очень медленно, я не помню кто писал про это, кажется Юра писал, нужно использовать массивы-таймсерии. Но у них свой недостаток есть, они терминал весят намертво в некоторых случаях при обрывах связи и память используют, хотя в хелпе написано, что реального копирования данных не происходит. В общем как обычно, mql :)
 
TheXpert:

Нет, неправильно.


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

"Premature optimization is the root of all evil" (с)

"Золотые слова" (с)

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