我怎样才能持续地通过列举? - 页 5

 
Sergei Vladimirov:
我为什么要这样做?
MIX的TickSize是25,Digits是0。对一个不是25的倍数的整数价格进行规范化处理将导致OrderSend 错误。
 
fxsaber:
MIX的TickSize是25,Digits是0。对一个不是25的倍数的整数价格进行规范化处理将导致OrderSend错误。
刚才在一个相邻的主题中建议将电脑淹没在浴缸中,那么一切都会变得更加不可信。
 
Dmitry Fedoseev:
刚才在一个相邻的主题中建议将电脑淹没在浴缸中,那么一切都会变得更加不可信。
不幸的是,你是个口无遮拦的人。我没有创造任何东西,但我有权利批评--关于你。
 
fxsaber:
MIX的TickSize是25,Digits是0。对一个不是25的倍数的整数价格进行规范化处理将导致OrderSend错误。
那么,按照这种逻辑,即使在0.25步的归一化中也会产生错误。归一化的目的不是将价格调整到某个奇特的价格档次,而是将浮点数四舍五入 到一个特定的精度。它不会引起任何错误。
 
Sergei Vladimirov:
那么,按照这种逻辑,即使在0.25步的情况下,规范化也会产生错误。归一化的目的不是将价格调整到某个奇特的价格档次,而是将浮点数四舍五入 到一个特定的精度。它不会导致任何错误。
正常化最初只为一件事而引入(在帮助中也提到了)--交易功能。
 
Vladimir Batrudinov:

大概有两个函数需要输入。1 - 返回枚举中元素的数量,2 - 按编号返回元素...


在枚举中,你可以给元素分配任何值,例如,如下所示。一个枚举不是一个数组。

enum crazy
{
    e1 = 100500,
    e2 = -200,
    e3 = -100500,
    e4 = 0
};


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
    int z10 = e2;
    int z1 = e4;
  
}

像C#这样的语言需要指定枚举名称,而C++和MQL4/5则相当自由地处理枚举。以防万一,这句废话在MQL5和C++上都能编译。

 
Alexey Volchanskiy:

在枚举中,你可以给元素分配任何值,例如以下。枚举不是一个数组。

那又怎么样呢? 就是按申报顺序去看那些元素。
 
Alexey Navoykov:
所以呢,就是要按照申报的顺序去看这些内容。
哦,对了,我读错了问题,我想,是价值观的问题。
 

给程序员的一个提示。

#define  ENUM_QQ             \
  ENUM_QQ_HELPER(el_1, 3)   \
  ENUM_QQ_HELPER(el_2, 9)   \
  ENUM_QQ_HELPER(el_3, 38)  \
  ENUM_QQ_HELPER(el_4, 1)   

enum Enum_qq
{
#define  ENUM_QQ_HELPER(el, val) el = val,
  ENUM_QQ
#undef  ENUM_QQ_HELPER
};

void get_enumqq_array(int &ar[])
{
  int temp[] = {
#define  ENUM_QQ_HELPER(el, val) el,
  ENUM_QQ
#undef  ENUM_QQ_HELPER
  };
  ArrayResize(ar, ArraySize(temp));
  for(int i = 0;  i < ArraySize(temp);  ++i)
    ar[i] = temp[i];
}

void OnStart()
{
  int q[];
  get_enumqq_array(q);
  for(int i = 0;  i < ArraySize(q);  ++i)
    Alert(q[i]);
}


现在,如果我们需要编辑一个枚举,我们必须在一个地方编辑它一次。我们需要添加一个新元素,例如 element_new = 56,我们添加

ENUM_QQ_HELPER(element_new , 56)

而且不用费心去编辑get_enumqq_array()。该技术被称为X宏https://en.wikipedia.org/wiki/X_Macro。如果开发者愿意,他们可以轻松地以这种方式修改标准枚举。

也许不是很明显,列举的结果是这样的。

enum Enum_qq
{
   el_1 = 3
   el_2 = 9
   el_3 = 38
   el_4 = 1   
};
 
Vasiliy Sokolov:

比方说,我们有一个枚举。我们怎样才能逐一获得这个枚举的所有可能值,例如在一个循环中?

即tf1++必须依次返回PERIOD_M1, PERIOD_M2, PERIOD_M5...。我认为这不能用语言工具来完成。

但理论上,如果有一个ENUM_MYENUM,(ENUM_MYENUM)INT_MAX应该给出枚举的最大值。否则这就是一个类型转换的错误。这只是因为类型转换操作符必须 返回这个非常类型的值。在上下文中不一定有效,但对类型有效。