English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Manuale MQL5: Utilizzo di diverse modalità di stampa

Manuale MQL5: Utilizzo di diverse modalità di stampa

MetaTrader 5Esempi | 11 gennaio 2022, 16:40
122 0
Anatoli Kazharski
Anatoli Kazharski


Introduzione

Questo è il primo articolo della serie Manuale MQL5. Inizierò con semplici esempi per permettere a chi sta muovendo i primi passi nella programmazione di familiarizzare gradualmente con il nuovo linguaggio. Ricordo i miei primi sforzi nel progettare e programmare sistemi di trading che posso dire sono stati piuttosto difficili, dato che è stato il primo linguaggio di programmazione della mia vita. Fino ad allora pensavo di non essere fatto per questo e che difficilmente sarei stato in grado di capirlo.

Tuttavia, si è rivelato più semplice di quanto pensassi e mi ci sono voluti solo pochi mesi prima di poter sviluppare un programma abbastanza complesso. Puoi saperne di più nell'articolo intitolato "Opportunità illimitate con MetaTrader 5 e MQL5".

Qui, cercherò di guidare gli sviluppatori principianti di Expert Advisor attraverso il processo di programmazione, passando dal semplice al complesso. Non ho intenzione di copiare qui alcuna informazione disponibile in Aiuto nel menu MetaEditor 5, quindi preparati a premere F1abbastanza spesso. Allo stesso tempo, questa serie di articoli ti fornirà molti esempi, funzioni e schemi già pronti che possono essere utilizzati nei tuoi sviluppi sia in modo originale che personalizzato.

Quindi cominciamo. In questo articolo creeremo un semplice script che stampa alcune delle proprietà dei simboli in varie modalità. Quando si sviluppa un programma, soprattutto all'inizio del processo di apprendimento, ci saranno spesso situazioni in cui il programma non risponde come previsto. Se ciò accade, sarà necessario controllare i valori di alcune variabili coinvolte nei calcoli. Nel nostro caso esamineremo da vicino tre metodi in cui utilizzeremo le funzioni Print(), Comment() e Alert(). E poi sarai in grado di decidere da solo quale metodo è più conveniente per te.


MQL5 Wizard

Il mio studio su MQL5 è iniziato con gli script. È abbastanza facile e veloce. Quando lo script viene caricato, esegue la funzione creata e viene quindi eliminato dal grafico. Questo ti permette di sperimentare in movimento e vedere in quale direzione muoverti.

Se non hai ancora installato il terminale di trading MetaTrader 5, puoi installarlo subito. Dopo l'installazione, avvia il terminale e apri MetaEditor 5 premendo F4. Questo pulsante può essere utilizzato per passare rapidamente dal terminale di trading MetaTrader 5 a MetaEditor 5. Puoi anche avviare MetaEditor 5 facendo clic sul pulsante appropriato nella barra degli strumenti del terminale. Assicurati di studiare molto bene l'interfaccia del programma usando l'Aiuto (F1) nel terminale di trading e MetaEditor 5 poiché potremmo toccare solo brevemente alcuni problemi, se non del tutto.

Avvia MetaEditor 5 e premi Ctrl+N o il pulsante Nuovo sotto il menu principale nel pannello MetaEditor. Si aprirà una finestra della procedura guidata MQL5 (Wizard) in cui potrai selezionare il tipo di programma che desideri creare. Nel nostro caso, selezioniamo Script e premiamo Next:

Fig. 1. MQL5 Wizard - Script

Fig. 1. MQL5 Wizard - Script

Sarà quindi necessario inserire il nome dello script (nome del file). Per impostazione predefinita, gli script vengono creati in Metatrader 5\MQL5\Scripts\file_name.mq5. In quella directory, puoi anche creare altre cartelle per raggruppare i tuoi file in base al loro scopo.

Fig. 2. Procedura guidata MQL5 - Nome file

Fig. 2. Procedura guidata MQL5 - Nome file

A questo punto, se necessario, puoi anche aggiungere parametri di input. Quando tutto è impostato e pronto, fai clic su Fine. Verrà creato un nuovo documento utilizzando il modello e potrai procedere con lo script:

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
    
  }
//+------------------------------------------------------------------+


Scrivere un codice

Tutto ciò che segue una doppia barra è un commento e non influisce sull'esecuzione del programma. È sempre consigliabile fornire commenti dettagliati al codice poiché facilita notevolmente la comprensione della logica del programma, soprattutto dopo una lunga pausa.

Tutto ciò che segue #property nelle prime tre righe di codice sopra ha a che fare con le proprietà del programma. Maggiori informazioni su ciascuna funzione e proprietà possono essere trovate nella MQL5 Reference. Per visualizzare rapidamente la descrizione di una determinata funzione, è sufficiente fare doppio clic sulla funzione per selezionarla e premere F1. Si aprirà la finestra di Aiuto che ti fornirà una descrizione della funzione selezionata.

È seguito dalla funzione di script principale - OnStart() che è quella che contiene tutte le altre funzioni e calcoli.

Dobbiamo consentire la possibilità di selezionare un metodo per stampare le informazioni richieste prima dell'esecuzione del programma. Significa che dovremmo avere un parametro esterno che ci consentirà di selezionare la modalità necessaria dall'elenco a discesa. Inoltre, è necessario specificare un'altra proprietà (#property) che sarà responsabile dell'apertura di una finestra con parametri esterni dello script prima dell'esecuzione del programma. Questa proprietà è script_show_inputs. Lo aggiungeremo di seguito a tutte le altre proprietà che abbiamo già nel codice:

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---

Per avere l'elenco a discesa nei parametri esterni, è necessario creare l'enumerazione di tutte le modalità. Inseriamo questo codice dopo le proprietà del programma:

// ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---

Questo è seguito dall'unico parametro esterno in questo script - PrintMode:

// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode

I parametri di input si trovano di norma all'inizio del programma, con il modificatore di che definisce il parametro esterno posizionato prima del tipo di variabile. Se eseguiamo lo script ora, si aprirà una finestra del programma e potremo selezionare una modalità di stampa dall'elenco a discesa del parametro Print Mode:

Fig. 3. Finestra dei parametri dello script

Fig. 3. Finestra dei parametri dello script

Quindi creiamo delle variabili e assegniamo loro dei valori (nel nostro caso stamperemo dei dati di simbolo) per stamparli ulteriormente utilizzando la modalità specificata dall'utente nel parametro esterno. A questo scopo, abbiamo bisogno di organizzare una funzione utente separata - PrintSymbolProperties() - che verrà chiamata nella funzione principale OnStart().

Per creare la funzione, dobbiamo semplicemente inserire il codice come mostrato di seguito:

//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
    
  }

Il tipo del valore da restituire deve essere specificato prima del nome della funzione. In alternativa, se la funzione non restituisce nulla, come nel nostro caso, dovremmo mettere void. Inoltre, dobbiamo scrivere il codice rimanente nel corpo della funzione PrintSymbolProperties(), tra le parentesi graffe. Creiamo prima le variabili:

string symb_symbol    = "";  // Symbol
int    symb_digits    = 0;   // Number of decimal places

int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
int    symb_stoplevel = 0;   // Stop levels
double symb_ask       = 0.0; // Ask price
double symb_bid       = 0.0; // Bid price

Il tipo di variabile dipende dal tipo di dati che gli verranno assegnati. Ora assegniamo dei valori a queste variabili. Per ottenere le proprietà dei simboli, MQL5 fornisce funzioni speciali per ogni tipo di dati.

symb_symbol    =Symbol();
symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---

Per garantire un adeguato apprendimento del materiale, utilizzare MQL5 Reference per studiare ogni singola funzione e parametro che passano. Tutte le proprietà dei simboli sono visualizzate in una tabella alla quale dovrai spesso fare riferimento.

Ora che alle variabili sono stati assegnati dei valori, è sufficiente scrivere un codice appropriato per ogni modalità di stampa. Ecco come appare:

//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart 
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
//---

Se si seleziona STAMPA per il parametro esterno dell'Expert Advisor, le informazioni verranno stampate sul giornale degli Expert Advisor (Casella Toolbox - Experts):

Fig. 4. Casella degli strumenti - Scheda Esperti

Fig. 4. Casella degli strumenti - Scheda Esperti

Se selezioni COMMENTO, le informazioni verranno visualizzate nell'angolo in alto a sinistra del grafico. Dopo che le informazioni sono apparse nel grafico, la funzione MessageBox() aprirà una finestra di dialogo che ti chiederà di eliminare i commenti dal grafico:

Fig. 5. Commenti nell'angolo in alto a sinistra del grafico

Fig. 5. Commenti nell'angolo in alto a sinistra del grafico

Se si opta per ALERT, dopo aver eseguito lo script apparirà una finestra di avviso contenente le informazioni richieste o un semplice messaggio utente. In questo caso, come nel caso dell'opzione STAMPA, l'informazione viene anche stampata sul giornale ma è inoltre accompagnata da una notifica sonora.

Fig. 6. Finestra di avviso

Fig. 6. Finestra di avviso

Di seguito è riportato l'intero codice dello script:

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2012, MetaQuotes Software Corp."
#property link        "http://tol64.blogspot.com"
#property description "email: hello.tol64@gmail.com"
#property version     "1.00"
#property script_show_inputs
//---
//--- ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---
// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode
//---
//+------------------------------------------------------------------+
//| MAIN FUNCTION                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PrintSymbolProperties();
  }
//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
   string symb_symbol    = "";  // Symbol
   int    symb_digits    = 0;   // Number of decimal places
   int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
   int    symb_stoplevel = 0;   // Stop levels
   double symb_ask       = 0.0; // Ask price
   double symb_bid       = 0.0; // Bid price
//---
   symb_symbol    =Symbol();
   symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart  
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
  }

//+------------------------------------------------------------------+


Conclusione

Concluderemo questo articolo qui. Oltre ai metodi sopra descritti, puoi anche scrivere dati su un file. Può essere un semplice file di testo o anche un report HTML ben formattato utilizzando CSS. Ma questi metodi sono molto più complicati per i principianti e quelli forniti sopra dovrebbero essere sufficienti per iniziare.

Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/638

File allegati |
printmodes.mq5 (3.54 KB)
Manuale MQL5: Ottenere Proprietà di Posizione Manuale MQL5: Ottenere Proprietà di Posizione
In questo articolo, creeremo uno script che ottiene tutte le proprietà di posizione e le mostra all'utente in una finestra di dialogo. Durante l'esecuzione dello script, sarà possibile selezionare tra due modalità disponibili nell'elenco a discesa nei parametri esterni: visualizzare le proprietà di posizione solo sul simbolo corrente o visualizzare le proprietà di posizione su tutti i simboli.
Il Market MQL5 compie un anno Il Market MQL5 compie un anno
È passato un anno dal lancio delle vendite nel Market MQL5. È stato un anno di duro lavoro, che ha trasformato il nuovo servizio nel più grande negozio di robot di trading e indicatori tecnici per la piattaforma MetaTrader 5.
Manuale MQL5: Proprietà di posizione nel pannello delle informazioni personalizzate Manuale MQL5: Proprietà di posizione nel pannello delle informazioni personalizzate
Questa volta creeremo un semplice Expert Advisor che otterrà le proprietà della posizione sul simbolo corrente e le visualizzerà sul pannello informativo personalizzato durante il trading manuale. Il pannello informativo verrà creato utilizzando oggetti grafici e le informazioni visualizzate verranno aggiornate ad ogni tick. Questo sarà molto più conveniente rispetto al dover eseguire manualmente lo script descritto nel precedente articolo della serie chiamata "Manuale MQL5: Ottenere le Proprietà di posizione
Widget dei segnali di trading MetaTrader 4 e MetaTrader 5 Widget dei segnali di trading MetaTrader 4 e MetaTrader 5
Recentemente gli utenti MetaTrader 4 e MetaTrader 5 hanno ricevuto l'opportunità di diventare fornitori di segnali e di guadagnare ulteriori profitti. Ora puoi mostrare tuoi successi di trading sul tuo sito web, blog o pagina di social network utilizzando i nuovi widget. I vantaggi dell'utilizzo dei widget sono evidenti: aumentano la popolarità dei fornitori di segnali, stabiliscono la loro reputazione di trader di successo e attirano nuovi abbonati. Tutti i trader che inseriscono widget su altri siti Web possono godere di questi vantaggi.