Особенности языка mql5, тонкости и приёмы работы - страница 39

 
Vasiliy Sokolov:
О полной замене кастинга union'ом не говорилось.
Да, обрезали возможности.
 
Vasiliy Sokolov:

Произвольный кастинг через запись/чтение бинарника... Тушите свет. Дальше можно не читать... 

Есть предложение лучше?
 
Vasiliy Sokolov:

p.s. Глянул Ваш код:

Произвольный кастинг через запись/чтение бинарника... Тушите свет. Дальше можно не читать... 

Там произвольный кастинг через union - любые простые структуры без кастомных конструкторов и операторов копирования. Для всех статей на этом ресурсе этот кастинг будет работать.

template <typename T>
class CASTING
{
public:
  template <typename T1>
  static const T Casting( const T1 &Value )
  {
    union CAST
    {
      T1 Value1;
      const T Value2;

      CAST( const T1 &Value)
      {
        this.Value1 = Value; // кастомный оператор может все испортить
      }
    };

    const CAST Union(Value);

    return(Union.Value2);
  }
};

#define _C(A, B) CASTING<A>::Casting(B)

void OnStart()
{
  MqlTick Tick = {0};
  
  Tick = _C(MqlTick, Tick); // Tick = (MqlTick)Tick;
}

Но кому хочется накрыть кастинг на 100% - через файлы. Есть выбор.

 
Комбинатор:
Есть предложение лучше?
Очевидно не использовать кастомные конструкторы в структурах и операторы присваивания. Пишите простой код.
 
Vasiliy Sokolov:
Очевидно не использовать кастомные конструкторы в структурах и операторы присваивания. Пишите простой код.
Тогда нужно отказаться от const-полей структур.
 

Популярна такая проверка

if (ArrayResize(Array, NewSize) == NewSize)
// ....

так вот это совсем не то же самое, что

if (ArrayResize(Array, NewSize) == ArraySize(Array))
// ....
 

Вообще-то ArrayResize() возвращает

Возвращаемое значение

При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера; в противном случае возвращает -1 и массив не меняет размеры.


 
Roffild:

Вообще-то ArrayResize() возвращает

Год назад поведение изменили. На этой неделе внесли уточнение в Справку.
 
CopyTicks асинхронная только в индикаторах

сейчас осталось только для индикаторов - один запрос и отваливаем с теми данными, которые есть. А подкачка работает себе.

У экспертов и скриптов немного по-другому. Там производится несколько попыток ожидания необходимых данных. Пока данные поступают, делаются попытки. Как только возникли проблемы со связью, сразу отваливаем

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Регистрация участников на чемпионат MetaQuotes-Demо в мае

Vladimir Karputov, 2017.05.05 11:54

Добавлено. Да, нужно в цикле пробежаться по всей базе сигналов в терминале:

SignalBaseTotal

Возвращает общее количество сигналов, доступных в терминале


Кстати, рекомендую перед эти перебором (особенно при переключении с другого сервера или сразу после старта) кликнуть хоть раз на вкладку "Сигналы" терминала - это должно активировать подкачку актуальной базы данных.


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