MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1387

 
Vitaly Muzichenko :

Evet. EA, H1 saatinde çalışır ve 10:17'de bir pozisyon açabilir, 11:00'den önce, yani mevcut çubukta yapılmalıdır - artık açılmayacaktır.

Mevcut çubuğun açılış saatini bir işlemin açılış saati ile karşılaştırın. iTime < (açık fiyat zamanı) ise tekrar açmayın. Ticaret açılış zamanı, global bir değişkende saklanabilir veya geçmişten alınabilir.
 

Hata ayıklamaya 00.00'dan değil, belirli bir zamandan başlamak mümkün mü (kaydırma seçeneği hariç). Birisi biliyorsa, bana nasıl olduğunu söyle?

Hata ayıklama modunda manuel olarak işlem yapabilir miyim, örneğin açık bir siparişi bir baykuşla manuel olarak kapatabilir miyim?

 

Herkese iyi günler. Kâse makinesini yeniden yazıyorum - geri dönüş yolum yok ;-) piyasa emirlerinde her şey yolunda gidiyor - hata yok ... ama   130 ve 4107 hataları ve geçersiz fiyat ((.

bir satın alma durdurma emri açarken hatalar

Açılış fiyatını bu şekilde alıyorum.

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

Zararı ve kârı durdurun ben böyle alıyorum

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

Bu durum alındıktan sonra stop seviyesi modasında kontroller yapılır ve hesaplanan açılış fiyatının satış fiyatından yüksek olup olmadığı kontrol edilir.

Buy stop'u kendim açıyorum bu şekilde

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

Soru - Bu hataları ortadan kaldırmak için neleri dikkate almadım?

 
DanilaMactep :

Herkese iyi günler. Kâse makinesini yeniden yazıyorum - geri dönüş yolum yok ;-) piyasa emirlerinde her şey yolunda gidiyor - hata yok ... ama   130 ve 4107 hataları ve geçersiz fiyat ((.

4107 hariç tut

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

4107 hariç tut

Attığınız kodu nereye eklemek istediğinizi hiç anlamadım. Hata istisnasının ne olduğunu ve nereye ekleneceğini parçamdan vurgulayabilir misiniz?
 
DanilaMactep :
Attığınız kodu nereye eklemek istediğinizi hiç anlamadım. Hata istisnasının ne olduğunu ve nereye ekleneceğini parçamdan vurgulayabilir misiniz?

eklemeyin, değiştirin

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

eklemeyin, değiştirin

emayo- Neyi değiştireceğime yetişemiyorum. Ne olduğunu renkle vurgulamak mümkün mü - yeşil ve yeşili neye dönüştürmek için kırmızı?
 
MT4 test cihazında diğer enstrümanlardan çubuk fiyat verilerini ve tik hacmini almak mümkün müdür?
 
DanilaMactep :
emayo- Neyi değiştireceğime yetişemiyorum. Ne olduğunu renkle vurgulamak mümkün mü - yeşil ve yeşili neye dönüştürmek için kırmızı?
  { //--НАЧАЛО ОТЛОЖЕННЫХ ОРДЕРОВ--------------------------------------------------------------------------------------------+
  
   //-НАЧАЛО ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПОКУПАК-------------------------------------------------------------------------------------------+
         
           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 test cihazında diğer enstrümanlardan çubuk fiyat verilerini ve tik hacmini almak mümkün müdür?

Dene.