Создание лимита на покупку дает неверную цену - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь написать советник на MQL5, который инициирует лимиты покупки на основе определенных значений EMA.Вот код, который я написал в функции OnTick ().

        MqlRates priceData[]; //create a price array

       //sort the array from the current candle downwards
       ArraySetAsSeries(priceData, true);

       //copy candle prices for 5 candles into array
       CopyRates(_Symbol, _Period, 0,5, priceData);

       //EMA Based Trading

       int ema8 = iMA(_Symbol, _Period, 8, 0, MODE_EMA, PRICE_CLOSE);
       int ema21 = iMA(_Symbol, _Period, 21, 0, MODE_EMA, PRICE_CLOSE);

       //Arrays to store EMAs
       double ema8Array[], ema21Array[];


       //Sorting EMAs fot the current candle downwards 
       ArraySetAsSeries(ema8Array, true);
       ArraySetAsSeries(ema21Array, true);

       //Defined EMA8, one line, current candle, 5 candles, store result
       CopyBuffer(ema8,0,0,5,ema8Array);

       //Defined EMA21, one line, current candle, 5 candles, store result
       CopyBuffer(ema21,0,0,5,ema21Array);

       if(ema8Array[0] > ema21Array[0])
       {

          if(
          (ema8Array[0] >= priceData[1].close) 
          && 
          (priceData[1].close < ema21Array[0]))
          {
            Print("Chance To Buy"); 

            double closePrices[5];

            closePrices[0]=priceData[1].close;
            closePrices[1]=priceData[2].close;
            closePrices[2]=priceData[3].close;
            closePrices[3]=priceData[4].close;

            if((OrdersTotal() == 0) && (PositionsTotal() == 0))
            {
             int maxValue=ArrayMaximum(closePrices,0,WHOLE_ARRAY);
             double buyStop=closePrices[maxValue]+0.00003;
             double stopLoss=priceData[1].close-0.00004;
             double takeProfit=buyStop+(buyStop-stopLoss);

             trade.BuyLimit(0.01,buyStop,_Symbol,0,0,ORDER_TIME_GTC,0,"Limit Added");
            }
          }


   }

Когда я запускаю тестирование стратегии с EURUSD на временной шкале H1, в большинстве случаев я получаю следующую ошибку:

2018.12.25 14:27:47.117 2017.01.02 09:00:09   failed buy limit 0.01 EURUSD at 1.05342 [Invalid price]
2018.12.25 14:27:47.117 2017.01.02 09:00:09   CTrade::OrderSend: buy limit 0.01 EURUSD at 1.05342 [invalid price]

Подскажите, пожалуйста, что я могу делать не так?

...