在MQL5中一起学习和写作 - 页 17

 
Yedelkin:

关于Sleep()函数 的问题。我是否正确理解,在专家顾问中使用这个函数,只停止执行这个EA,并将CPU资源(内核)转移到这个内核的任务列表中的下一个任务?换句话说,Sleep()函数并没有使正在处理专家顾问的线程本身变慢,而是作为当前专家顾问和由特定内核拾取的其他程序之间的切换,这是否正确?

据我所知,如果我设置Sleep(0),它就会切换。 如果我设置Sleep(milliseconds),EA就会在指定的毫秒数内停止。

同时,据我所知,每个专家顾问都是一个独立的线程,每个线程都需要处理器时间(根据帮助,线程状态的检查每100毫秒进行一次)。

因此,如果一个线程不活动,不管是什么原因,CPU时间会被传递给另一个线程,并且在100毫秒后检查 "决定睡觉 "的线程的状态。

PS

关于线程之间的核心分配,由开发者决定。

 
Yedelkin:

关于Sleep()函数 的问题。我是否正确地理解,在专家顾问中使用这个函数只停止执行该EA,并将CPU资源(内核)转移到该内核的任务列表中的下一个任务?换句话说,Sleep()函数并没有使正在处理专家顾问的线程本身变慢,而是作为当前专家顾问和由特定内核拾取的其他程序之间的开关,这是否正确?

每个专家都在自己的线程中执行。Sleep()使这个线程变慢。没有与核心的结合(亲和力面具)。
 
Yedelkin:

关于MqlTradeResult结构 的问题。我没有在其中发现时间字段--基本请求检查成功的时间(或类似的东西)。 有人记得是否有关于在MqlTradeResult结构中引入额外时间字段的问题吗?如果一个挂单突然进入历史,需要拉出该挂单。

该要求并不明确。如果订单已被打开,它将存储打开时间。为什么你需要服务器的响应时间
 
sergeev:
该要求并不明确。如果该订单被打开,那么它将存储打开时间。为什么你需要服务器的响应时间

订单的命运是由票据来追踪的,对吗?然而,OrderSend()函数返回的票据并不保证交易操作的成功执行。根据程序的逻辑,只需检查我的票是否出现在历史订单中,以及下单后有哪些交易。为此,我想上传最小量的历史记录到历史缓存中--即从服务器对初始请求的响应开始,而不是更多。 我们不需要处理未结 订单的属性--那将是多余的代码。该订单甚至可能无法打开。因此,服务器的响应时间需要使用HistorySelect()函数来下载新鲜历史的最佳大小(数量)。那么,关于 "从历史中取出一个订单",是否清楚?

据我所知,在MqlTradeResult结构 中引入一个额外的时间字段的问题还没有被提出。

 

关于Sleep(),我的理解是,专家顾问的线程延迟不会影响其他程序的执行。谢谢。

 

另一个关于Sleep()的问题。评论说:"你不能从自定义指标 中调用Sleep()函数,因为指标是在界面线程中执行的,它不应该减慢速度"。我看了论坛,但还是不明白以下内容:"你不能从指标中调用它 "这句话--它是预设的禁令还是对程序员的建议?

 
Yedelkin:

订单的命运是由票据来追踪的,对吗?然而,OrderSend() 票的返回并不保证交易的成功执行。

ahem....你应该看一下关于发送订单的教科书。
 
Yedelkin:

另一个关于Sleep()的问题。评论说:"你不能从自定义指标 中调用Sleep()函数,因为指标是在界面线程中执行的,它不应该减慢速度"。我看了论坛,但还是不明白以下内容:"你不能从指标中调用它 "这句话--它是预设的禁令还是对程序员的建议?

禁止
 
sergeev:
xxm....你应该看一下关于发送订单的教科书。

好吧,你懂的。我一丝不苟地告诉你,你可以检查:OrderSend()函数 返回一个布尔值。在这种情况下,如果请求被成功检查,订单票就被写入MqlResult结构的变量中。我称其为 "返单功能",为自己。以下是来源的链接:"当使用OrderSend()函数发送购买请求时,如果请求被成功检查,你可以立即看到创建订单的票据

对于有关 "禁止 "的答复--谢谢,明白了。

 
Yedelkin:

好吧,你懂的。

不幸的是,我还是不明白。

由于某种原因,你需要在返回结构中有一个 "时间 "字段。按照出现的顺序使用时间。这足以控制一点历史。