MQL5中的EA不符合If条件

时间:2019-06-13 07:46:22

标签: trading mql5 metatrader5

我正在尝试在MQL5中编写极其简单的EA,如果条件满足,它仅需遵循一个。有一个存储最近5个收盘价的数组。这个想法是当最后四个收盘价(当前蜡烛除外)处于上升趋势时,打开买入仓位。但是,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仅在满足条件时才打开买入头寸。没有错误消息或编译错误。

2 个答案:

答案 0 :(得分:1)

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

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水平,手数等。

答案 1 :(得分:0)

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

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

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