mql5言語の特徴、微妙なニュアンスとテクニック - ページ 58

 
テスターでは、TimeCurrent()ではなく、TimeTradeServer() を介してのみ正しく現在時刻を知ることが可能です。
 
fxsaber
テスターでは、TimeCurrent()ではなく、TimeTradeServer() を介してのみ正しく現在時刻を知ることが可能です。
これは非常に疑問の残る発言です。
 
スラバ
かなり疑問のある発言。
void OnTick()
{
  Print(TimeCurrent());
  
  Sleep(3600 * 1000);
  
  Print(TimeCurrent());
  Print(TimeTradeServer());    
  
  ExpertRemove();
}

結果

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は、テスター(サーバー)ではなく、主人公の最後のティックの時間を返します。現在の サーバーの時刻を ミリ秒単位で正確に知ることはできないのです。

 

こんにちは、私はサービスアレイについて読みました https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint (最後の例で)。

double Ups[]、Downs[]。
datetime 時刻[]。

全サービスアレイの一覧はどこかにあるのでしょうか?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Графические объекты Text, Label, Bitmap и Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP и OBJ_BITMAP_LABEL) могут иметь один из 9 различных способов привязки своих координат, задаваемых свойством OBJPROP_ANCHOR. – объекты имеет ширину и высоту. Если указано "только для чтения", то это означает, что значения ширины и высоты вычисляются...
 
私はこの信号に従っているもう一週間、私は従うでしょう。

をご覧ください。

en/signals/352123

 

保護されたメソッド/フィールドを使用できるようにする言語技術。

#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
  }
}
 
このトピックに関係のないコメントは、「MQL4に関する初心者の質問、アルゴリズムやコードに関するヘルプや議論」に移動しました。
 
この特殊性から

テンプレートパラメータの型付けは厳密であり,暗黙の変換を伴う特殊化は容認されない

を使えば、入力パラメータとして基底クラスのポインタだけを受け取り、コンパイル時にその子孫を拒否するような関数を書くことができます。


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)); // только явное приведение разрешено
}
 
const-objectクラスの フィールドを変更したり、const-method以外のメソッドを呼び出したりすることは可能ですか?-どうぞ!
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
}

私自身、この仕掛けは好きではありません。不正アクセスに対する保険に加入していると思ったのですが。悔しいけど!もちろん、const-structuresでは動作しない。だから、この抜け道は覚えておいてほしい。

 
理由: