Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1409

 

Подскажите, как можно прервать и удалить из отчета (или не помещать в отчет) конкретный прогон при определенных условиях (равенство значений двух перебираемых параметров) при оптимизации в МТ5. Если я просто прерываю исполнение, то нулевое значение все равно остается в списокe прогонов (Optimization Result), загаживая и тормозя процесс оптимизации.

 
alph:
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000$?

а че ты только 12 год взял взял бы период 12- 22 год вот там бы и слил в промежутке. 

 
друзья как написать программку что бы складывала А плюс Б 
 
Лауреат #:
друзья как написать программку что бы складывала А плюс Б 

Доброе утро! Вот так можно написать:

//+------------------------------------------------------------------+
//|                                                     A_plus_B.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//--- ВХОДНЫЕ ПАРАМЕТРЫ
input int A=0; // Переменная А
input int B=0; // Переменная В
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int C=A+B;
   Comment("A + B равно: ",C);
   while(!IsStopped()) // проверим на принудительное завершение работы скрипта
      ChartRedraw(0); // если есть, то запустим принудительную перерисовку текущего графика
   Comment(""); // и уберём с графика комментарии
  }
//+------------------------------------------------------------------+

С уважением, Владимир.

Файлы:
A_plus_B.mq5  3 kb
 

Доброго дня!

Пытаюсь создавать советников через генерацию и столкнулся с проблемой малого количества модулей сигналов (около 20). Хочу объединить, например Ишимоку или Болинджера с другим(и), но в стандартном MT5 нет сигналов данных индикаторов. 
На видосах в инете видно, что у людей есть расширенная база модулей сигналов - подскажите, где ее взять?

Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
Владимир Самусёв #:

Доброго дня!

Пытаюсь создавать советников через генерацию и столкнулся с проблемой малого количества модулей сигналов (около 20). Хочу объединить, например Ишимоку или Болинджера с другим(и), но в стандартном MT5 нет сигналов данных индикаторов. 
На видосах в инете видно, что у людей есть расширенная база модулей сигналов - подскажите, где ее взять?

Здравствуйте, Владимир!

В CodeBase  есть много торговых модулей. Поищите там. Если не найдёте, то у Вас будет ещё два варианта: либо попробовать самостоятельно (зато бесплатно!) написать свой торговый сигнал, опираясь на статью Мастер MQL5: Как написать свой модуль торговых сигналов  либо обратиться во Фриланс  и там Вам напишут любой торговый модуль, но уже за деньги.

С уважением, Владимир.

 
Rost17 #:

Подскажите, как можно прервать и удалить из отчета (или не помещать в отчет) конкретный прогон при определенных условиях (равенство значений двух перебираемых параметров) при оптимизации в МТ5. Если я просто прерываю исполнение, то нулевое значение все равно остается в списокe прогонов (Optimization Result), загаживая и тормозя процесс оптимизации.

Попробуйте в Init() делать проверку на то, что при таких параметрах прогон не нужен, и, если это так, то возвращать из этой функции INIT_PARAMERTERS_INCORRECT.
Возможно, это даст то, что вам нужно.
P.S. Названия проверьте по справке, писал по памяти
 
Yuriy Bykov #:
Попробуйте в Init() делать проверку на то, что при таких параметрах прогон не нужен, и, если это так, то возвращать из этой функции INIT_PARAMERTERS_INCORRECT.
Возможно, это даст то, что вам нужно.
P.S. Названия проверьте по справке, писал по памяти

Спасибо, Юрий!

 

Ребят привет всем профи и кто шарит!

Возникла проблема с получением данных из индикатора -- помогите пожалуйста, кому это под силу..

Цель функции: Рассчитать средние расстояние в пунктах между внешними линиями индикатора "Полосы Боллинджера", за указанный период.

Суть проблемы: Не могу никак получить реальные значения цены на линиях индикатора по указанному бару, потому что по какой-то причине в разные буфера индикатора записывается одно и то-же значение цены, которое ещё к тому-же и не соответствует реальным показателям ни одной из линий на этом барре. И в итоге, в разные буферы (при разных запросах) записывается некторое неведомое значение цены, которое сводит на нет всю дальнейшую работу функции.
Причем, точно таким же методом как и  в этой функции я исправно получал показатели из любых других индикаторов, а тут это не работает...

