if (OrdersTotal()>0)
{ for (i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{ if (OrderSymbol()==Symbol())
{ if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
{ Closed_bar=OrderOpenTime();
if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
return(0);
} }
} } }
if (OrdersTotal()>0)
{ for (i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{ if (OrderSymbol()==Symbol())
{ if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
{ Closed_bar=OrderOpenTime();
if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
return(0);
} }
} } }
由于该条件不是严格的二择一(如果至少有1个元素为真,则该条件始终为真),处理该条件的最合乎逻辑的方法是首先将分子(a>b || c>d) 划分为原子"a>b "和 "c>d", 然后按顺序循环原子以检查真假。而如果下一个原子为真,则立即中断循环,允许程序做紧跟在大括号之后的动作--也就是说,不搜索其余的原子,因为不需要。而且,无论我们是从头到尾搜索,还是从创建的原子列表的结尾到开头搜索,都不重要。只有开发者才能向你展示搜索方向(元引号)。 但你为什么需要它呢?你 在 编写自己的编译器 吗?
我想到:如果在TC逻辑中,条件 a>b 为真要比 c>d==真 多得多,那么如何检查这两个条件以加快程序可能很重要
实际上表达式是这样的:如果(a>b ||(a<=b && c>d))。 如果从左到右进行真值检验,从程序速度的角度看,表达式a<=b 将是多余的。问题是到底是从左到右还是反过来,或者在不同的情况下有不同的说法。
实际上表达式是这样的:如果(a>b ||(a<=b && c>d))。 如果从左到右进行真值检验,从加快程序速度的角度看,表达式a<=b 将是多余的。问题只是从左到右还是从右到左,或者在不同情况下的不同。
能否请您解释一下EA不开单和写错误 的原因133
有必要将开仓时间与当前的开仓时间Time[0]进行比较。如果开仓的时间多于或等于条形图开仓的时间--专家顾问不开新仓。当一个新的条形图出现时,Time[0]将改变其值为一个较晚的时间,这种比较将显示在当前(新)条形图上尚未开仓,我们可以交易。
顺便说一下,你的问题也可以分解成2个小问题。
1.在当前的条形图上,一个头寸被打开并成功关闭,但我们仍在等待一个新的条形图。
2.在当前柱状图上,一个头寸被打开并成功关闭,然后我们可以在同一柱状图上再次打开一个头寸(也就是说,一次可以在一个柱状图上打开一个头寸)。
我有一个问题:在一个相同的条形图的几分钟内,开立订单的条件变为真实,订单打开。然后它失败了,再次打开第二个订单。我如何解决这个问题?我只想到每个条形图开立一次订单 ,也许还有其他选择?
我看到你在使用一个允许/不允许开仓 的标志。如果不知道这面旗子的情况,就不可能告诉你任何事情。在我的EA中,我使用了2种方法来开仓,可以提供以下代码。
什么是detrending? 是不是像 "停止说话"?
对一个系列应用低通滤波器==减去趋势(斜率)成分。最简单的例子:对价格应用muwing,然后在一个单独的窗口中显示差异。
我看到你在使用一个允许/不允许开仓的标志。如果不知道这面旗子的情况,就不可能告诉你任何事情。在我的EA中,开仓时我使用了2种方法,可以提供以下代码。
我不太明白什么东西去哪里,从哪里来。
如果这个和那个,那么就是 "等于"。
如果它等于 "真",那么订单就会打开。
如果我写下如果这个和那个,订单就会打开。这能解决问题吗?
实际上表达式是这样的:如果(a>b ||(a<=b && c>d))。 如果从左到右进行真值检验,从加快程序速度的角度看,表达式a<=b 将是多余的。问题是到底是从左到右还是反过来,或者在不同的情况下有不同的说法。