MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1387

 
Vitaly Muzichenko :

네. EA는 H1 시간에 작동하며 10:17에 위치를 열 수 있습니다. 11:00 이전에 완료되어야 합니다. 즉, 현재 막대에서 더 이상 열리지 않습니다.

현재 바의 개장 시간과 거래의 시작 시간을 비교하십시오. iTime <(시가 시간)이면 다시 열지 마십시오. 거래 개시 시간은 전역 변수 에 저장하거나 기록에서 가져올 수 있습니다.
 

00.00이 아니라 특정 시간(스크롤하는 옵션 제외)부터 디버깅을 시작할 수 있습니까? 아시는 분 계시면 방법 좀 알려주세요?

디버그 모드 에서 수동으로 거래할 수 있습니까? 예를 들어 올빼미와 함께 미결 주문을 수동으로 닫을 수 있습니까?

 

좋은 오후에요 여러분. 나는 Grail 기계를 다시 작성하고 있습니다 - 나는 돌아갈 방법이 없습니다 ;-) 모든 것이 시장 주문으로 잘 열립니다 - 오류 없음 ... 그러나   오류 130 및 4107 및 잘못된 가격(((.

구매 중지 주문을 열 때 오류

나는 이렇게 개통 가격을 얻는다.

  { //--НАЧАЛО ОТЛОЖЕННЫХ ОРДЕРОВ--------------------------------------------------------------------------------------------+
  
   //-НАЧАЛО ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПОКУПАК-------------------------------------------------------------------------------------------+
         
           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 );
          
          
          
          } //--КОНЕЦ ЕСЛИ ОТКРЫВАЕМСЯ С ФИЛЬТРОМ--------------------------------------------------------------------------------------------+
          
          
          
          
          
          
          
           //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ОТОЛЖЕННЫХ ПРОДАЖ И ПОКУПАК//-------------------------------------------------------------------------------------------------+
      

Stop Loss and Profit I get this like

 //+--- НАЧАЛО РАСЧЁТА 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 ); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
   //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
   //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

이 케이스를 받으면 스탑 레벨 패션에 체크가 있고 계산된 오픈 가격이 매도호가보다 높은지 확인합니다.

나는 이대로 구매 스톱을 엽니 다.

 /*УСЛОВИЕ 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//-------------------------------------------------------------------------------------------------+

질문 - 이러한 오류를 제거하기 위해 고려하지 않은 것은 무엇입니까?

 
DanilaMactep :

좋은 오후에요 여러분. 나는 Grail 기계를 다시 쓰고 있습니다 - 나는 돌아갈 방법이 없습니다 ;-) 모든 것이 시장 주문과 함께 완벽하게 열립니다 - 오류가 없습니다 ... 그러나   오류 130 및 4107 및 잘못된 가격(((.

4107 제외

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

4107 제외

나는 당신이 버린 코드를 추가하려는 위치를 전혀 이해하지 못했습니다. 내 글에서 오류 예외가 무엇이며 어디에 삽입해야 하는지 강조할 수 있습니까?
 
DanilaMactep :
나는 당신이 버린 코드를 추가하려는 위치를 전혀 이해하지 못했습니다. 내 글에서 오류 예외가 무엇이며 어디에 삽입해야 하는지 강조할 수 있습니까?

추가가 아니라 변경

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

추가가 아니라 변경

emayo- 무엇을 변경해야 하는지 따라잡을 수 없습니다. 녹색을 색상으로 강조 표시하고 녹색을 무엇으로 변경하려면 빨간색을 강조 표시할 수 있습니까?
 
MT4 테스터에서 다른 악기의 막대 가격 데이터와 틱 볼륨 을 가져올 수 있습니까?
 
DanilaMactep :
emayo- 무엇을 변경해야 하는지 따라잡을 수 없습니다. 녹색을 색상으로 강조 표시하고 녹색을 무엇으로 변경하려면 빨간색을 강조 표시할 수 있습니까?
  { //--НАЧАЛО ОТЛОЖЕННЫХ ОРДЕРОВ--------------------------------------------------------------------------------------------+
  
   //-НАЧАЛО ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПОКУПАК-------------------------------------------------------------------------------------------+
         
           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 :
MT4 테스터에서 다른 악기의 막대 가격 데이터와 틱 볼륨 을 가져올 수 있습니까?

시도 해봐.