[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 604

 
rigonich:


重要的不是时间本身,而是在一定时间内是否做了什么,这是你应该检查的。

P.S. 而且你不需要定义N,只要做你的检查if(TimeCurrent() >= iTime(Symbol(),1440,0)),直到你想要的动作完成(设置一个订单)。


但如果你这样设定。

if(TimeCurrent() >= iTime(Symbol(),1440,0)

这样一来,信号将在条形图打开后一直有效。到无穷大。我为什么需要它?最主要的是在开盘时开一单,而不是一包。

 
hoz:

但如果你这样说。

这样一来,信号将在条形图打开后永久有效,并...直到无穷大。我需要它来做什么?最主要的是在酒吧开业时开一单,而不是开一包。


И ...到无穷大--这是一个特殊情况,如果你的必要条件--订单设置--今天或明天不会被满足......

而为了避免开包,我们应该在每次开包前简单地检查一下订单是否被打开或在你需要的期间被打开过。

 
rigonich:


在实践中,这在所有与订单打交道的操作中都会用到。 你必须首先选择订单,然后对其进行处理(查看订单信息,向服务器发送交易订单以修改或关闭它)在终端中有两种选择订单的方式,一种是通过票据,即在服务器上分配给订单的编号,对某一特定订单而言,该编号不会改变,另一种是通过订单编号(索引),该订单存储在终端下。这个数字可能会在每一个刻度上发生变化,这取决于有什么以及有多少订单被打开、设置、关闭或删除。

为了处理订单,实施了订单评估的循环。


我知道如何启动这样一个循环。

for(int i=0; i<total; i++)

{

如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

我怎样才能让一个变量在最后两笔交易亏损时给出 "true",而在盈利时给出 "false"?

或者这样。

当交易被止损平仓时--某处的复选框 counter.... 应该被打开但我怎样才能抓住关闭的时刻呢?

 
rigonich:


这是定义订单在数组中的位置的索引,数组中存储了终端中存在的订单数据。

下划线的内容(在SELECT_BY_POS下) bool OrderSelect(int index, int select, int pool=MODE_TRADES)



我正确地理解,我关闭的最后一个订单的索引是1。而在关闭下一个后,指数2......以此类推,每一个新的平仓?每天的总数呢?昨天的交易算吗? 还是每天都要重新开始?
 
lottamer:


我知道如何启动这样一个循环...

for(int i=0; i<total; i++)

{

如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

我怎样才能让一个变量在最后两笔交易亏损时给出 "true",而在盈利时给出 "false"?

或者这样。

当交易被止损平仓时--某处的复选框 counter.... 应该被打开但我怎样才能抓住关闭的时刻呢?


对于这些问题,有几个解决方案。 最简单的方法是在循环中浏览所有的订单,寻找最后关闭的订单,看看你的订单是否在止损或盈利时关闭,挑选它的票据,重新开始循环,如果你保存的票据的订单 被保存,跳过它,找到最后关闭的订单,但有一个...

P.S. 而不是MODE_TRADES,而是MODE_HISTORY。

 
但另一个问题...SecondsAfterOpenLastPos() 函数。如果EA被禁用,这个函数是否会返回昨天最后一次关闭的交易的值?(无法检查 - 市场停滞不前)
 
rigonich:


这些问题有几个解决方案,最简单的可能是以下方法:浏览循环中的所有订单,寻找最后关闭的订单,使用止损或盈利找到该订单,保存其票据,重新启动循环,如果你保存的票据的订单被选中,跳过它,找到最后关闭的订单,但有一个...

P.S. 而不是MODE_TRADES,而是MODE_HISTORY。


逻辑很清楚....,但对我来说,不可能把它写在我的代码中......它太复杂了......我以前从未使用过暴力循环......我只是不需要它......。所以这是一个黑暗的森林:))而我所看到的循环对我来说不是很清楚......很明显,他们尝试了一些东西......仅此而已。

你能不能给我一个最简单的例子......但要有解释,让我明白循环中发生了什么,在哪里发生?

 
lottamer:

也许你可以从这里重新做两个选项 https://forum.mql4.com/ru/38949/page5#434244

函数TimeOpenLastPos()。

该函数返回最后一次开仓的时间。

我们需要一个最后一个关闭的职位的开放时间。

函数SecondsAfterOpenLastPos()。

该函数返回自上一次打开位置以来的秒数。

而且必须以小时....,而不是以秒为单位。

这个更接近。

第一个 选项可以用最小的改动来使用(寻找历史和你需要的东西)。你想让它每天开出的交易不超过一个吗?
 
lottamer:
但另一个问题...SecondsAfterOpenLastPos() 函数。如果EA被禁用,这个函数是否会返回昨天最后一次关闭的交易的值?(无法检查 - 市场停滞不前)


它将。

更确切地说,它将是,但不是封闭的,而是开放的。

 
rigonich:


在实践中,这在所有与订单打交道的操作中都会用到。 你必须首先选择一个订单,然后对其进行处理(查看订单信息,向服务器发送交易订单以修改或关闭它)在终端中有两种选择订单的方式,一种是通过票据,即在服务器上分配给订单的编号,对某一特定订单而言,该编号不会改变,另一种是通过订单编号(索引),该订单在终端中储存在该编号之下。这个数字可能会在每一个刻度上发生变化,这取决于有什么以及有多少订单被打开、设置、关闭或删除。

为了处理订单,有订单评估的周期。


好吧,例如,我在D1开盘时有一个限价单。TP和SL可能在几天内不工作,如果我们检查一个订单,它将是可用的,我们不会开一个新的订单。所以这不是好事。因此,潜在的交易将被错过。