Вопросы от "чайника" - страница 104

 
220Volt:
Спасибо, похоже пора сжечь прадедушкину книжку )))

Из истории: в прадедушкиной книжке специально оставили long=int для совместимости старого софта.

Мы в свое время тоже решали - оставлять "бесполезный" long как int и вводить бесчеловечные int64 (или long int) или делать "правильно" путем применения чистого long. В результате решили, что для чистоты имеет смысл сделать правильно, использовав long как 64 битное целое.

long не всегда 32 битный в других системах. Даже один и тот же компилятор под разные архитектуры использует разные размеры. Вот что у Intel C++:

The size of a "long" integer varies between architectures and operating systems.

The Intel Compiler is compatible and inter-operable with Microsoft* Visual C++ on Windows* and
with gcc* on Linux* and Mac OS X*. Consequently, the sizes of fundamental types are the same as
for these compilers. The size of  a long integer in particular depends on the operating system
and the targeted architecture as follows:

   OS         arch           size
----------------------------------
Windows       IA-32        4 bytes
Windows       Intel 64     4 bytes
Windows       IA-64        4 bytes
Linux         IA-32        4 bytes
Linux         Intel 64     8 bytes
Linux         IA-64        8 bytes
Mac OS X      IA-32        4 bytes

Mac OS X        Intel 64       8 bytes


У нас в MQL5 используется x64 бит совместимая архитектура, которая требует одинакового поведения как в 32, так и в 64 битах. long 64 битный и по этой причине.


Еще немного истории, кто помнит: во времена MSDOS в 16 битных компиляторах int был 16 битным и равен short. При переезде на 32 битную платформу int был расширен до 32 битов, оторвавшись от short. Вроде особых жалоб не было. При переходе на 64 бита от int пришлось отрываться уже long. И это закономерно.

 

MqlRates          rates[];

надо найти максимальное значение из rates[].high из трех послебних баров

незнаю как применить ArrayMaximum к структуре?

 
dentraf:

MqlRates          rates[];

надо найти максимальное значение из rates[].high из трех послебних баров

незнаю как применить ArrayMaximum к структуре?

Насколько мне известно, данная функция работает только с числовыми массивам, поэтому пишите свою функцию для ковыряния структуры.
 
dentraf:

MqlRates          rates[];

надо найти максимальное значение из rates[].high из трех послебних баров

незнаю как применить ArrayMaximum к структуре?

double MaxHigh(const MqlRates& rates,int &index)
  {
   double max=0.0;
   index=-1;
//--- check
   if(ArraySize(rates)<3) return(EMPTY_VALUE);
//--- loop
   for(int i=0;i<3;i++)
      if(max<rates[i].high)
        {
         max=rates[i].high;
         index=i;
        }
//--- result
   return(max);
  }
Как-то так. ArrayMaximum к структуре не применяется.
 
uncleVic:
Как-то так. ArrayMaximum к структуре не применяется.
Спасибо!
 

что это означает ? 

 CExpertBase::SetOtherSeries: changing of timeseries is forbidden
 

 
CExpertBase::SetOtherSeries: changing of timeseries is forbidden
что это может означать?
 

Скажите пожалуйста.

Дано: 

  •  два процесса (№1 и №2);
  •   выполняются параллельно;
  • участок памяти УП;
  • в один момент (на одном такте), процессы пытаются сделать следующее:

             1. №1 записать в УП, а №2 прочитать;

             2. №1 и №2 записать в УП;

Вопрос: какая ситуация является конфликтной? Больше меня интересует случай №1, можно ли считать что это нормально, или нужно ограничивать доступ? Подозреваю что 1й случай нехороший, как будет выглядить конфликт, непонятное значение, или ожидать чего-то серьезней?

 
openlive:
CExpertBase::SetOtherSeries: changing of timeseries is forbidden
что это может означать?
Чуть подробнее.. Какая следующая строчка (лучше несколько) в логе?
 

220Volt:

Вопрос: какая ситуация является конфликтной? Больше меня интересует случай №1, можно ли считать что это нормально, или нужно ограничивать доступ? Подозреваю что 1й случай нехороший, как будет выглядить конфликт, непонятное значение, или ожидать чего-то серьезней?

Конфликтными будут обе ситуации, получится непонятное значение.