Советник в MQL5 не следует условию If - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать чрезвычайно простой советник на MQL5, который должен следовать только одному условию if.Существует массив, в котором хранятся последние 5 цен закрытия.Идея состоит в том, чтобы открыть позицию ПОКУПКИ, когда последние 4 цены закрытия (исключая текущую свечу) находятся в восходящем тренде.Однако советник начинает открывать позиции ПОКУПАТЬ одну за другой, даже не заботясь об этом условии.Я публикую полный код.

Я попытался создать новый метод 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);

  }


} 

Я хочу, чтобы советник открывал позицию ПОКУПКИ только при выполнении условия.Нет сообщений об ошибках или ошибок компиляции.

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

В дополнение к выбранному ответу. Никогда не используйте NormalizeDouble для нормализации цен и объемов, это может привести к непредсказуемым результатам.

Цены всегда должны быть нормализованы по размеру тика:

double NormalizePrice(double p)
  {
   double ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   return(MathRound(p/ts) * ts);
  }
0 голосов
/ 13 июня 2019

Разделите операторы сравнения с помощью && и добавьте еще одно условие, как показано ниже

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);
}

Также вам не нужно нормализовать цены Bid и Ask, они нормализованы по умолчанию, но вам нужно нормализовать другие значения цен, такие как уровни tp и sl, размеры лотов и т. Д.

...