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:
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.
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.
Terminale: E’ stata migliorata la visualizzazione dei prezzi storici negativi. Questi prezzi, da adesso, appariranno correttamente su tutti i timeframe.
Terminale: Abbiamo implementato un’ottimizzazione e una riduzione significativa del consumo di risorse di sistema da parte del terminale.
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.
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.
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.
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:
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 |//+------------------------------------------------------------------+voidOnStart()
{
//--- Use the initializing function to populate the vector
vector r(10, ArrayRandom); // Array of random numbers from 0 to 1//--- Calculate the average valuedouble avr=r.Mean(); // Array mean value
vector d=r-avr; // Calculate an array of deviations from the meanPrint("avr(r)=", avr);
Print("r=", r);
Print("d=", d);
vector s2=MathPow(d, 2); // Array of squared deviationsdouble sum=s2.Sum(); // Sum of squared deviations//--- Calculate standard deviation in two waysdouble 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.;
}
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.
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 |//+------------------------------------------------------------------+voidOnStart()
{
//--- 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.;
}
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.
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.
Aggiunto matrix::CompareByDigits e vector::CompareByDigits metodi per matrici e vettori. Confrontano gli elementi di due matrici/vettori fino a decimali significativi.
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.
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.
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 contextif((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
{
Print("OpenCL not found");
return;
}
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.
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")
MQL5: Corretto il comportamento della funzione ArrayBSearch. Se vengono trovati più elementi identici, verrà restituito un collegamento al primo risultato, anziché uno casuale.
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
MetaEditor: Corretti errori e comportamenti ambigui di MetaAssist.
MetaEditor: Aggiunto il supporto per la macro %terminal% che indica il percorso della directory di installazione del terminale. Ad esempio, %terminal%\MQL5\Experts.
MetaEditor: Migliorata la visualizzazione degli array nel debugger.
MetaEditor: Incrementato il buffer per la copia dei valori dal debugger.
MetaEditor: Migliorati i suggerimenti di errore.
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.
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]'
MetaEditor: Migliorata la lettura dei formati di file BMP estesi.
MetaEditor: Aggiornate le traduzioni dell'interfaccia utente.
Corretti gli errori segnalati nei registri degli arresti anomali.
L'aggiornamento sarà disponibile attraverso il sistema Live Update.
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.
L'aggiornamento della piattaforma MetaTrader 5 sarà rilasciato giovedì 4 agosto 2022. L'aggiornamento avrà le seguenti modifiche:

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.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:
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.
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:
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.
Per impostare l'uso obbligatorio di GPU con supporto double per compiti specifici, è possibile utilizzare CL_USE_GPU_DOUBLE_ONLY nella chiamata a CLContextCreate.
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.
L'aggiornamento sarà disponibile attraverso il sistema Live Update.