21 julho 2017
21 julho 2017







union LongDouble { long long_value; double double_value; };Em contraste com a estrutura, os diferentes membros da união pertencem ao mesmo local de memória. Neste exemplo, é declarada a união LongDouble, em que o valor do tipo long e o valor do tipo double dividem a mesma área de memória. É importante entender que é impossível fazer com que esta união armazene simultaneamente um valor inteiro long e um real double (como seria na estrutura), porque as variáveis double_value e long_value se sobrepõem (na memória). Por outro lado, o programa MQL5 é capaz de processar os dados da união como um número inteiro (long) ou um real (double) a qualquer momento. Consequentemente, a união permite a obtenção de dois (ou mais) variantes de representação da mesma sequência de dados.
union LongDouble
{
long long_value;
double double_value;
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
LongDouble lb;
//--- obtemos e exibimos o número inválido -nan(ind)
lb.double_value=MathArcsin(2.0);
printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value);
//--- maior número normalizado (DBL_MAX)
lb.long_value=0x7FEFFFFFFFFFFFFF;
printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value);
//--- menor positivo normalizado (DBL_MIN)
lb.long_value=0x0010000000000000;
printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value);
}
/* Resultado de execução
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);}; //--- construtor por padrão Foo(void){value=-1;}; //--- construtor com parâmetros Foo(int v){value=v;}; }; //+------------------------------------------------------------------+ //| estrutura contendo o objeto do tipo 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()); /* Resultado de execução; 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 */ }No operador implícito, é realizada a cópia de objetos recebidos.
| ENUM_POSITION_REASON | ENUM_DEAL_REASON | ENUM_ORDER_REASON | Descrição de razões |
|---|---|---|---|
| POSITION_REASON_CLIENT | DEAL_REASON_CLIENT | ORDER_REASON_CLIENT | Transação realizada como resultado da ativação de uma ordem colocada a partir de um terminal desktop |
| POSITION_REASON_MOBILE | DEAL_REASON_MOBILE | ORDER_REASON_MOBILE | Transação realizada como resultado da ativação de uma ordem colocada a partir de um aplicativo móvel |
| POSITION_REASON_WEB | DEAL_REASON_WEB | ORDER_REASON_WEB | Transação realizada como resultado da ativação de uma ordem colocada a partir da plataforma web |
| POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | Transação realizada como resultado da ativação de uma ordem colocada a partir de um programa MQL5, Expert Advisor ou script |
| - | DEAL_REASON_SL | ORDER_REASON_SL | Transação realizada como resultado da ativação de uma ordem Stop Loss |
| - | DEAL_REASON_TP | ORDER_REASON_TP | Transação realizada como resultado da ativação de uma ordem Stop Loss |
| - | DEAL_REASON_SO | ORDER_REASON_SO | Transação realizada como resultado do evento Stop Out |
| - | DEAL_REASON_ROLLOVER | - | Transação realizada devido à transferência da posição |
| - | DEAL_REASON_VMARGIN | - | Transação realizada após creditada/debitada a margem de variação |
| - | DEAL_REASON_SPLIT | - | Transação realizada após o fracionamento (redução do preço) do ativo que tinha a posição aberta durante a declaração do fracionamento |
