Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Битовый поток - библиотека для MetaTrader 5

Просмотров:
825
Рейтинг:
(9)
Опубликован:
2021.10.03 16:06
Обновлен:
2021.10.05 18:52
\MQL5\Include\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Функционал библиотеки:

   //Запись последовательности бит в поток
   template<typename T>
   int               Write(
      const T &value,//Простая структура или переменная
      uint pos_bit_read=0,//С какой позиции начать считывание из структуры/переменной.Указывается в битах
      int bits_count=-1//Количество бит. -1=все до конца
   );//Возвращает количество записанных бит -1=ошибка

   //Чтение последовательности бит с потока
   template<typename T>
   int               Read(
      T &value,//Простая структура или переменная
      uint pos_bit_write=0,//С какой позиции начать запись в структуру/переменную.Указывается в битах
      int bits_count=-1//Количество бит. -1=все до конца
   );//Возвращает количество прочитанных бит -1=ошибка

   //Копирование данных с потока в массив uchar
   //При необходимости,размер целевого массива будет увеличен автоматически
   //Позиция указателя в потоке не изменяется
   int               Copy_to_array(
      uchar &dst_values[],//Массив назначения
      int dst_position_to,//Начальная позиция записи
      int bytes_count=-1,//Количество копируемых байт. -1=всё до конца потока
      int src_position_from=0//Начальная позиция чтения с потока в байтах
   );//Возвращает количество скопированных байт -1=ошибка

   //Копирование данных с массива uchar в поток
   //При необходимости,размер потока будет увеличен автоматически
   //Позиция указателя в потоке не изменяется
   int               Copy_from_array(
      uchar &src_values[],//Исходный массив
      int src_position_from,//Начальная позиция чтения
      int bytes_count=-1,//Количество копируемых байт. -1=всё до конца массива
      uint dst_position_to=0//Начальная позиция записи в поток в байтах
   );//Возвращает количество скопированных байт -1=ошибка

   //Записывает один бит в поток
   bool              Write_bit(
      bool value,//Записываемое значение
      uint pos_bit_write=UINT_MAX//UINT_MAX=запись в текущую позицию,указатель будет смещён на +1
   );//Возвращает успешность операции

   //Чтение одного бита с потока
   bool              Read_bit(
      uint pos_bit_read=UINT_MAX//UINT_MAX=чтение с текущей позиции,указатель будет смещён на +1
   );//При ошибке возвращает false


   //Возвращает размер потока в битах
   uint              Get_size(
   );

   //Возвращает позицию указателя для записи/чтения в потоке
   uint              Get_position(
   );

   //Изменяет размер потока
   //Новый объём заполняется нулями
   void              Set_size(
      uint new_size//Размер потока в битах
   );

   //Изменяет позицию указателя на запись/чтение в потоке
   //Указатель не может быть больше размера потока
   bool              Seek(
      uint offset,//Позиция в ьитах
      ENUM_FILE_POSITION origin//Позиция отсчёта
   );//Возвращает успешность операции

В комплекте есть скрипт для тестирования на ошибки и быстродействие.

У меня результат такой:

10*1024*1024 записей 61.631 мс
10*1024*1024 чтений 42.781 мс
Время тестирования: 191.675 мс
Ошибок при тестировании= 0
    iBands Crossing the Middle iBands Crossing the Middle

    Стратегия по индикатору iBands (Bollinger Bands, BB) - пересечение серединной линии является сигналом

    RSIOnMAOnRSI Cross signal only 2 RSIOnMAOnRSI Cross signal only 2

    Доработка первой версии - добавлен Трейлинг

    Extend Box Extend Box

    Индикатор-утилита: управляет прямоугольниками, всегда сдвигает правую границу по бару #0

    Scripts Triangles Scripts Triangles

    Скрипт находит все пары для треугольного арбитража.