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

 
xeon:
Компилятор не определяет отсутствие второго знака равенства как ошибку.  

А он и не должен, ваш код не содержит ошибки.

int a = 0;
if(a=1){Print("TEST");}

и он тождественнен вот такому коду

int a = 0;
a=1;
if(a){Print("TEST");}
 
xeon:
Компилятор не определяет отсутствие второго знака равенства как ошибку.  
for(int i=0;i<total_deal;i++)
        {
         //--- try to get deals ticket
         if(ticket=HistoryDealGetTicket(i)) // Предупреждение к этой строке
           {
            Deal.Ticket(ticket);

Но выдаёт предупреждение, по крайней мере у меня для такого вот кода пишет:

'DealInfo.mqh'    DealInfo.mqh    1    1
expression is not boolean    Shou History.mq5    60    19
0 error(s), 1 warning(s)        1    1
 
Urain:

А он и не должен, ваш код не содержит ошибки.

и он тождественнен вот такому коду


Ну и совершенно напрасно, студия например определяет такой код как ошибку.

помимо того, тогда получается что  этот код

int a = 0;
a=1;
if(a){Print("TEST");}

тождественнен этому:

int a = 19;
if(a=14){Print("TEST");}

 допустим что  0 = false, 1 = true, тогда чему равны остальные цифры?  2,3,4, ......     :-) 

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

 
xeon:

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

Ворнинг на небулевое значение добавили как раз для того, чтобы пользователь видел что он делает.

 

 Если я сохраняю сет в терминале(на графике) и потом открываю его в тестере или терминале, то все нормально. А если я сохраняю его в тестере и открываю потом в терминале, то все значения переменных не строкового типа отображаются абракадаброй. Если я щелкаю ОК, то при открытии снова окна с параметрами, выглядеть будет уже нормально, все параметры будут заменены на новые правильно, кроме булевых. ВСЁ что было труе становится фалсе... В тестере сет сохраненный из тестера открывается правильно. 

 

 

Простите за назойливость, до сих пор не исправлена ошибка, о которой я писал ранее. При запуске индикатора, приведенного в описании функции CopySpread, история спредов прорисовывается с дырой. Дыра всегда охватывает период от момента запуска терминала до момента запуска индикатора. Похоже, что спреды, поступающие с сервера с каждым новым тиком, не заносятся в историю спредов. Спасибо!

 

 

Я получаю warnings от компилятора:

implicit enum conversion
possible loss of data due to type conversion

при использовании такой строки: 

ENUM_POSITION_TYPE posType=PositionGetInteger(POSITION_TYPE);

Что тут неправильно?

Нашёл: нужно использовать long

long posType=PositionGetInteger(POSITION_TYPE);

Тогда другой вопрос. Правильно ли будет работать такая конструкция:

if(posType==POSITION_TYPE_BUY)

когда posType определен как long? 

 
ENUM_POSITION_TYPE posType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
 
gpwr:

Я получаю warnings от компилятора:

implicit enum conversion
possible loss of data due to type conversion

при использовании такой строки: 

Что тут неправильно?

Нашёл: нужно использовать long

Тогда другой вопрос. Правильно ли будет работать такая конструкция:

когда posType определен как long? 

работать будет, это предупреждение на приведение типов, его можно игнорировать
 
AlexinSergey:

Простите за назойливость, до сих пор не исправлена ошибка, о которой я писал ранее. При запуске индикатора, приведенного в описании функции CopySpread, история спредов прорисовывается с дырой. Дыра всегда охватывает период от момента запуска терминала до момента запуска индикатора. Похоже, что спреды, поступающие с сервера с каждым новым тиком, не заносятся в историю спредов. Спасибо!

Спасибо, разберемся с примером.