返回2个结果的函数? - 页 4

 

gordon: It doesn't imply anything, but specifically in both C and C++ arrays are passed by reference as well (technically a pointer to the array's first element is passed, that pointer is passed by value).

谢谢。我也需要补习一下关于指针的知识。

Matutin。 非常有趣!但是,EA需要参数。不幸的是,EA需要参数,有时还需要很多,所以我们不能避免它们,必须注意https://www.mql4.com/go?http://www.c2.com/cgi/wiki?GlobalVariablesAreBad 中提到的所有原因。

为什么不写到文件中,让每个EA都能读取它们。

戈登 :这个讨论是关于定义在全局范围内的变量(在特殊函数start(), init(), deinit()之外声明),而不是关于GV的。不要把这两者混为一谈。

我总是说全局范围的变量和全局变量,以避免混淆。MT4和MT5使用不同的术语可以做得更好。

 
gordon:
为什么要解决一个不存在的问题?为什么要重新发明轮子?为什么要编造不明确的代码,而这些代码只能在有限的情况下工作呢?


因为我写了一个这样的函数,它在一个数组1到7里有几条移动平均线,如果任何一条被信号线穿过,它就把数组索引*1000+方向(0代表向上,1代表向下)*100,这为每个订单返回一个唯一的ID号码,其中包含三个信息。

例如,当第三个MA被向下穿越时,一个编号为3100的订单开仓信号被创建,如果第二个MA被向上穿越,编号为2000的信号被创建。

这意味着我的过线功能可以将这个数字发送给我的开仓订单功能,因为它现在包含3个信息。首先,它本身就是一个神奇的数字,其次,ordertype = signal%1000/100的结果是1还是0,决定了它应该是一个卖单还是一个买单。

因此,magicnumber包含了关于哪条MA线被越过以产生它的信息。 int MA=magicnumber/1000 结果是一个1到7的值,对应于移动平均线的原始阵列索引。

第三,魔法号码是每个订单的唯一标识符,可以防止由于重复信号而导致多个订单被打开,因为两个具有相同魔法号码的订单是不允许的。

在程序的后面,如果我想根据订单的类型 进行操作,我做type=(magicnumber%1000)/100;如果结果是1,则是卖出订单,如果是0,则是买入订单,如果我想知道哪个MA线创造了这个订单,我做int MA=magicnumber/1000,显然,interger放弃了任何浮点,给我原始MA索引1到7

我认为这是一个很好的方法,可以从一个单一的函数返回中创建多个可检索和可用的信息。

 
SDC:

嗯,因为[...] 。

这很好,但还是那句话--为什么不直接用直接的、普遍的、明确的和公认的方式来做。为什么要这么麻烦?你不觉得这更简单吗。

int  a,b;
void MyFunc( int& a, int& b )
   {
   //... function result should be 'passed' to a and b
 

我不知道,我想这也会起作用,只是当时看起来是个好主意,这主要是因为我正在开发一个EA,以同时管理几个不同的交易策略,所以我制定了那个系统,根据它们属于哪个交易标准,用魔法号码来管理订单,所以例如你可以关闭所有由55期移动平均线交叉开出的卖单,独立于所有其他订单,因为55MA是指数3。 这些订单的神奇数字将基于3000,然后我意识到我可以更进一步,将订单类型也纳入其中,所以该MA线上的卖出订单有神奇数字3100 3101 3102等,这意味着你可以通过特殊的神奇数字识别所有由该交易标准打开的订单,或由该交易标准打开的所有买入订单,或由任何交易标准打开的所有卖出订单等等。