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

 
// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
使用例
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 

例題はポストランダムチェックから引用しています。

void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);;;;;;;
  Print((double)Str);;;
}

セミコロンはコンパイル結果に影響しません。ノーエラー
 
ルスラン

セミコロンはコンパイル結果に影響しません。エラーなし結果

ないんです。
 

関数の呼び出しによる静的変数の初期化は、文書化されていない機能で、完全に偶然に現れたものですが、現在では削除するのが非常に困難な状況です。

静的変数を初期化するためのトレーディング環境 関数の呼び出しは強く推奨されません。

 
float f = 16777217; // 16777216.0
 
ウラジーミル・カルプトフ


文意を汲み取る必要はない。このようなフレーズがあります。

テストの精度を最大限に高めるため、リアルティクモードでは分単位のバーも使用します。これらは、ティックデータのチェックと修正に使用されます。また、Strategy Testerとクライアント端末のチャートの乖離を回避することも可能です。

1分足の履歴はティックバーに対応していないということでしょうか。

実際の取引履歴に対応したデータであると仮定して、どのように可能なのでしょうか?

 
#define  DEFINE_TOSTRING(A) string ToString( const A Var ) { return((string)Var); }
  DEFINE_TOSTRING(char)
  DEFINE_TOSTRING(short)
  DEFINE_TOSTRING(int)
  DEFINE_TOSTRING(long)
  
  DEFINE_TOSTRING(uchar)
  DEFINE_TOSTRING(ushort)
  DEFINE_TOSTRING(uint)
  DEFINE_TOSTRING(ulong)
  
  DEFINE_TOSTRING(bool)
  
  DEFINE_TOSTRING(string)
  
  DEFINE_TOSTRING(double)
  DEFINE_TOSTRING(float)

  DEFINE_TOSTRING(color)  
  
  DEFINE_TOSTRING(datetime)  
#undef  DEFINE_TOSTRING

template <typename T>
string ToString( const T Var ) { return(::EnumToString(Var)); }

void OnStart()
{
  Print(ToString(1));
  Print(ToString(clrRed));
  Print(ToString(TimeCurrent()));
  Print(ToString(ACCOUNT_LOGIN));
}
 
template <typename T>
class IS
{
public:
  template <typename T1>
  static bool Object( const T1* Ptr )
  {
    return(dynamic_cast<const T*>(Ptr) != NULL);
  }
};

class CLASS1 {};
class CLASS2 : public CLASS1 {};
class CLASS3 : public CLASS1 {};

void OnStart()
{
  CLASS2 Object;
  CLASS1* Ptr = &Object;
  
  Print(IS<CLASS1>::Object(Ptr)); // true - Ptr указывает на объект класса CLASS1
  Print(IS<CLASS2>::Object(Ptr)); // true - Ptr указывает на объект класса CLASS2
  Print(IS<CLASS3>::Object(Ptr)); // false - Ptr НЕ указывает на объект класса CLASS3
}
 
テスターの速度測定に関する推奨事項

いくつかの最適化(1つではダメ!)を10パス分実行する(50だと多すぎる)。最適化キャッシュがあることに留意して、最適化の間にEAを再コンパイルするか、偽のパラメータ列挙値を変更する(これが望ましい)。上下の2つの極端な値は破棄してください。各最適化の残りの6つの値を分析する。

質量測定にマイクロセカンドタイマーを使用しないでください。通常のミリ秒のGetTickCountを使用します。ミリ秒が何百、何千という単位で計測されるような大きな範囲のテスト日を使用する。そうすれば、より正確で安定した測定が可能になります

 
fxsaber
テスターの速度測定に関する推奨事項
計測開始が最初のOnTickの始まりであることを指定するのを忘れています。計測の終了はOnDeinitの開始時です
理由: