Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes - page 1387

 
Vitaly Muzichenko:

Yes. The EA is working on H1 time frame and can open a position at 10:17, it needs not to open again before 11:00, i.e. on the current bar.

Compare the time of opening of the current bar with the time of opening of a position. If iTime < (opening price time), do not open more. The open time can be stored in a global variable or taken from the history.
 

Is it possible to start debugging from a specific time instead of 00.00 (other than the option to scroll to). If anyone knows, can you tell us how?

Is it possible to trade manually in the debug mode, e.g. manually close an order opened by an owl?

 

Good afternoon all. I am rewriting the Grail machine, I have no way back ;-) with market orders it opens perfectly, no errors... But with pending orders I have problems again with errors 130 and 4107 and disabled price((((.

mistakes when opening a buy stop order

I get opening price like this.

  {//--НАЧАЛО ОТЛОЖЕННЫХ ОРДЕРОВ--------------------------------------------------------------------------------------------+
  
  //-НАЧАЛО ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПОКУПАК-------------------------------------------------------------------------------------------+
         
          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );
          if(max_Price-(Ask+2.2*(Ask-Bid)) < 0.0)
          {
max_Price = Ask+2.2*(Ask-Bid);
         }  else 
max_Price = max_Price;
       
          
          
            //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК//-------------------------------------------------------------------------------------------------+
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ//-------------------------------------------------------------------------------------------------+
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_LOW,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ЛОУ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // --ПОЛУЧИЛ МИНИМАЛЬНУЮ ЦЕНУ ДЛЯ ОТКРЫТИЯ ОТЛОЖКИ
          
                 if(min_Price+(Ask-2.2*(Ask-Bid)) < 0.0)// ПРОВЕРКА ДЛЯ ИЗБЕЖАНИЯ ОШИБКИ 130
          {
min_Price = Ask+2.2*(Ask-Bid);
         }  else 
min_Price = min_Price;
          
          //-----ДОБАВЛЕНИЕ ФИЛЬТРА К ОТОЛЖКАМ ЕСЛИ ФИЛЬТР ВКЛЮЧЕН
          if(use_filter==en_c_filbtpom)
          {  //ЕСЛИ ВКЛЮЧЕКНЫ ОТЛОЖКИ С ФИЛЬТРОМ
          double filter_buy= Filter_buy*Point; // ПРИСВОЕНИЕ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ ФИЛЬТР БАЙ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ ВХОДНОГО ПАРАМЕТРА И ПЕЕРВОД ЭТОГО ДЕЛА В ПУНКТЫ
          double filter_sell= Filter_sell *Point; // ПРИСВОЕНИЕ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ ФИЛЬТР СЕЛЛ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ ВХОДНОГО ПАРАМЕТРА И ПЕЕРВОД ЭТОГО ДЕЛА В ПУНКТЫ
          filter_buy= NormalizeDouble(filter_buy,Digits); // НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ФИЛЬТР БАЙ ДЛЯ КОРРЕКТНЫХ РАСЧЁТОВ
          filter_sell= NormalizeDouble(filter_sell,Digits); // НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ФИЛЬТР СЕЛЛ ДЛЯ КОРРЕКТНЫХ РАСЧЁТОВ  
          
        
          
          max_Price= max_Price+filter_buy;  //МАКС ПРАЙС ПРИБАВИЛ ЗНАЧЕНИЯ ФИЛЬТРА, ЧТО БЫ ОТЛОЖКА ВСТАЛА ЧУТЬ ВЫШЕ НАЙДЕННОГО ХАЙ
          min_Price= min_Price- filter_sell;  // ОТ МИН ПРАЙС ОТНИМАЮ ЗНАЧЕНИЕ ФИЛЬТТР СЕЛ, ЧТОБЫ ОТЛОЖКА ВСТАЛА ЧУТЬ НИЖЕ НАЙДЕННОГО МИНИМУМА...
          
          max_Price= NormalizeDouble(max_Price,Digits);
          min_Price= NormalizeDouble(min_Price,Digits);
          
          
          
          }//--КОНЕЦ ЕСЛИ ОТКРЫВАЕМСЯ С ФИЛЬТРОМ--------------------------------------------------------------------------------------------+
          
          
          
          
          
          
          
           //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ОТОЛЖЕННЫХ ПРОДАЖ И ПОКУПАК//-------------------------------------------------------------------------------------------------+
      

I get stop loss and profit like this

//+--- НАЧАЛО РАСЧЁТА STOPLOSS ----------------------------------------------------------------------------+
   if(tip_sl==en_po_atr)   //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     { 
      sl=NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(sl<stoplevel)  // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         sl=NormalizeDouble(stoplevel*1.5,Digits); //СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        }
     }
   else   // ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
      sl=NormalizeDouble(razmer_fikc_sl*Point,Digits);   // ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ СТОП ЛОССА
      if(sl<stoplevel)  // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         sl=NormalizeDouble(stoplevel*1.5,Digits); //СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        }
     }
//+--- РАСЧЕТ STOPLOSS ЗАВЕРШЕН -------------------------------------------------------------------+

//+--НАЧАЛО РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

if(sl > 0)
//{// НАЧАЛО ПРОВЕРКИ НА НОЛЬ
  tp=sl*tp_v_R; // ВЫЧИСЛЯЕМ ПРОФИТ УМНОЖАЯ СТОП ЛОС НА КОЛИЧЕСТВО РИСКА
  tp= NormalizeDouble(tp, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  
  // ПРОВЕРКА ТЕЙК ПРОФИТА НА СТОП ЛЕВЕЛ ОТ МАКАРА--
  if(tp<stoplevel)                                                           // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
  {
         tp=NormalizeDouble(stoplevel*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

When I get this info I check stop level and check if calculated open price is higher than asc.

I open buy stop by itself like this

/*УСЛОВИЕ 1*///-------------------------------------------------------------------------------------------------+
   if(f_condition1())
   { // НАЧАЛО УСЛОВИЕ 1//-------------------------------------------------------------------------------------------------+
   
   if(ao_buy!=EMPTY_VALUE && count_orders_stop_buy ==0 && count_orders_market_buy ==0&& max_Price>Ask)
   { //НАЧАЛО ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   
   Print("БАЙ СТОП ДИВЕРГЕНЦИЯ AO УСЛОВИЕ 1");
        if( OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp , Coment,Magik_number,TimeCurrent()+order_life_time))Print("OPEN BUY STOP DIVERGENCE AO "); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР
        
        if (GetLastError()==141){Alert(GetLastError()); ExpertRemove();}// ПРОВЕРКА ОТ ДОЛБАНИЯ СЕРВЕРА И БАНА СЧЁТА
        
        
   
   }  //КОНЕЦ ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   
   } //--- КОНЕЦ УСЛОВИЕ1//-------------------------------------------------------------------------------------------------+

My question is: What should I do to avoid these errors?

 
DanilaMactep:

Good afternoon all. I am rewriting the Grail machine - I have no way back ;-) with market orders everything opens fine - no errors... But with pending orders again problems in the form of errors 130 and 4107 and disabled price((((.

exclude 4107

max_Price = NormalizeDouble(Ask+2.2*(Ask-Bid),Digits);
         }  else 
max_Price = NormalizeDouble(max_Price,Digits);
 
MakarFX:

Exclude 4107

I don't understand where you mean to put the code you sent me. Can you highlight from my piece what is there and where to insert the error exception?
 
DanilaMactep:
I do not understand where you mean to add the code you downloaded. Can you highlight from my piece what is and where to insert error exception?

not add to it, but change it

min_Price = Ask+2.2*(Ask-Bid);
         }  else 
min_Price = min_Price;
 
MakarFX:

not add to it, but change it

I don't know what to change to what. Can you highlight what is green and change the green into red?
 
Is it possible to get bar price and tick volume data from other instruments in the MT4 tester?
 
DanilaMactep:
I don't know what to change to what. Can I colour code what's green, and red what to change the green to?
  {//--НАЧАЛО ОТЛОЖЕННЫХ ОРДЕРОВ--------------------------------------------------------------------------------------------+
  
  //-НАЧАЛО ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПОКУПАК-------------------------------------------------------------------------------------------+
         
          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );
          if(max_Price-(Ask+2.2*(Ask-Bid)) < 0.0)
          {
max_Price = Ask+2.2*(Ask-Bid);
         }  else 
max_Price = max_Price;
       
          
          
            //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК//-------------------------------------------------------------------------------------------------+
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ//-------------------------------------------------------------------------------------------------+
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_LOW,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ЛОУ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // --ПОЛУЧИЛ МИНИМАЛЬНУЮ ЦЕНУ ДЛЯ ОТКРЫТИЯ ОТЛОЖКИ
          
                 if(min_Price+(Ask-2.2*(Ask-Bid)) < 0.0)// ПРОВЕРКА ДЛЯ ИЗБЕЖАНИЯ ОШИБКИ 130
          {
min_Price = Ask+2.2*(Ask-Bid);
         }  else 
min_Price = min_Price;
          
          //-----ДОБАВЛЕНИЕ ФИЛЬТРА К ОТОЛЖКАМ ЕСЛИ ФИЛЬТР ВКЛЮЧЕН
          if(use_filter==en_c_filbtpom)
          {  //ЕСЛИ ВКЛЮЧЕКНЫ ОТЛОЖКИ С ФИЛЬТРОМ
          double filter_buy= Filter_buy*Point; // ПРИСВОЕНИЕ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ ФИЛЬТР БАЙ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ ВХОДНОГО ПАРАМЕТРА И ПЕЕРВОД ЭТОГО ДЕЛА В ПУНКТЫ
          double filter_sell= Filter_sell *Point; // ПРИСВОЕНИЕ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ ФИЛЬТР СЕЛЛ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ ВХОДНОГО ПАРАМЕТРА И ПЕЕРВОД ЭТОГО ДЕЛА В ПУНКТЫ
          filter_buy= NormalizeDouble(filter_buy,Digits); // НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ФИЛЬТР БАЙ ДЛЯ КОРРЕКТНЫХ РАСЧЁТОВ
          filter_sell= NormalizeDouble(filter_sell,Digits); // НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ФИЛЬТР СЕЛЛ ДЛЯ КОРРЕКТНЫХ РАСЧЁТОВ  
          
        
          
          max_Price= max_Price+filter_buy;  //МАКС ПРАЙС ПРИБАВИЛ ЗНАЧЕНИЯ ФИЛЬТРА, ЧТО БЫ ОТЛОЖКА ВСТАЛА ЧУТЬ ВЫШЕ НАЙДЕННОГО ХАЙ
          min_Price= min_Price- filter_sell;  // ОТ МИН ПРАЙС ОТНИМАЮ ЗНАЧЕНИЕ ФИЛЬТТР СЕЛ, ЧТОБЫ ОТЛОЖКА ВСТАЛА ЧУТЬ НИЖЕ НАЙДЕННОГО МИНИМУМА...
          
          max_Price= NormalizeDouble(max_Price,Digits);
          min_Price= NormalizeDouble(min_Price,Digits);
          
          
          
          }//--КОНЕЦ ЕСЛИ ОТКРЫВАЕМСЯ С ФИЛЬТРОМ--------------------------------------------------------------------------------------------+
 
Valeriy Yastremskiy:
Is it possible to get bar price and tick volume data from other instruments in the MT4 tester?

Try it.

Reason: