[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 375

 
Chiripaha:

我不准备同意。- 因为从这样的立场出发,保持EA工作和计算资金和头寸都正确的逻辑就失去了。- 这就是一个。第二。- 如果我的EA正在睡觉,例如100毫秒,而另一个在同一时间开始工作,那么会发生什么,一旦这100毫秒过去,另一个将不得不停止工作......。并把它传回给中间的这个人,如此无限地进行下去......另一方面。我曾在EA中看到(并不罕见),当他们发送 "睡眠 "几分钟,并在每个执行块中多次发送。- 那么,如果所有其他的猫头鹰在这段时间都不工作,那也是有一定的问题。- 因此,这个问题是相当贴切的。我想了解这时的操作逻辑。但我没有在官方文件中看到详细的解释。

但我已准备好同意。最初,当mql4出现的时候,没有人想过多币种,也没有人想过在一个终端上有成群的猫头鹰。所以有可能这是正常现象。

Chiripaha:

但在两害之中,我会选择后者。在这种情况下,我就会把猫头鹰留下,我确信。如果你不这样做,那都是一样的:至少重新计算的正确性得到了保留,尽管它们的工作速度会减慢。

使用几个信号更有意义,即对每个符号使用不同的信号。然后我们在数组中收集我们需要的信号,所有的东西都由一个EA进行交易。既然逻辑是一样的,为什么我们需要很多EA呢?

Chiripaha:

这个问题并不像它看起来那样微不足道。- 事实是,我的实验表明,当 "允许EA交易 "的复选框被取消时,EA的工作并没有停止--所有的计算都是在每个tick上进行的。只是EA的交易不会被发送到服务器。但是,如果这些计算中充满了这些 "滑点"(不完全正确),那么如果有5-10个这样的EA,那么它们具体可以减缓当前正在交易的实际EA的执行。

是的,一些程序员将控制权放在交易的权限上,在此基础上跳过猫头鹰的工作。但它没有更经常地进行。而如果代码是封闭的,我们根本无法了解该操作是否是制动的(以及到底是哪个猫头鹰)。- 现在我将在论坛搜索中探究这个话题。有些东西已经放慢了速度。

显然是的,这个"允许EA交易"的按钮只有在EA代码规定的情况下才会如期工作。
 
Chiripaha:

我不准备同意。- 因为从这样的立场出发,保持EA工作和计算资金和头寸都正确的逻辑就失去了。- 这是一个。第二。- 如果我的EA正在睡觉,例如100毫秒,而另一个在同一时间开始工作,那么会发生什么,一旦这100毫秒过去,另一个将不得不停止工作......。并把它传回给中间的这个人,如此无限地进行下去......另一方面。我曾在EA中看到(并不罕见),当他们发送 "睡眠 "几分钟,并在每个执行块中多次发送。- 那么,如果所有其他的猫头鹰在这段时间都不工作,那也是有一定的问题。- 因此,这个问题是相当贴切的。我想了解这时的操作逻辑。但我没有在官方文件中看到详细的解释。

但在两害之中,我会选择后者。在这种情况下,我会直接留下我确定的猫头鹰。如果没有,那也一样:至少重新计算的正确性得到了保留,尽管他们的工作被放慢了。

这个问题并不像它看起来那样微不足道。- 重点是,我的实验表明,如果不勾选 "允许EA交易 "的方框,那么EA的工作不会停止--所有的计算都是以同样的方式在每个tick上进行。只是EA的交易不会被发送到服务器。但是,如果这些计算中充满了这些 "滑点"(不完全正确),那么如果有5-10个这样的EA,那么它们具体可以减缓当前正在交易的实际EA的执行。

是的,一些程序员将控制权放在交易的权限上,在此基础上跳过猫头鹰的工作。但它没有更经常地进行。而如果代码是封闭的,我们根本无法了解该操作是否是制动的(以及到底是哪个猫头鹰)。- 现在我将在论坛搜索中探究这个话题。有些东西已经放慢了速度。

感谢阿尔勒 的问题,感谢他提醒我和更新我的信息。我没有足够的经验来理解关于这个问题的内容。我现在再做一次。


在不深入了解处理器代码处理的细节的情况下,让我们停留在常见的 "画面 "上:在Sleep() 期间,有一个暂停,以便进一步处理这个代码(所有其他的代码都在独立的并行线程中处理)。
 
TarasBY:
在不涉及处理器代码处理的细节的情况下,让我们在一个共同的 "图片 "上停下来:在Sleep()期间,这个代码的进一步处理会暂停(所有其他代码都在独立的并行线程中处理)。

好了,你去吧...而这是一个 "伏击"。如果我的理解正确的话。- 让我澄清一下...

如果我没有理解错的话,伊戈尔,专家顾问根本不是按顺序处理的(就像我在实验中做的那样),而是平行处理的?而且,如果是这样的话,事实证明阿尔勒 是对的,如果每个信号都收到了合适的条件,就可以并行开出2笔交易?

这就是为什么它对我很重要--它将帮助我正确组织我的工作。当你不明白发生了什么以及如何发生的时候,你会犯一个大错误。
 

另外,一目了然,Sleep()在测试器中不起作用,甚至在文档中的某个地方也有写......

EA的开始是在Start()函数中完成的,每一个tick的到来。如果你有一打EA,试着处理这些错误,它们应该会出现的。如果你向经纪公司做了很多请求,很可能会出现 "Flow is busy "这样的错误。

关于复选框"允许EA进行交易"。是的,专家顾问工作,但只有交易被禁止,请看日志,它将说明一切。

 

你好,你能告诉我这个脚本是什么吗?

//+------------------------------------------------------------------+
//|                                                        close.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm

//+------------------------------------------------------------------+
//| script "close first market order if it is first in the list"     |
//+------------------------------------------------------------------+
int start()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
alex12:

你好,你能告诉我这个脚本是什么吗?

它说:"关闭第一个市场订单,如果它是列表中的第一个"。
 
alex12:

嗨,你能告诉我这是什么样的剧本吗?


亚历克斯,这是它在这里说的。

script "close first market order if it is first in the list"

一个脚本,如果第一个市场订单是列表中的第一个订单,则将其关闭。

也就是说,按照我对代码逻辑的理解,第一个开仓的订单更有可能被关闭。例如,如果你有10个订单未完成,那么第1个订单将关闭。即首先被打开的那一个。

 
Chiripaha:

好了,你去吧...而这是一个 "伏击"。如果我的理解正确的话。- 让我把话说清楚...

如果我没有理解错的话,伊戈尔,专家顾问不是按顺序处理的(就像我在实验中做的那样),而是平行处理的?如果是这样,那就意味着阿尔勒 是对的,如果每个信号都收到了正确的条件,那么两个交易就可以并行开仓?

为什么这对我很重要--这将有助于正确地组织工作。当你不明白发生了什么和如何发生的时候,你会犯很多错误。

谢尔盖,你从哪里得到 "所有的EA都是由终端按顺序处理的 "这样一个假设?- 在并行计算 的时代。;)

我没有进行这样的实验(确定终端处理专家顾问代码的顺序)--我的答案是在逻辑层面。我只是简单地(不涉及终端操作的细节)在交易操作中安排(强制)连续处理智能交易系统。但最正确的答案是我自己的经验。诚然,在设置经验时,人们不应忘记正确考虑输入参数,以便正确处理获得的结果。:)

P.S.我在某处读到(来自开发者),当前构建的MT4可以并行处理多达8个(如果我没记错的话)交易订单,尽管从 "我的观点 "来看,并不清楚什么是用户终端 - 它是由DC服务器("在电线的另一端")调节的。;)

 
Chiripaha:

...

也就是说,按照我对代码逻辑的理解,第一个开仓的订单更有可能被关闭。例如,如果你有10个未结订单,那么1号订单将关闭。即,首先被打开的那一个。


是的,但前提是这第一个订单是市场订单。如果是挂单,就不会发生任何事情。
 
TarasBY:

谢尔盖,你从哪里得到这样一个假设:"所有的EA都是由终端按顺序处理的"?- 在并行计算的时代。;)

我没有做这样的实验(确定终端处理专家顾问代码的顺序)--我的答案是在逻辑层面上。我只是简单地(不涉及终端操作的细节)在交易操作中安排(强制)连续处理智能交易系统。但最正确的答案是我自己的经验。诚然,在设置经验时,人们不应忘记正确考虑输入参数,以便正确处理获得的结果。:)

这就是问题的关键(对于实验参数的阶段性正确性)。这就是我问这些问题的原因,因为我对自己的能力没有把握,因此试图确定--如果这些结果出现分歧,也许我做错了什么。这更符合测试的意义--在这样的时候,一个看似写得很好的程序 会失败,你会意识到你必须去寻找某个地方。

我是偶然得到这些 "试验品 "的。我也写过并行工作的程序--我现在放弃了这种方法,因为它没有提高效率(在其他项目中可能会实现)。结果是这样的,直到第一个程序不被处理--没有获得数据--第二个程序不会启动(或者更准确地说,会失败)。这个顺序取决于我把EA块放在哪个窗口(即以什么顺序)。- 因此,我们得出结论,窗口的顺序很重要,也就是说,专家顾问是按顺序处理的,而不是平行处理的。而这个顺序取决于终端列表中的窗口编号。

这就是经验的本质。

但是,同样,也许这是对我的结果的不正确解释。这就是为什么我现在坚持不懈地试图解决这个问题,而不仅仅是 "滑"。