Aggiornamento piattaforma MetaTrader 5 build 3390: Float in OpenCL e nelle funzioni matematiche, metodi di Attivazione e Perdita per l'apprendimento automatico

 

L'aggiornamento della piattaforma MetaTrader 5 sarà rilasciato giovedì 4 agosto 2022. L'aggiornamento avrà le seguenti modifiche:

  1. Terminale: E’ stata aggiunta l'apertura automatica di un tutorial alla prima connessione a un conto trading. Questa funzione aiuterà i principianti a iniziare a conoscere le basi del trading e ad esplorare le caratteristiche della piattaforma. L'esercitazione è suddivisa in diverse sezioni, ognuna delle quali fornisce brevi indicazioni su un argomento specifico. Il progresso nel percorso è indicato con una linea blu.

    Added automatic opening of a tutorial during the first connection to a trading account


  2. Terminale: Fissato 'Chiusura in profitto'/'Chiusura in perdita' nelle operazioni di massa. Precedentemente, la piattaforma utilizzava posizioni opposte se esistevano. Per esempio, se avessi due posizioni Buy perdenti per EURUSD ed una posizione Sell in profitto per EURUSD, tutte e tre le posizioni verrebbero chiuse durante l'operazione di massa "Chiusura in perdita". Buy e Sell sarebbero chiuse da un'operazione 'Close by', mentre il Buy rimanente sarebbe chiuso da una normale operazione. Ora i comandi funzionano correttamente: chiudono solo le posizioni selezionate, in profitto o in perdita.

  3. Terminale: E’ stata migliorata la visualizzazione dei prezzi storici negativi. Questi prezzi, da adesso, appariranno correttamente su tutti i timeframe.
  4. Terminale: Abbiamo implementato un’ottimizzazione e una riduzione significativa del consumo di risorse di sistema da parte del terminale.
  5. Terminale: Abbiamo eseguito l’aggiornamento del Database fondamentale per gli strumenti di trading. Il numero di aggregatori di dati disponibili per gli strumenti su cui è possibile operare è stato ampliato a 15. Gli utenti potranno accedere a informazioni su un numero ancora maggiore di ticker attraverso gli aggregatori economici più popolari.


    Updated fundamental database for trading instruments

    Circa 7.000 titoli e più di 2.000 ETF sono quotati sul mercato globale. Inoltre, le borse forniscono future e altri strumenti derivati. La piattaforma MetaTrader 5 dà accesso a un vastissimo database di strumenti finanziari. Per accedere ai relativi dati fondamentali, gli utenti possono passare al sito web dell'aggregatore selezionato con un solo clic, direttamente dalla Vista del mercato. Per comodità, la piattaforma offre una selezione di fonti di informazione per ogni strumento finanziario.


  6. Terminale: Fissata l'indicazione Stop Loss e Take Profit nella nuova finestra di immissione dell'ordine. Per gli account FIFO, i livelli di stop verranno impostati automaticamente in base ai livelli di stop delle posizioni aperte esistenti per lo stesso strumento. Questa procedura è richiesta per rispettare la regola FIFO.

  7. MQL5: Le funzioni matematiche adesso possono lavorare con matrici e vettori.

    Continuiamo a espandere le capacità della piattaforma MetaTrader 5 per il trading algoritmico e l'apprendimento automatico. In precedenza, avevamo aggiunto nuovi tipi di dati: matrici and vettori, che eliminano la necessità di utilizzare gli array per l'elaborazione dei dati. In MQL5 sono stati aggiunti più di 70 metodi per le operazioni con questi tipi di dati. I nuovi metodi consentono di eseguire calcoli di algebra lineare e statistica in un'unica operazione. La moltiplicazione, la trasformazione e i sistemi di equazioni possono essere eseguiti facilmente, senza un numero eccessivo di linee di codice. L'ultimo aggiornamento include le funzioni matematiche.

    Le funzioni matematiche sono state originariamente progettate per eseguire operazioni rilevanti su valori scalari. Da questo momento in poi, la maggior parte delle funzioni può essere applicata a matrici e vettori. Queste includono MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh e MathTanh. Queste operazioni permettono la gestione elementare di matrici o vettori. Esempio:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    For MathMod e MathPow, il secondo elemento può essere uno scalare o una matrice/vettore della dimensione appropriata.

    L'esempio di seguito illustra come calcolare la deviazione standard applicando le funzioni matematiche a un vettore.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Use the initializing function to populate the vector
      vector r(10, ArrayRandom); // Array of random numbers from 0 to 1
    //--- Calculate the average value
      double avr=r.Mean();       // Array mean value
      vector d=r-avr;            // Calculate an array of deviations from the mean
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // Array of squared deviations
      double sum=s2.Sum();       // Sum of squared deviations
    //--- Calculate standard deviation in two ways
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  8. MQL5: Nelle funzioni template, è stato aggiunto il supporto per le notazioni matrix<double>, matrix<float>, vector<double>, vector<float> invece dei corrispondenti tipi matrix, matrixf, vector e vectorf.

  9. MQL5: Funzioni matematiche migliorate per le operazioni del tipo . La nuova possibilità di applicare funzioni matematiche a matrici e vettori 'float' ha consentito un miglioramento delle funzioni matematiche applicate agli scalari 'float'. Prima, questi parametri di funzione venivano convertiti incondizionatamente al tipo 'double', quindi veniva richiamata l'implementazione corrispondente della funzione matematica e il risultato veniva restituito al tipo 'float'. Ora le operazioni sono implementate senza fusioni di tipo non necessarie.

    L'esempio di seguito chiarisce la differenza nei calcoli matematici del seno:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  Array of random numbers from 0 to 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  10. MQL5: Abbiamo aggiunto i metodi di attivazione e derivazione per matrici e vettori:

    AF_ELU               Unità Lineare Esponenziale
    AF_EXP               Esponenziale
    AF_GELU              Errore Gaussiano Unità Lineare
    AF_HARD_SIGMOID      Sigmoide Duro
    AF_LINEAR            Lineare
    AF_LRELU             Unità Lineare Rettificata Leaky
    AF_RELU              Unità Lineare Rettificata
    AF_SELU              Unità Lineare Esponenziale Scalare
    AF_SIGMOID           Sigmoide
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Tangente Iperbolica
    AF_TRELU             Unità Lineare Rettificata con soglia
    La funzione di attivazione della rete neurale determina come la somma ponderata del segnale di ingresso viene convertita in un segnale di uscita del nodo a livello di rete. La selezione della funzione di attivazione ha un impatto significativo sulle prestazioni della rete neurale. Le varie parti del modello possono utilizzare funzioni di attivazione diverse. Oltre a tutte le funzioni conosciute, MQL5 mette a disposizione anche i derivati. Le funzioni derivate consentono il calcolo rapido delle regolazioni in base all'errore ricevuto in apprendimento.

  11. MQL5: E’ adesso disponibile la funzione LOSS per matrici e vettori. Ha i seguenti parametri:

    LOSS_MSE            Errore Quadratico Medio
    LOSS_MSE            Errore Assoluto Medio
    LOSS_CCE            Categorico Crossentropia
    LOSS_BCE            Crossentropia Binaria
    PLOSS_MAPE           Media Errore Percentuale Assoluto
    LOSS_MSLE           Errore Logaritmico Medio Quadratico
    LOSS_KLD            Kullback-Leibler Divergenza
    LOSS_COSINE         Coseno somiglianza/prossimità
    LOSS_POISSON        Poisson
    LOSS_POISSON          Hinge
    LOSS_SQ_HINGE       Al quadrato Hinge
    LOSS_CAT_HINGE      Hinge categorico
    LOSS_LOG_COSH       Logaritmo del Coseno Iperbolico
    LOSS_HUBER          Huber

    La funzione di perdita valuta quanto bene il modello prevede i valori effettivi. La costruzione del modello mira alla minimizzazione del valore della funzione in ogni fase. L'approccio dipende dal set di dati specifico. Inoltre, la funzione di perdita può dipendere dal peso e dall'offset. La funzione LOSS è unidimensionale e non è un vettore perché fornisce una valutazione generale della rete neurale.

  12. Aggiunto matrix::CompareByDigits e vector::CompareByDigits metodi per matrici e vettori. Confrontano gli elementi di due matrici/vettori fino a decimali significativi.

  13. Aggiunto supporto per stringhe per le funzioni MathMin e MathMax Le funzioni utilizzeranno il confronto lessicografico: le lettere vengono confrontate in ordine alfabetico, con distinzione tra maiuscole e minuscole.

  14. MQL5: Il numero massimo di oggetti OpenCL è stato aumentato da 256 a 65536. Gli handle di oggetto OpenCL vengono creati in un programma MQL5 utilizzando le funzioni CLContextCreate, CLBufferCreate e CLProgramCreate. Il precedente limite di 256 handle non era sufficiente per un uso efficiente dei metodi di apprendimento automatico.

  15. MQL5: Abbiamo incluso la possibilità di utilizzare OpenCL su schede grafiche senza supporto 'doppio'. In precedenza, solo le GPU che supportavano double erano consentite nei programmi MQL5, sebbene molte attività consentissero calcoli utilizzando float. Il tipo float è inizialmente considerato nativo per il calcolo parallelo, in quanto occupa meno spazio. Di conseguenza, il vecchio requisito è stato eliminato.

    Per impostare l'uso obbligatorio di GPU con supporto double per compiti specifici, è possibile utilizzare CL_USE_GPU_DOUBLE_ONLY nella chiamata a CLContextCreate.
       int cl_ctx;
    //--- Initializing the OpenCL context
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  16. MQL5: Funzionamento fisso della funzione . In precedenza, un valore diverso da zero nel campo MqlBookInfo::volume_real impediva alla funzione di creare uno snapshot della Profondità del mercato. Il controllo viene ora eseguito come segue:
    I dati trasmessi vengono validati. Per ogni elemento devono essere specificati i dati relativi al tipo, al prezzo e al volume. Inoltre, MqlBookInfo.volume e MqlBookInfo.volume_real non devono essere uguali a zero o negativi. Se entrambi i volumi sono negativi, verrà considerato un errore. Si può specificare uno qualsiasi dei tipi di volume o entrambi, mentre il sistema utilizzerà quello indicato o positivo:

       volume=-1 && volume_real=2 - verrà utilizzato volume_real=2,

       volume=3 && volume_real=0 - verrà utilizzato volume=3.

    Il volume a precisione aumentata MqlBookInfo.volume_real ha una priorità maggiore rispetto a MqlBookInfo.volume. Di conseguenza, se entrambi i valori sono specificati e sono validi, verrà utilizzato volume_real.

    Se uno degli elementi di Profondità del mercato viene descritto in modo errato, il sistema scarterà completamente lo stato trasferito.

  17. MQL5: E’ stato corretto il funzionamento della funzione CalendarValueLast. A causa di un errore, chiamate di funzioni successive dopo le modifiche al Calendario Economico (il parametro 'modifica' è stato impostato un nuovo valore dopo la chiamata) potrebbero saltare alcuni eventi quando si utilizza il filtro valuta.
    CalendarValueLast(change, result, "", "EUR")
  18. MQL5: Corretto il comportamento della funzione ArrayBSearch. Se vengono trovati più elementi identici, verrà restituito un collegamento al primo risultato, anziché uno casuale.
  19. MQL5: Abbiamo corretto il controllo della visibilità delle funzioni template all'interno di una classe. A causa di un errore, le funzioni dei modelli di classe dichiarate come private/protette sembravano essere pubbliche
  20. MetaEditor: Corretti errori e comportamenti ambigui di MetaAssist.
  21. MetaEditor: Aggiunto il supporto per la macro %terminal% che indica il percorso della directory di installazione del terminale. Ad esempio, %terminal%\MQL5\Experts. 



    Added support for the %terminal% macros which indicates the path to the terminal installation directory

  22. MetaEditor: Migliorata la visualizzazione degli array nel debugger.
  23. MetaEditor: Incrementato il buffer per la copia dei valori dal debugger.
  24. MetaEditor: Migliorati i suggerimenti di errore.
  25. MetaEditor: Aggiunta l'indicazione dei percorsi relativi nel file di progetto *.mproj. In precedenza si usavano percorsi assoluti, con conseguenti errori di compilazione in caso di spostamento del progetto.
  26. MetaEditor: Aggiunto l'incorporamento automatico di BMP risorse come array di bitmap a 32 bit disponibili a livello globale nei progetti. Questo elimina la necessità di chiamare all'interno del codice per leggere la risorsa grafica.
    'levels.bmp' as 'uint levels[18990]'
    
  27. MetaEditor: Migliorata la lettura dei formati di file BMP estesi.
  28. MetaEditor: Aggiornate le traduzioni dell'interfaccia utente.
  29. Corretti gli errori segnalati nei registri degli arresti anomali.


L'aggiornamento sarà disponibile attraverso il sistema Live Update.

Matrices and vectors in MQL5
Matrices and vectors in MQL5
  • www.mql5.com
By using special data types 'matrix' and 'vector', it is possible to create code which is very close to mathematical notation. With these methods, you can avoid the need to create nested loops or to mind correct indexing of arrays in calculations. Therefore, the use of matrix and vector methods increases the reliability and speed in developing complex programs.
Motivazione: