[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 264

 
Dmido >> :

On dirait qu'une semaine pour nous, les nouveaux, c'est la date limite après laquelle nous nous adressons à vous, pros)))).


Conclusion des derniers posts....

allons au fond des choses :) énoncez le contexte.

 

Le contexte ? simple...

Article Créer un programme ordinaire(https://book.mql4.com/ru/build/index) à partir du manuel.

Là, un fichier <Inform.mqh> est inclus dans le programme.

""""""

Une sous-fenêtre de sortie séparée est créée en utilisant un indicateur personnalisé avec les paramètres appropriés. Le seul but de cet indicateur est de créer une sous-fenêtre, donc aucun calcul n'est effectué dans l'indicateur, il n'y a pas non plus de but de créer des lignes d'indicateur. Le code de l'indicateur Inform.mq4 peut se présenter comme suit :

//--------------------------------------------------------------------
// Inform.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отдельное окно индикатора
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
}
//--------------------------------------------------------------------

En général, le programmeur peut ajouter le code nécessaire à l'indicateur, lui conférant ainsi des propriétés supplémentaires. Par exemple, dans une partie de la sous-fenêtre de l'indicateur, vous pouvez afficher les lignes de l'indicateur. Cet exemple montre un code simple d'un indicateur, dont la fenêtre affichera les objets graphiques.

""""

Voici le code du fichier Inform. Je ne comprends pas comment en tirer des signaux sur le graphique. Dans le programme, cela fonctionne, il semble donner des commandes sur le graphique, mais rien... Je dois joindre un indicateur Inform et y écrire quelque chose ? Ou d'une autre manière ?


Veuillez me dire comment faire ((...)

 
Dmido >> :

S'il vous plaît, dites-nous ce qu'il faut faire ((.


Tout d'abord, un peu de théorie. Un programme MQL est... programme. C'est-à-dire qu'il ne peut pas effectuer des opérations qu'on ne lui demande pas d'effectuer. Dans la section d'aide "exécution du programme", vous pouvez lire que lorsqu'un nouveau tick arrive dans le conseiller expert/indicateur, la fonction start() est exécutée. Si la fonction Inform() n'est pas appelée depuis la fonction start(), elle ne sera pas exécutée. Maintenant, continuez à lire l'article à partir de la section que vous avez mentionnée : La fonction Inform() peut être appelée à n'importe quel endroit du programme où il est nécessaire d'afficher le message suivant. Par exemple, dans la fonction start(), où nous devons imprimer le message, nous écrivons

Inform(Mess_Number, Number, Value);
 
Bien entendu, les variables Mess_Number, Number, Value doivent être déclarées à l'avance et des valeurs doivent leur être attribuées.
 

Merci pour l'explication, bien sûr, mais il est appelé par le programme souvent, il n'est pas dans le corps principal, mais dans d'autres iclude il est partout et est appelé en envoyant des messages, mais ils ne sont pas de sortie(


par exemple, une ligne de Close_All.mqh


if (Tip==1) Price_Cls=Ask ; // Pour les ordres de vente
Inform(12,Ticket) ; // Message sur la tentative de fermeture.

 
Ecrivez votre code start() et regardons-le, car nous ne discutons pas de quoi que ce soit...
 
int start()                            // Спец. функция start
  {
        
   Terminal();                         // Функция учёта ордеров 
   Events();                           // Информация о событиях
   Trade(Criterion());                 // Торговая функция
   Inform(0);                          // Для перекрашивания объектов
   return;                             // Выход из start()
  }

C'est essentiellement la même chose que dans le tutoriel. Tous les appels proviennent des fichiers include .

Voici un exemple

//--------------------------------------------------------------------
// Events.mqh
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
// Функция слежения за событиями.
// Глобальные переменные:
// Level_new            Новое значение минимальной дистанции
// Level_old            Предыдущее значение минимальной дистанции
// Mas_Ord_New[31][9]   Массив ордеров последний известный
// Mas_Ord_Old[31][9]   Массив ордеров предыдущий (старый)
//--------------------------------------------------------------- 2 --
int Events()                              // Пользовательская функция
  {
   bool Conc_Nom_Ord;                     // Совпадение ордеров в ..
   //.. старом и новом массивах
//--------------------------------------------------------------- 3 --
   Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );// Последн.известное
   if ( Level_old!= Level_new)              // Новое не равно старому..
     {                                    // значит изменились условия
      Level_old= Level_new;                // Новое "старое значение"
      Inform(10, Level_new);               // Сообщение: новая дистанц.
     }
//--------------------------------------------------------------- 4 --
   // Поиск пропавших, поменявших тип, частично закрытых и переоткрытых
   for(int old=1; old<= Mas_Ord_Old[0][0]; old++)// По массиву старых
     {                                    // Исходим из того, что..
      Conc_Nom_Ord=false;                 // ..ордера не совпадают
      //--------------------------------------------------------- 5 --
      for(int new=1;new<= Mas_Ord_New[0][0];new++)//Цикл по массиву ..
        {                                 //..новых ордеров
         //------------------------------------------------------ 6 --
         if ( Mas_Ord_Old[ old][4]== Mas_Ord_New[new][4])// Совпал номер 
           {                              // Тип ордера стал ..
            if ( Mas_Ord_New[new][6]!= Mas_Ord_Old[ old][6])//.. другим
               Inform(7, Mas_Ord_New[new][4]);// Сообщение: преобраз.:)
            Conc_Nom_Ord=true;            // Ордер найден, ..
            break;                        // ..значит выходим из ..
           }                              // .. внутреннего цикла
         //------------------------------------------------------ 7 --
                                          // Не совпал номер ордера
         if ( Mas_Ord_Old[ old][7]>0 &&     // MagicNumber есть, совпал
            Mas_Ord_Old[ old][7]== Mas_Ord_New[new][7])//.. со старым
           {               //значит он переоткрыт или частично закрыт
                                             // Если лоты совпадают,.. 
            if ( Mas_Ord_Old[ old][5]== Mas_Ord_New[new][5])
               Inform(8, Mas_Ord_Old[ old][4]);// ..то переоткрытие
            else                             // А иначе это было.. 
               Inform(9, Mas_Ord_Old[ old][4]);// ..частичное закрытие
            Conc_Nom_Ord=true;               // Ордер найден, ..
            break;                           // ..значит выходим из ..
           }                                 // .. внутреннего цикла
        }
      //--------------------------------------------------------- 8 --
      if ( Conc_Nom_Ord==false)               // Если мы сюда дошли,..
        {                                    // ..то ордера нет:(
         if ( Mas_Ord_Old[ old][6]==0)
            Inform(1, Mas_Ord_Old[ old][4]);  // Ордер Buy закрыт
         if ( Mas_Ord_Old[ old][6]==1)
            Inform(2, Mas_Ord_Old[ old][4]);  // Ордер Sell закрыт
         if ( Mas_Ord_Old[ old][6]> 1)
            Inform(3, Mas_Ord_Old[ old][4]);  // Отложен. ордер удалён
        }
     }
//--------------------------------------------------------------- 9 --
   // Поиск новых ордеров 
   for(new=1; new<= Mas_Ord_New[0][0]; new++)// По массиву новых орд.
     {
      if ( Mas_Ord_New[new][8]>0)            //Это не новый,а переоткр
         continue;                          //..или частично закрытый
      Conc_Nom_Ord=false;                   // Пока совпадения нет
      for( old=1; old<= Mas_Ord_Old[0][0]; old++)// Поищем этот ордерок 
        {                                   // ..в массиве старых
         if ( Mas_Ord_New[new][4]== Mas_Ord_Old[ old][4])//Совпал номер..
           {                                          //.. ордера
            Conc_Nom_Ord=true;              // Ордер найден, ..
            break;                          // ..значит выходим из ..
           }                                // .. внутреннего цикла
        }
      if ( Conc_Nom_Ord==false)              // Если совпадения нет,..
        {                                   // ..то ордер новый :)
         if ( Mas_Ord_New[new][6]==0)
            Inform(4, Mas_Ord_New[new][4]); // Ордер Buy открыт
         if ( Mas_Ord_New[new][6]==1)
            Inform(5, Mas_Ord_New[new][4]); // Ордер Sell открыт
         if ( Mas_Ord_New[new][6]> 1)
            Inform(6, Mas_Ord_New[new][4]); // Установлен отлож.ордер
        }
     }
//-------------------------------------------------------------- 10 --
   return;
  }
//-------------------------------------------------------------- 11 --
 
Dmido >> :

C'est essentiellement la même chose que dans le tutoriel. Tous les appels proviennent des fichiers include .

Voici un exemple

L'Inform est appelé un paquet de fois, mais il est difficile de voir comment il s'affiche.... où les messages vont aussi(

 
Je crois comprendre que vous disposez également de la fonction Criterion() de l'exemple ? Attendez ensuite que les critères d'ouverture d'une position se déclenchent conformément à la stratégie décrite dans le tutoriel - et vous verrez alors comment fonctionne la fonction Inform(). Ou bien ouvrez-le manuellement en utilisant le bouton correspondant sur le terminal - cela devrait fonctionner aussi...
 
Non, j'ai mis mon Criterion) il y avait un sens à tout faire tourner, mais ça n'a pas marché même avec le premier (maintenant c'est difficile de tout réécrire, mais Criterion envoie des ordres d'ouverture, des transactions s'ouvrent, des événements se produisent, mais il y a 0 message en sortie....
Raison: