0

这是我想并尝试过的代码。我认为这是购买和出售分形信号的正确方法。但同时获得买入和卖出信号。

  double UP[],DOWN[];
  double fractal_output = iFractals(_Symbol,_Period); 
  ArraySetAsSeries(UP,true);
  ArraySetAsSeries(DOWN,true); 
  CopyBuffer(fractal_output,0,0,5,UP);
  CopyBuffer(fractal_output,1,0,5,DOWN);
  if (UP[1])
  {
      Comment("BUY");
      trade.Buy(0.1);
  }
  if (DOWN[1])
  {
      Comment("SELL");
      trade.Sell(0.1);
  }

我不明白如何计划使用iFractalsMQL5 中的功能指标进行买卖。需要做哪些改进?

4

1 回答 1

2

Adouble fractal_output不应该只初始化一次,而不是每次滴答。 int doubleOnInit(){...}

确保您了解访问时获得的分形UP[1]- 它似乎是 0、1、2、3、4(从左到右),因此您要求在当前 Bar 之前获取分形 3 个柱。

或者,您可以在当前栏之前获得一个值(很可能在当前开始后的下一个栏之前为零)。

确保您已正确复制缓冲区(它可能未被复制并且UP[1]可能会抛出out-of-range error- 因此CopyBuffer返回许多实际复制的元素(所以if CopyBuffer()!=5){print();return;}

打电话时您希望看到什么if(UP[1]){}

缓冲区可能同时采用正值和EMPTY_VALUE (== 2^31-1).

最好检查缓冲区的值:if(UP[i]>0){}if(UP[i]!=EMPTY_VALUE){...}

不要忘记一个特殊情况,当某些蜡烛同时具有上分形和下分形时 - 在那种极端情况下该怎么办?

它将打开一个多头然后打开一个空头(因此它可以通过打开一个空头来关闭买入)。

可能您需要在此之前检查未结订单或打开柱 - 否则您将在一根蜡烛期间打开许多头寸。

Tester 将帮助您找到在规划 EA 时可能遗漏的其他问题。

于 2018-03-13T08:50:41.390 回答