int Bollinger_Bands(int _Average_Period, int _Number)
{
   double   Buffer_BASE_LINE[];                                                                          // Массив Буффера Линии BASE_LINE
   double   Buffer_UPPER_BAND[];                                                                         // Массив Буффера Линии UPPER_BAND
   double   Buffer_LOWER_BAND[];                                                                         // Массив Буффера Линии LOWER_BAND
   int      Bar_Cash             = _Average_Period;                                                                       // Количество плучаемых значений от индикатора
   int      Bands_Handel         = 0;                                                                       // Хендл индикатора Bollinger_Bands
   //---//
   double   Base_Line            = 0;                                                                       // Значение линии BASE_LINE
   double   Upper_Line           = 0;                                                                       // Значение линии UPPER_BAND
   double   Lower_Line           = 0;                                                                       // Значение линии LOWER_BAND
   //---//
   double   Band_Size_Buffer[];											// Буфер расчётных значений разницы между линиями индикатора 
   int      Band_Size_Total      = 0;										// Итог среднего значения расстояния между линиями в пунктах
   ENUM_APPLIED_PRICE   applied_price = PRICE_CLOSE; // тип цены 
   //---//
      ArrayResize(Band_Size_Buffer,_Average_Period+1);  
      ArrayResize(Buffer_UPPER_BAND,_Average_Period+1);
      ArrayResize(Buffer_LOWER_BAND,_Average_Period+1);
      //---//
         Bands_Handel = iBands(_Symbol,PERIOD_CURRENT,20,2,0,applied_price);
         //---//      
            CopyBuffer(Bands_Handel,0,_Number,_Average_Period,Buffer_BASE_LINE);       ArraySetAsSeries(Buffer_BASE_LINE,true);
            CopyBuffer(Bands_Handel,1,_Number,_Average_Period,Buffer_UPPER_BAND);      ArraySetAsSeries(Buffer_UPPER_BAND,true);
            CopyBuffer(Bands_Handel,2,_Number,_Average_Period,Buffer_LOWER_BAND);      ArraySetAsSeries(Buffer_LOWER_BAND,true);
            //---//

         //---//  Тут получение значений для выбранного номера бара из переменной которая передаётся в функцию (использовал как проверку получения данных по линиям)
         Base_Line   = NormalizeDouble(Buffer_BASE_LINE[_Number], _Digits);      //Alert("Base_Line[",_Number,"] = ",Base_Line);
         Upper_Line  = NormalizeDouble(Buffer_UPPER_BAND[_Number], _Digits);     //Alert("Upper_Line[",_Number,"] = ",Upper_Line);
         Lower_Line  = NormalizeDouble(Buffer_LOWER_BAND[_Number], _Digits);     //Alert("Lower_Line[",_Number,"] = ",Lower_Line);
             //---//
         
         
         //---// ** А это расчёт среднего расстояния между внешними линиями Боллинджера за указанный период. Получается 0 потому что одно число отнимается само от себя.
         for(int i=_Average_Period; i>=0; i--) { 
         //---//
            Upper_Line  = NormalizeDouble(Buffer_UPPER_BAND[i], _Digits);     //Alert("Upper_Line[",i,"] = ",Upper_Line);
            Lower_Line  = NormalizeDouble(Buffer_LOWER_BAND[i], _Digits);     //Alert("Lower_Line[",i,"] = ",Lower_Line);
            //---//
               Band_Size_Buffer[i] = NormalizeDouble( ((Upper_Line - Lower_Line) / _Point), 2);     //Alert("Band_Size_Buffer[",i,"] = ",Band_Size_Buffer[i]);
              }//---//
         
               Band_Size_Total = (int) MathMean(Band_Size_Buffer);
               //---//

   
 return(Band_Size_Total);
}
 

Есть непонятность с использованием стандартной библиотеки.
Как получить тикет после открытия ордера с помощью стандартной библиотеки?
Я могу быть уверен что ответ сервера здесь уже получен? Терминал зависает пока ждёт ответа от севера? Непонятно.

                     if(!m_trade.BuyLimit(...))
                       {
                        ...
                       }
                     else
                       {
                       int ticket=m_trade.RequestOrder();  // ??? 
                        ...
                        a[n]=ticket; 
                       }

В MQ4 все было просто:

         ticket=OrderSend(...);
         if(ticket>0)
           {
            ...
            a[n]=ticket;
           }
Причина обращения: