新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 556

 

你能告诉我为什么在我从这个网站复制的代码中,编译器在Magic 前面写着 "未声明的标识符"?

for (int pos=0; pos<=OrdersTotal()-1; pos ++) 
{
 if(OrderSelect (pos, SELECT_BY_POS)==true)
  {if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic &&OrderCloseTime()==0) // если у Вас есть отложенные ордера и открытие
  return;}
 else
  Print("OrderSelect() вернул ошибку - ",GetLastError());
}            
 //продолжае
 
VasiliKolchanov:

你能告诉我,为什么在我从这个网站复制的代码中,在Magic 之前,编译器写着 "未声明的标识符"?

这一定是因为它没有被宣布。

在开始时声明它。或作为顾问参数或常数...或变量,至少在某种程度上...实体必须存在 :-)

input int Magic=5566; // это чтобы он был в параметрах и можно поменять

// или const int Magic = 8899;

 
VasiliKolchanov:

你能告诉我为什么在我从这个网站复制的代码中,编译器在Magic 前面写着 "未声明的标识符"?

因为我使用了标识符Magic,哪种类型(和值,分别)没有在任何地方描述。你需要用这个名字声明一个变量(或常量),并给它赋值。

 
VasiliKolchanov:

你能告诉我为什么在我从这个网站复制的代码中,编译器在Magic 前面写着 "未声明的标识符"?

因为它没有在你的代码中的任何地方声明--这很明显。
 
Artyom Trishkin:
因为它没有在你的代码中任何地方声明--这很明显。
谢谢大家!
 

伙计们,告诉我如何处理,从哪里开始?

例如:我有15个0.01手的订单,我需要在某个时候关闭一些0.07手的交易。

我的问题是,我怎么能在一个OrderClose(...)中关闭7个订单或0.07个订单?

如果我一次投入0.07,它不会看到成交量为0.01的交易。

我是编程新手

 
Rustam Bikbulatov:

伙计们,告诉我如何处理,从哪里开始?

例如:我有15个0.01手的订单,我需要在某个时候关闭一些0.07手的交易。

我的问题是,我怎么能在一个OrderClose(...)中关闭7个订单或0.07个订单?

如果我一次投入0.07,它不会看到成交量为0.01的交易。

我是编程新手。

没有办法通过一个命令来关闭它。我们只能对订单进行选择,并因此而删除每个订单。而如果你删除了一个较小体积的订单,你仍然有一个开放的体积。我们将其与我们的剩余开放量进行比较。我们关闭,直到0.07的量达到极限。这是唯一的办法。

 
Rustam Bikbulatov:

伙计们,告诉我如何处理,从哪里开始?

例如:我有15个0.01手的订单,我需要在某个时候关闭一些0.07手的交易。

我的问题是,我怎样才能在一个OrderClose(...)中关闭7个订单或0.07个订单?

如果我一次投入0.07,它不会看到成交量为0.01的交易。

我是编程新手。

如果经纪人允许使用反平仓,您可以用0.07的量开一个相反的订单,从而固定这个量的盈亏价格。那么,在这之后,我们仍然需要执行7个相反的关闭操作(OrderCloseBy()函数)。使用这种方法还有一个交易操作要执行。其优点是,所有七个订单都以一个价格成交。

 

大家好。

请告知EA的速度,可能还有代码的可靠性和正确性。

我指的是在每一个tick中的开仓和挂单,如果有必要,可以改变它们。

OrderSelect 的手册中写道:"当使用SELECT_BY_POS参数按顺序选择订单,信息是按照从交易服务器 接收的顺序给出的。"

由此产生的问题是:我们能否创建一个数组,将订单的类型、进价以及例如唯一的注释储存在其中?你是否会在每个tick中运行数组,然后,如果有必要,向OrderSelect 函数寻址,使用订单的唯一注释进行选择?

 
Decromor:

大家好。

请给出您的建议,这主要是关于EA的速度,可能还有它的可靠性和书写的正确性。

我指的是在每一个tick中的开仓和挂单,如果有必要,可以改变它们。

OrderSelect 的手册中写道:"当使用SELECT_BY_POS参数按顺序选择订单,信息是按照从交易服务器 接收的顺序给出的。"

由此产生的问题是:我们能否创建一个数组,将订单的类型、进价以及例如唯一的注释储存在其中?在每一次打勾时,我们应该运行整个数组,如果有必要的话,向OrderSelect 函数寻址,通过订单的唯一注释进行选择?

OrderSelect()是在终端内部实现的,没有对服务器的请求。这就是为什么在每次打勾时调用订单列表没有什么不好。这正是大多数EA的做法。

而你关于阵列的问题与程序的架构有关。如果是操作大量订单的复杂EA,这绝对是必要的。如果专家顾问用简单的逻辑操作单一的订单,那么这个阵列就是多余的了。

只值得一提的是,即使我们有一个订单数组,我们也不能不调用OrderSelect()。毕竟,我们必须在每次打钩时检查订单是否仍然存在。而且,它的参数也可以改变。

原因: