Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2016.09.13 09:54
Библиотеки

TypeToBytes - библиотека для MetaTrader 4

| Russian English Español Português 日本語 Deutsch

Просмотров:
756
Рейтинг:
голосов: 14
\MQL4\Include\\MQL4\Scripts\

Эта кроссплатформенная библиотека позволяет удобно осуществлять побайтовую работу со структурами и стандартными типами данных.

Возможности:

  • Побайтовое сравнение (== и !=) между собой структур и стандартных типов данных (в MQL по умолчанию отсутствуют операторы сравнения структур).
  • Определение байтового смещения поля структуры по его имени.
  • Чтение значения любого стандартного типа по байтовому смещению в исходных данных.
  • Запись структур и стандартных типов (через оператор =) по байтовому смещению (через оператор []) в исходные данные.
  • Побайтовое присваивание (через оператор =).
  • Преобразование структур и стандартных типов данных в байтовый массив.
Везде речь идет о простых структурах.

Для демонстрации возможностей библиотеки приложен скрипт с подробными комментариями
// MQL4&5-code

#property strict

#include <TypeToBytes.mqh>

#define PRINT(A) ::Print(#A + " = " + (string)A);

void OnStart( void )
{
  MqlTick Tick;
  ::SymbolInfoTick(::Symbol(), Tick);

  MqlTick CloneTick = Tick;

// Работа со структурами
  if (_R(Tick) == CloneTick)             // Теперь структуры можно сравнивать
    ::Print("Equal");

// Получения значения требуемого типа по смещению
  PRINT(_R(Tick)[(datetime)0])           // Смотрим значение datetime по нулевому смещению в объекте структуры MqlTick - Tick.time

// Получение смещения поля структуры
  const int Offset = _OFFSET(Tick, bid); // Нашли смещение в байтах поля bid в объекте структуры MqlTick

  PRINT(Tick.bid)                        // Посмотрели значение Tick.bid
  _W(Tick)[Offset] = 1.23456;            // Записали по найденному смещению значение (double)1.23456

  PRINT(Tick.bid)                        // Убедились, что Tick.bid теперь равен 1.23456

  PRINT(_R(Tick)[(double)Offset])        // Распечатали значение double, находящееся по смещению Offset - это снова Tick.bid

  PRINT(_R(Tick).Bytes[8])               // Посмотрели значение байта со смещением 8 в объекте структуры MqlTick
  PRINT(_R(Tick)[(uchar)8])              // То же самое, но другим способом

  PRINT(CloneTick.bid)                   // Посмотрели значение CloneTick.bid
  _W(CloneTick)[0] = Tick;               // Записали в CloneTick по нулевому смещению значение структурного объекта Tick
  PRINT(CloneTick.bid)                   // Убедились, что CloneTick.bid == Tick.bid

// Работа со стандартными типами
  color Color = C'241,248,255';

  PRINT(_R(Color)[(uchar)1])             // Green-составляющая цвета - 248

  _W(Color)[2] = (uchar)230;             // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'

// Одновременная работа со смешанными типами
  if (_R(Tick) != Color)                 // Можно сравнивать даже структуры со стандартными типами
    ::Print("Not equal");

// Побайтовый оператор присваивания
  int i = 0;
  _W(i) = (float)12.34;                  // Записали в int-переменную побайтовое представление числа (float)12.34
  PRINT(i)                               // Посмотрели, что это 1095069860

  float f = 0;
  _W(f) = i;                             // Записали во float-переменную побайтовое представление ранее полученного числа (int)1095069860
  PRINT(f)                               // Убедились, что теперь значение равно исходному - (float)12.34

  return;
}

News EA Template without DLL News EA Template without DLL

Советник-шаблон, скачивающий новости без использования DLL.

Сетевой помощник Сетевой помощник

Советник предназначен для установки сетей и управления ими.

Monthly Weekly Levels MT4 Monthly Weekly Levels MT4

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

All Stop Loss Sum All Stop Loss Sum

Скрипт складывает стоп-лоссы, тейк-профиты, лоты на выбранном символе.