Características da linguagem mql5, subtilezas e técnicas - página 58

 
No testador, só é possível descobrir a hora atual corretamente através doTimeTradeServer(), não do TimeCurrent().
 
fxsaber:
No testador, só é possível descobrir a hora atual corretamente através doTimeTradeServer(), não do TimeCurrent().
Esta é uma afirmação muito questionável.
 
Slava:
Uma afirmação bastante questionável.
void OnTick()
{
  Print(TimeCurrent());
  
  Sleep(3600 * 1000);
  
  Print(TimeCurrent());
  Print(TimeTradeServer());    
  
  ExpertRemove();
}

Resultado

2017.10.02 00:03:03   2017.10.02 00:03:03
2017.10.02 01:03:03   2017.10.02 01:02:59
2017.10.02 01:03:03   2017.10.02 01:03:03


TimeCurrent retorna a hora do último tick do personagem principal, não do testador (servidor). Não é possível saber o tempo exacto actual do servidor em milissegundos.

 

Olá . li sobre as arrays de serviço https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint ( no último exemplo)

duplo Ups[],Downs[];
data/hora[];

há uma lista de todas as arrays de serviço em algum lugar?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Графические объекты Text, Label, Bitmap и Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP и OBJ_BITMAP_LABEL) могут иметь один из 9 различных способов привязки своих координат, задаваемых свойством OBJPROP_ANCHOR. – объекты имеет ширину и высоту. Если указано "только для чтения", то это означает, что значения ширины и высоты вычисляются...
 
tenho estado a seguir este sinal mais uma semana que irei seguir

e depois vamos ver

pt/sinals/352123

 

Uma técnica de linguagem que permite o uso de métodos/campos protegidos.

Exemplo

#include <Canvas\Canvas.mqh>

// Помещает картинку в ресурс
bool ToResource( const string Name, const uint &Data[], const uint Width )
{
  return(::ResourceCreate(Name, Data, Width, (Width == 0) ? ::ArraySize(Data) : ::ArraySize(Data) / Width, 0, 0, Width, ::COLOR_FORMAT_ARGB_NORMALIZE));
}

// Прием использования protected полей/методов
class CANVAS : public CCanvas
{
public:
  // Загрузка картинки из BMP-файла
  static bool BMPToArray( const string FileName, uint &Data[], int &Width )
  {
    CANVAS Canvas;
    
    const bool Res = Canvas.LoadFromFile(FileName);
    
    if (Res)
    {
      ArrayCopy(Data, Canvas.m_pixels);
      
      Width = Canvas.m_width;
    }
    
    return(Res);
  }
};

// Грузим BMP с альфаканалом не из ресурса, а из файла
void OnStart()
{     
  const string Resource = "::Resource";
         
  uint Data[], Width;   
  
  if (CANVAS::BMPToArray("Picture.bmp", Data, Width) &&
      ToResource(Resource, Data, Width))
  {
   ObjectCreate(0, __FILE__, OBJ_BITMAP_LABEL, 0, 0, 0);   
   ObjectSetString(0, __FILE__, OBJPROP_BMPFILE, Resource);
        
   // Сконвертировали BMP в PNG (без учета прозрачности)
   BitmapObjectToFile(0, __FILE__, "Picture.png"); // https://www.mql5.com/ru/forum/170952/page57#comment_5985505
  }
}
 
Comentários não relacionados a este tópico foram movidos para"Quaisquer perguntas de novatos sobre MQL4, ajuda e discussão sobre algoritmos e códigos".
 
Devido a esta peculiaridade

a digitação dos parâmetros do modelo é rígida, a especialização com conversão implícita é inaceitável

é possível escrever funções que tomam apenas indicações de uma classe base como parâmetros de entrada, e rejeitar descendentes na fase de compilação.


Exemplo

template <typename T>
void StrongCondition( T, T ) {}

class A
{
public:
  int i;
  
  template <typename T>  
  void SetStong( T Value )
  {
    StrongCondition(&this, Value);
    
    this.i = Value.i;
  }
  
  void Set( A* Value )
  {
    this.i = Value.i;
  }
};

class B : public A {};

void OnStart()
{
  A a;
  B b;
  
  a.Set(&b);   
  a.SetStong(&a);
  
  a.SetStong(&b);       // потомки в явном виде запрещены
  a.SetStong((A*)(&b)); // только явное приведение разрешено
}
 
Posso mudar os camposda classe const-object ou chamar os seus métodos não const-object? -Você pode!
template <typename T>
T GetMe( const T Ptr )
{
  return((T)Ptr);
}

class A
{
public:  
  int i;
};

void OnStart()
{
  const A a;

  GetMe(&a).i = 1;
  
  Print(a.i); // 1
}

Eu próprio não gosto deste truque. Pensei que estava segurado contra o acesso não autorizado. Que chatice, no entanto! Claro, não funciona com estruturas de construção. Por isso, tenha em mente esta brecha.

 
Razão: