MQL5 中的 EA 不遵循 If 条件

EA in MQL5 does not follow If condition

我正在尝试在 MQL5 中编写极其简单的 EA,它必须仅遵循一个 if 条件。有一个数组存储最后 5 个收盘价。这个想法是在最后 4 个收盘价(不包括当前蜡烛)处于上升趋势时建立买入头寸。然而,EA 开始一个接一个地建立买入仓位,甚至不关心条件。我发布了完整的代码。

我尝试创建一个新方法 Uptrend(),它具有完全相同的条件 - 仍然不起作用。

#include <Trade\Trade.mqh>

CTrade trade;


void OnTick()
  {

  double tpoint = Point();
  double ClosePriceArray[];

  ArraySetAsSeries(ClosePriceArray, true);
  CopyClose(Symbol(), PERIOD_CURRENT, 0, 5, ClosePriceArray);

  double Ask = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits);
  double Bid = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits);

  if ((ClosePriceArray[4] < ClosePriceArray[3] < ClosePriceArray[2]< ClosePriceArray[1]) && PositionsTotal() < 1) {
      trade.Buy(0.10, NULL, Ask, (Ask-50*tpoint), (Ask+150*tpoint), NULL);

  }


} 

我希望 EA 仅在满足条件时才开仓。没有错误消息或编译错误。

使用&&分隔比较运算符并添加另一个条件如下

if ((ClosePriceArray[4] < ClosePriceArray[3] && ClosePriceArray[3] < ClosePriceArray[2] && ClosePriceArray[2]< ClosePriceArray[1]) && PositionsTotal() < 1)
{
  trade.Buy(0.10, NULL, Ask, (Ask-50*tpoint), (Ask+150*tpoint), NULL);
}

此外,您不需要规范化 BidAsk 价格,它们默认规范化,但您需要规范化其他价格值,例如 tp 和 sl 水平、手数等等

除了选择的答案。永远不要使用 NormalizeDouble 来标准化价格和数量,这会导致不可预知的结果。

价格必须始终按刻度大小标准化:

double NormalizePrice(double p)
  {
   double ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   return(MathRound(p/ts) * ts);
  }