[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 264

 
Dmido >> :

Sembra che una settimana per noi neofiti sia il termine ultimo dopo il quale si passa a voi pros))))


Concluso dagli ultimi post....

andiamo al fondo di questo:) indicare il contesto.

 

Contesto? semplice...

Articolo Creare un programma ordinario(https://book.mql4.com/ru/build/index) dal libro di testo.

Lì, un file <Inform.mqh> è incluso nel programma.

""""""

Una sottofinestra di uscita separata viene creata utilizzando un indicatore personalizzato con impostazioni appropriate. L'unico scopo di questo indicatore è quello di creare una sottofinestra, quindi, nessun calcolo viene eseguito nell'indicatore, non c'è nemmeno lo scopo di creare linee dell'indicatore. Il codice dell'indicatore Inform.mq4 può apparire come segue:

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

In generale, il programmatore può aggiungere il codice necessario all'indicatore, dotandolo così di proprietà aggiuntive. Per esempio, in una parte della sottofinestra dell'indicatore, potete visualizzare le linee dell'indicatore. Questo esempio mostra un semplice codice di un indicatore, la cui finestra mostrerà gli oggetti grafici.

""""

Ecco il codice del file Inform. Non capisco come ottenere segnali da esso sul grafico. Nel programma funziona, sembra dare comandi sul grafico, ma niente... Devo allegare un indicatore Inform e scriverci qualcosa? O in un altro modo?


Per favore ditemi come fare ((...)

 
Dmido >> :

Per favore, diteci cosa fare ((.


Prima, un po' di teoria. Un programma MQL è... programma. Cioè, non può eseguire operazioni che non gli viene detto di eseguire. Nella sezione di aiuto "esecuzione del programma" puoi leggere che quando arriva un nuovo tick nell'Expert Advisor/indicatore, viene eseguita la funzione start(). Se la funzione Inform() non è chiamata dalla funzione start(), non sarà eseguita. Ora continuate a leggere l'articolo dalla sezione che avete menzionato: la funzione Inform() può essere chiamata da qualsiasi punto del programma in cui è necessario visualizzare il prossimo messaggio. Cioè, nella funzione start(), dove dobbiamo stampare il messaggio, scriviamo

Inform(Mess_Number, Number, Value);
 
Naturalmente, le variabili Mess_Number, Number, Value devono essere dichiarate in anticipo e alcuni valori assegnati ad esse.
 

Grazie per la spiegazione, certo, ma è chiamato dal programma spesso, non è nel corpo principale, ma in altri iclude è ovunque e viene chiamato inviando messaggi, ma non sono in uscita(


come esempio una linea da Close_All.mqh


if (Tip==1) Price_Cls=Ask; // Per ordini di vendita
Inform(12,Ticket); // Messaggio sul tentativo di chiusura.

 
Scrivete il vostro codice start() e diamo un'occhiata, perché non stiamo discutendo nulla
 
int start()                            // Спец. функция start
  {
        
   Terminal();                         // Функция учёта ордеров 
   Events();                           // Информация о событиях
   Trade(Criterion());                 // Торговая функция
   Inform(0);                          // Для перекрашивания объектов
   return;                             // Выход из start()
  }

È essenzialmente lo stesso del tutorial. Tutte le chiamate provengono da file include .

Ecco un esempio

//--------------------------------------------------------------------
// 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 >> :

È essenzialmente lo stesso del tutorial. Tutte le chiamate provengono da file include .

Ecco un esempio

L'Inform è chiamato un casino di volte, ma è difficile vedere come visualizza.... dove vanno anche i messaggi(

 
Ho capito che avete anche la funzione Criterion() dell'esempio? Poi aspettate che i criteri di apertura di una posizione scattino secondo la strategia descritta nel tutorial - e allora vedrete come funziona la funzione Inform(). Oppure aprilo manualmente usando il pulsante corrispondente sul terminale - dovrebbe funzionare anche questo...
 
No, ho messo il mio Criterion) aveva senso eseguire il tutto, ma non ha funzionato nemmeno con quello iniziale (ora è difficile riscrivere tutto, ma Criterion invia ordini di apertura, le operazioni si aprono, gli eventi accadono, ma ci sono 0 messaggi in uscita...