【问题标题】:EA in MQL5 does not follow If conditionMQL5 中的 EA 不遵循 If 条件
【发布时间】:2019-07-26 20:15:41
【问题描述】:

我正在尝试在 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 仅在满足条件时打开买入头寸。没有错误消息或编译错误。

【问题讨论】:

    标签: trading mql5 metatrader5


    【解决方案1】:

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

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

    【讨论】:

    • 解决了这个问题。非常感谢!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多