Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 249

 

Что это за ошибка, так понимаю со стороны ДЦ плохая отработка?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

Что это за ошибка, так понимаю со стороны ДЦ плохая отработка?

128

ERR_TRADE_TIMEOUT

Истек срок ожидания совершения сделки


Кусочек из обработчика:

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

ERR_TRADE_TIMEOUT

Истек срок ожидания совершения сделки


Кусочек из обработчика:

Эти обработки ошибок в коде есть, но их никогда не было, сегодня как-то решил проверить программу на демо одного популярного ДЦ, и впервые столкнулся с такой лабудой.

В общем правильно понимаю, что это проблема с оборудованием в ДЦ, а не на моей стороне?

 

подскажите пожалуйста, правильно ли прописана функция. идея в том, чтобы просчитать, пробивала ли цена среднюю в течении определённого количества предыдущих свечек

не исполняется эта функция вовсе, результат отсутствует. результат должен быть: если не пробивала returnToMA ==1, если пробивала returnToMA ==0

может есть прочие решения задачи? 


 returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_Н4, int tradema=10, int bars=100)

   { 

               for(i=0;i<=bars;i++)

               {

               if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

               if (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

               else return(1);

               }  

 
forexpipsrunner:

подскажите пожалуйста, правильно ли прописана функция. идея в том, чтобы просчитать, пробивала ли цена среднюю в течении определённого количества предыдущих свечек

не исполняется эта функция вовсе, результат отсутствует. результат должен быть: если не пробивала returnToMA ==1, если пробивала returnToMA ==0

может есть прочие решения задачи? 

У вас в функции всегда будет ноль - т.к. максимум или минимум всегда больше/меньше или равен МА.

Свечу надо описывать по минимум двум параметрам в вашем случае:

1. Определить где открылась свеча - выше или ниже МА

2. В зависимости от п.1 проверять, было ли касание МА.

 
-Aleks-:

У вас в функции всегда будет ноль - т.к. максимум или минимум всегда больше/меньше или равен МА.

Свечу надо описывать по минимум двум параметрам в вашем случае:

1. Определить где открылась свеча - выше или ниже МА

2. В зависимости от п.1 проверять, было ли касание МА.

cпасибо. добавил условие, но постоянно возвращает 1. может где-то скобки поменять? либо брейк не отрабатывает и функция заканчивает работу присвоение 1 возвращаемому значению


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_Н4, int tradema=10, int bars=100)

   { 

               for(i=0;i<=bars;i++)

               {

               if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

               if ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

               else return(1);

               }  

 
forexpipsrunner:

cпасибо. добавил условие, но постоянно возвращает 1. может где-то скобки поменять? либо брейк не отрабатывает и функция заканчивает работу присвоение 1 возвращаемому значению


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_Н4, int tradema=10, int bars=100)

   { 

               for(i=0;i<=bars;i++)

               {

               if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

               if ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

               else return(1);

               }  


Попробуйте так

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

Будет возвращаться 1, если условие соблюдено - было пересечение - нам же надо так?

 
-Aleks-:

Попробуйте так

Будет возвращаться 1, если условие соблюдено - было пересечение - нам же надо так?

спасибо, работает как часы по Вашему варианту кода
 
forexpipsrunner:
спасибо, работает как часы по Вашему варианту кода

 

Рад был помочь.
 

Добрый день!

Ребята, подскажите, можно ли программно вывести индикатор на график? Или только вручную?

Если можно, то какая команда даётся?

Причина обращения: