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

 
Maxim Kuznetsov:

这是什么大法?有一份官方文件--它和你的一模一样......其他的都是假的。

1.值得在OnCalculate中对所有使用的数组进行序列化设置

2.在进入循环之前,把buff[length]=Bid+size;--你会得到你想要的大约结果。一条弯曲的线,最后是一个Bid+size的 "面罩"。

3.注意阵列的边界。当然,rate_total < length,但你不能拿它开玩笑 :-)

换句话说,你必须在一开始就写ArraySetAsSeries,然后从那里开始跳舞?

哦,是的,我描述错了。你需要这条线在图表上向左走,并在每个刻度 上更新它

 
YanSay:

非常感谢您的详细答复!

按照你的建议,我拆分了树枝,一切顺利。

我面临一个问题,即同时打开10-15个挂单,我通过在它后面添加你的代码解决了这个问题。

这也不是一个解决方案。该订单可以手动打开或由另一个EA打开。因此,正在开发的EA将不会打开任何东西。因此,我们需要计算专家顾问所开的订单数量。有了这些数据,就可以决定是否开出一个订单。

我相信有一个更好的方法。

关于你的代码,请解释什么是1; i >=0; --i?

这就是标准的订单循环。OrdersTotal()是订单的数量。订单的索引是从零开始的。因此,如果有1个订单,它的索引将是0,而OrdersTotal()将返回1。因此,循环应该从索引开始,它比订单的数量少1。我们得到OrdersTotal() - 1。第二个操作数是循环体执行的条件。在这种情况下,循环将在i = -1处终止。第三个操作数是执行循环跳转到下一个索引(减少1)。

你可以在文档 中阅读关于循环运算符的内容。

 
Ihor Herasko:

这也不是一个选项。该订单可以手动打开或由另一个EA打开。因此,正在开发的EA将不会打开任何东西。因此,我们需要计算专家顾问所开的订单数量。有了这些数据,我们将不得不决定是否开出一个订单。

我试过这种方式,但它又开始每1个信号开10-15个订单。

if ((OrdersTotal ()>0) && (OrderMagicNumber() != 100)) return;

第三个操作数是移动到下一个索引(减少1)。

所以它是从末端看所有的订单?

 
YanSay:

试过这个方法,但它又开始为1个信号开10-15个订单。

所以它是从末端看所有的订单?

要使用OrderMagicNumber()函数,你应该首先选择一个订单。收集一个人的订单信息的标准循环是这样的(例如,计算一个人的订单数量)。

int nCnt = 0;    // Счетчик количества своих ордеров
for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))
         continue;

      if (OrderSymbol() != Symbol())
         continue;

      if (OrderMagicNumber() != <значение ID ордеров эксперта>)
         continue;

      ++nCnt;
   }

这段代码执行后,变量nCnt将包含专家顾问的工作订单数量。

 
Ihor Herasko:

我的解决方法如下...


谢谢你。

 
Ihor Herasko:

要使用OrderMagicNumber()函数,你必须首先选择一个订单。收集自己的订单信息的标准周期是这样的(例如,计算自己的订单数量)。

这段代码执行后,变量nCnt将包含EA的工作单数量。

int nCnt = 0;    // Счетчик количества своих ордеров
for (int i = OrdersTotal() - 1; i >= 0; i--)
 {
  if (!OrderSelect(i, SELECT_BY_POS))
     continue;
  if (OrderSymbol() != Symbol())
     continue;
  if (OrderMagicNumber() != MagicNumber)
     continue;
  ++nCnt;
  {
   if (nCnt>0)
      return;
  }
 }

非常感谢您!它成功了!

你能告诉我们,++nCnt是否是将获得的订单数替换成nCnt变量本身?

 
YanSay:

非常感谢您!它起作用了。

你能告诉我,++nCnt是否是将收到的订单数代入nCnt变量本身?

在所有这些情况下,请立即查看文件。))

 
YanSay:

非常感谢您!它起作用了。

你能告诉我++nCnt是否是将收到的订单数替换成nCnt变量本身?

该语言有完整的文档,只要看一下网站的顶部菜单就可以了。

不要懒得看,不可能把所有东西都记在脑子里。 几乎每个人,不仅是初学者,总是把它管理在那里。

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
 
Artyom Trishkin:

有关于该语言的完整文档,只要看看网站的顶部菜单就可以了。

不要懒得去读它--你不可能把所有东西都记在脑子里--它几乎对每个人都是如此--不仅仅是新手。

谢谢你。我并不总是确定该看哪个部分,我还是不太会看,而且F1编辑也不总是把我送到正确的地方)

我将尽量不对愚蠢的问题进行打扰,感谢您的耐心等待)

 
Roman Sharanov:

1.你的意思是在开始时写ArraySetAsSeries,然后从那里开始?

哦,是的,我描述错了。你想让这条线在图表上向左走,并随着每个刻度 的变化而更新。

所以要画一条水平线。

你为什么需要任何缓冲区和它们的重新计算?ObjectSetDoubke(0,myHLine,OBJPROP_PRICE,concrete_price_value)。

用户会看到这条线,你不会浪费时间重新计算缓冲区,每个人都很高兴,并愉快地散去。

PS/搞清楚了--指标缓冲区,它是用来传输(分享/共享)首先进行的计算结果的。画一条长度为N的水平线是不同的

原因: