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);;;
}

分号不影响编译结果 ....没有错误
 
ruslan:

分号不影响编译结果 ....结果无误

没有任何。
 

通过调用函数来初始化静态变量是一个没有记录的特性,它的出现完全是偶然的,但现在要删除它是非常困难的。

强烈不鼓励调用交易环境 函数来初始化静态变量

 
float f = 16777217; // 16777216.0
 
弗拉基米尔-卡尔普托夫


没有必要断章取义。这句话是这样说的。

为了确保测试的最大准确性,在实际的tick模式中也使用了分钟条。这些都是用来检查和纠正打勾数据的。它还可以避免策略测试器和客户终端中的图表出现分歧。

这是否意味着一分钟条形图的历史不对应于刻度条?

这怎么可能......假设数据对应的是真实的交易历史?

 
#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
}
 
关于测量测试仪速度的建议

运行几个优化(不是一个!)10次(50次就太多了)。请记住,有优化缓存,所以要么在优化之间重新编译EA,要么改变假的参数枚举值(这是最好的)。顶部和底部的2个极端值应被舍弃。分析每个优化的剩余6个值。

不要使用微秒计时器进行质量测量。使用常规的毫秒级GetTickCount。使用如此大范围的测试日期,使毫秒以数百和数千为单位计算。然后你会得到更准确和稳定的测量。

 
fxsaber:
关于测量测试仪速度的建议
你忘了指定测量的开始是在第一个OnTick的开始。测量的结束是在OnDeinit的开始。