新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1387

 
Vitaly Muzichenko:

是的,该EA在H1时间框架上工作,可以在10:17开仓,你需要确保在11:00之前,即在当前条形图上--它不会再开。

比较当前栏位的开仓时间与某个仓位的开仓时间。如果iTime<(开盘价时间),则不要开多。开放时间可以存储在一个全局变量 中,也可以从历史记录中提取。
 

有没有可能从一个特定的时间而不是00.00开始调试(除了滚动到的选项外)。如果有人知道,你能告诉我们怎么做吗?

是否可以在调试模式 下手动交易,例如手动关闭猫头鹰开出的订单?

 

大家下午好。我正在重写Grail机器,我已经没有退路了;-)对于市场订单,它可以完美地打开,没有错误。但是对于 挂单,我又有问题了,有130和4107的错误,并且禁用了price((((。

开设买入止损单时的错误

我得到的开盘价是这样的。

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

我得到的止损和利润是这样的

//+--- НАЧАЛО РАСЧЁТА 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:

不加反减

我不知道该把什么改成什么。我可以用颜色编码,什么是绿色,什么是红色,我把绿色改成什么?
 
是否可以在MT4测试器中获得其他工具的条形价格和勾股量 数据?
 
DanilaMactep:
我不知道该把什么改成什么。我可以把绿色的东西用颜色编码,而红色的东西要改成什么?
  {//--НАЧАЛО ОТЛОЖЕННЫХ ОРДЕРОВ--------------------------------------------------------------------------------------------+
  
  //-НАЧАЛО ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПОКУПАК-------------------------------------------------------------------------------------------+
         
          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测试器中获得其他工具的条形价格和勾股量 数据?

试试吧。

原因: