21 июля 2017
21 июля 2017
union LongDouble { long long_value; double double_value; };В отличие от структуры, разные члены объединения относятся к одному и тому же участку памяти. В данном примере объявлено объединение LongDouble, в котором значение типа long и значение типа double разделяют одну и ту же область памяти. Важно понимать — невозможно сделать так, чтобы это объединение хранило одновременно целочисленное значение long и вещественное double (как это было бы в структуре), поскольку переменные long_value и double_value накладываются (в памяти) друг на друга. Но зато MQL5-программа в любой момент может обрабатывать информацию, содержащуюся в этом объединении, как целочисленное значение (long) или как вещественное (double). Следовательно, объединение позволяет получить два (или больше) варианта представления одной и той же последовательности данных.
union LongDouble { long long_value; double double_value; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- LongDouble lb; //--- получим недействительное число -nan(ind) и выведем его lb.double_value=MathArcsin(2.0); printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value); //--- наибольшее нормализованное число (DBL_MAX) lb.long_value=0x7FEFFFFFFFFFFFFF; printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value); //--- наименьшее положительное нормализованное (DBL_MIN) lb.long_value=0x0010000000000000; printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value); } /* Результат выполнения 1. double=-nan(ind) integer=FFF8000000000000 2. double=1.7976931348623157e+308 integer=7FEFFFFFFFFFFFFF 3. double=2.2250738585072014e-308 integer=0010000000000000 */
class Foo { int value; public: string Description(void){return IntegerToString(value);}; //--- конструктор по умолчанию Foo(void){value=-1;}; //--- конструктор с параметрами Foo(int v){value=v;}; }; //+------------------------------------------------------------------+ //| структура, содержащая объекты типа Foo | //+------------------------------------------------------------------+ struct MyStruct { string s; Foo foo; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- MyStruct a,b; Foo an_foo(5); a.s="test"; a.foo=an_foo; Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); //--- Print("b=a"); b=a; //--- Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); /* Результат выполнения; a.s=test a.foo.Description()=5 b.s= b.foo.Description()=-1 b=a a.s=test a.foo.Description()=5 b.s=test b.foo.Description()=5 */ }В неявном операторе осуществляется почленное копирование объектов.
ENUM_POSITION_REASON | ENUM_DEAL_REASON | ENUM_ORDER_REASON | Описание причины |
---|---|---|---|
POSITION_REASON_CLIENT | DEAL_REASON_CLIENT | ORDER_REASON_CLIENT | Операция совершена в результате срабатывания ордера, выставленного из десктопного терминала |
POSITION_REASON_MOBILE | DEAL_REASON_MOBILE | ORDER_REASON_MOBILE | Операция совершена в результате ордера, выставленного из мобильного приложения |
POSITION_REASON_WEB | DEAL_REASON_WEB | ORDER_REASON_WEB | Операция совершена в результате срабатывания ордера, выставленного из веб-платформы |
POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | Операция совершена в результате срабатывания ордера, выставленного из MQL5-программы – советником или скриптом |
- | DEAL_REASON_SL | ORDER_REASON_SL | Операция совершена в результате срабатывания Stop Loss |
- | DEAL_REASON_TP | ORDER_REASON_TP | Операция совершена в результате срабатывания Take Profit |
- | DEAL_REASON_SO | ORDER_REASON_SO | Операция совершена в результате наступления события Stop Out |
- | DEAL_REASON_ROLLOVER | - | Сделка совершена по причине
переноса позиции |
- | DEAL_REASON_VMARGIN | - | Сделка совершена по причине начисления/списания вариационной маржи |
- | DEAL_REASON_SPLIT | - | Сделка совершена по причине сплита (понижения цены) акции или иного актива, по которому открыта имелась позиция на момент объявления сплита |