Noutati aduse de limbajul MQL5

November 21, 2009
By Bogdan Baltatu, MQLmagazine editor

[English version] [MQLmagazine.com in english] [Editia romaneasca]

Cei de la MetaQuotes au adus o gramada de imbunatatiri la noul limbaj MQL5 fata de precedentul MQL4.

Tipuri de date

Au adaugat datele de tip enum la tipurile de date de baza , prin definirea mai precisa a tipurilor intregi: Astfel au adaugat :

char , short , long , uchar , ushort , uint , ulong

De aceasta data apar si structurile:

struct, class

Operatori

Introducerea operatorilor new si delete care se folosesc pentru crearea si distrugerea obiectelor.Acesti 2 operatori se folosesc in programarea orientata pe obiecte.

Evenimente

Acestea sunt functiile care se executa atunci cand un eveniment se intampla.Aceste functii sunt :

OnStart(), OnInit(), OnDeinit(), OnTick(), OnTimer(), OnTrade(), OnBookEvent(), OnChartEvent().

Putem mentiona ca tipuri de evenimente noi:
– OnTimer() : Functia este chemata atunci cand apare un eveniment de tip timer care este generat de functia EventSetTimer()

– OnTrade() : Functia este chemata atunci cand a se schimba lista pozitiilor sau a ordinelor ; de unde rezulta ca este apelata de fiecare data cand un order este postat sau executat.

– OnBookEvent() : Functia este chemat atunci cand un pret pe un simbol definit cu MarketBookAdd() si-a schimbat pretul.

– OnChartEvent() : Functia este chemata atunci cand graficul primeste un eveniment , fie ca e el eveniment generat de tastatura , de mouse sau mutarea unui obiect cu ajutorul mouseului.


Nota:
OnInit() preia in principiu rolul de la init() din MQL4;
OnStart() isi reduce rolul pe care il avea start() in MQL4, ramanand practic blocul de executie pentru scripturi;
OnTick() preia rolul de eveniment executat la sosirea unui tick, de la functia start() din MQL4;
OnDeinit() preia sarcinile fostei deinit() din MQL4;

Programare Orientata pe Obiecte

Una dintre marile noutati este programarea orientata pe obiecte care face codurile sa fie mai usor de scris , citit si folosit.Caracteristice pentru POO sunt cele 5 propietati de baza : incapsularea , mostenirea , polimorfismul , supraincarcarea functiilor dar si functiile virtuale.

Obiecte grafice noi

MetaQuotes vine cu noi elemente grafice.Jos este o lista cu obiectele noi aparute in MQL5:

OBJ_ELLIOTWAVE5 , OBJ_ELLIOTWAVE3 , OBJ_ARROW_THUMB_UP , OBJ_ARROW_THUMB_DOWN,
OBJ_ARROW_UP , OBJ_ARROW_DOWN , OBJ_ARROW_STOP , OBJ_ARROW_CHECK ,OBJ_ARROW_LEFT_PRICE,
OBJ_ARROW_RIGHT_PRICE ,OBJ_BUTTON , OBJ_CHART , OBJ_BITMAP , OBJ_BITMAP_LABEL , OBJ_EDIT.

Opinia noastra ar fi ca cele mai importante sunt: OBJ_EDIT,OBJ_BUTTON si OBJ_CHART. O data cu OBJ_CHART vine posibilitatea de a avea chart in chart ( deci din acelasi chart sa vizualiezi alte charturi) . Obiectele vin impachetate cu o multitudine de proprietati, care duce la un management mai bun al obiectelor vizuale.

Variabile speciale pentru debugging

Pentru simplificarea modului de debug s-au introdus patru variabile : __LINE__ , __FILE__ ,__FUNCTION__ ,__MQL5BUILD__  , cu care se pot afisa informatii despre linia curenta, functia , fisierul si versiunea MQL5 cu care au fost compilate fisierele ; acestea sunt ajutatoare in debugging pentru ca asemenea informatii nu existau in MQL4 si posibilele erori generate de functii puteau fi gasite numai prin extinderea logurilor si cu efort semnificativ de programare.

Sistemul pozitiilor care inlocuieste sistemul bazat pe ordine

