Любые вопросы новичков по 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:
спасибо, работает как часы по Вашему варианту кода

 

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

Добрый день!

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

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