Aceasta este mai degraba o caracteristica a MT5 decat a MQL5. Totusi, pentru ca schimba activitatea de trading, lasa urme asupra MQL5. Mecanismul selectiei ordinelor este modificat, si vine cu un sistem de selectie a pozitiilor.

Enumerarea simbolurilor

Datorita functiilor SymbolSelect() si SymbolTotal() se poate alcatui cu usurinta lista tutror simbolurilor oferite de broker. Mai mult decat atat cu ajutorul lui SymbolInfoInteger() se pot afla mai multe informatii, cum ar fi modul de calcul al profitului si al marjei , pentru ca acestea spun natura simbolului.
Aceasta a existat si in MQL4 prin functia MarketInfo(), dar intoarcerea listei de simboluri era imposibila.
Natura simbolului, combinata cu lista, formeaza o unealta importanta in cunoasterea caror simboluri sunt cursuri valutare , actiuni sau indici bursieri. Aceasta va avea implicatii mai tarziu in momentul in care pentru futures si pentru actiuni vor exista regului comune pentru compunerea simbolurilor optiunilor.

Un nou mod de citire/scriere a proprietatilor

Functiile care lucreaza cu proprietati sunt acum impartite pe tipuri de variabile, conform tipului de date cu care se lucreaza:
De exemplu MarketInfo() din MQL4 se scindeaza in SymbolInfoInteger(), SymbolInfoDouble(), SymbolInfoString() ; de asemenea si SymbolInfoTick() pentru preturile curente;
Functiile care lucreaza cu contul , care erau cate una per element solicitat in MQL4, sunt organizate similar:
AccountInfoInteger(), AccountInfoDouble(), AccountInfoString() (sunt 16 functii de cont in MQL4, pentru comparatie);
Totodata, functiile de terminal sunt grupate in mod similar : TerminalInfoInteger() si TerminalInfoString().
Pentru programul care ruleaza, MQL5InfoInteger(), MQL5InfoString() (functii similare erau inexistente in MQL4);
Pentru serii temporale : SeriesInfoInteger();
Pentru charturi : ChartGetDouble(), ChartGetInteger(),ChartGetString() , cu complementele lor de scriere ChartSetDouble(), ChartSetString(), ChartSetSymbolPeriod() , alaturi de o serie de functii mostenite din seriile de functii de fereastra din MQL4;
Pentru indicatori : IndicatorSetDouble(), IndicatorSetInteger(), IndicatorSetString();
Pentru modul de desenare al indicatorilor : PlotIndexGetInteger(), PlotIndexSetDouble(), PlotIndexSetInteger(), PlotIndexSetString;
Pentru obiecte : ObjectGetDouble(), ObjectGetInteger(), ObjectGetString() precum si mai noile ObjectGetTimeByValue(), ObjectGetValueByTime ; iar pentru scriere, ObjectSetDouble(), ObjectSetInteger(), ObjectSetString().

Un nou mod de adresare a seriilor temporale

Dispar functii gen iHigh(), iHighest(), iLow(), iLowest(), iOpen(), iClose(), iBars(), iBarShift() din MQL4.
Am spus ca a aparut functia SeriesInfoInteger(). Dar aceasta returneaza numai proprietati generale.
Pentru returnarea datelor din serii temporale se utilizeaza functia CopyRates().

Un nou mod de construire si adresare a indicatorilor

Este un subiect prea complicat pentru a fi adresat in articolul de fata. Totusi, toti indicatorii, inclusiv indicatorii utilizator, au o adresare schimbata. De data aceasta, functiile nu mai returneaza valori, ci handlere. Este recomandabil sa fie creat cate un handler pentru fiecare indicator apelati cu anumiti parametri, o singura data. Apoi, datele pot fi extrase, pentru orice bara, cu ajutorul functiei CopyBuffer(), care poate folosi acelasi handler de oricate ori ar fi nevoie.

Desigur, nu putem acoperi intr-un articol totalitatea noutatilor relevante aduse de MQL5. Acestea vor iesi la iveala cu timpul, odata cu dezvoltarea strategiilor de trading scrise in MQL5.

Editii