Accesarea datelor de piata in MQL5
[English version] [MQLmagazine.com in english] [Editia romaneasca]
In acest articol va voi prezenta functiile de accesare a datelor despre piata in MQL5 , dar voi compara cu functia care facea acest lucru in MQL4.
In MQL4 exista o functie unica cu care se aflau toate informatiile si anume MarketInfo(). In MQL5 functia MarketInfo() a disparut , acesteia luandu-i locul functiile SymbolInfoDouble() , SymbolInfoInteger() , SymbolInfoString() ,SymbolInfoTick(). Numele fiecarei functii este format din 3 cuvinte: primele 2 sunt ‘SymbolInfo’ , si ultimul cuvant care arata ce returneaza functia respectiv ‘Double’ , ‘Integer’ , ‘String’.
SymbolInfoDouble()
Functia are 2 prototipuri si anume :
1 2 3 4 | double SymbolInfoDouble( string name, // simbol int prop_id // identificator de proprietate ); |
Al doilea prototip de functie este:
1 2 3 4 5 | bool SymbolInfoDouble( string name, // simbol int prop_id, // identificator de proprietate double &double_var // variabila rezultat ); |
Functia returneaza true daca se executa cu succes (daca plaseaza valoarea intoarsa intr-o variabila trimisa ca parametru).
| Identificator | Descriere | Echivalent in MQL4 |
| SYMBOL_BID | Bid – Cea mai buna oferta de cumparare (nivel II) sau pretul de vanzare (nivel I) | MODE_BID |
| SYMBOL_BIDHIGH | Bid-ul maxim al zilei | Nu are echivalent in MQL4 |
| SYMBOL_BIDLOW | Bid-ul minim al zilei | Nu are echivalent in MQL4 |
| SYMBOL_ASK | Ask – Cea mai buna oferta de vanzare (nivel II) sau pretul de cumparare (nivel I) | MODE_ASK |
| SYMBOL_ASKHIGH | Ask-ul maxim al zilei | Nu are echivalent in MQL4 |
| SYMBOL_ASKLOW | Ask-ul minim al zilei | Nu are echivalent in MQL4 |
| SYMBOL_LAST | Pretul ultimei tranzactii incheiate. | Nu are echivalent in MQL4 |
| SYMBOL_LASTHIGH | Pretul maxim a ultimei tranzactii incheiate a zilei | Nu are echivalent in MQL4 |
| SYMBOL_LASTLOW | Pretul minim al ultimei tranzactii incheiate a zilei | Nu are echivalent in MQL4 |
| SYMBOL_POINT | Punctul matematic. De exemplu, daca o cotatie are 4 cifre, punctul este 1/10000 . | MODE_POINT |
| SYMBOL_TRADE_TICK_VALUE | Valoarea unui tick, pe un lot standard, in moneda contului. De exemplu este 1 la EURUSD, daca lotul este 100000, cu 5 cifre, sau 10, pentru 4 cifre. Pentru forex, este CONTRACT SIZE * TICK SIZE , considerat in a doua moneda din pereche si convertit mai departe in moneda contului. Pentru futures, este CONTRACT SIZE * POINT * TICK SIZE (ar trebui sa fie si convertit in moneda contului, dar e posibil sa nu fie…) | MODE_TICKVALUE |
| SYMBOL_TRADE_TICK_SIZE | Marimea unui tick. La forex, coincide cu POINT. La alte piete, difera.De exemplu la porumb futures este 0.25, intrucat este pasul minim de cotare. | MODE_TICKSIZE |
| SYMBOL_TRADE_ CONTRACT_SIZE | Marimea pentru un lot (lotul standard). De regula, pentru forex este de 100000 de unitati (la unii brokeri, atentie, 10000). Difera pentru futures. | MODE_LOTSIZE |
| SMBOL_VOLUME_MIN | Volumul minim al unei tranzactii | MODE_MINLOT |
| SYMBOL_VOLUME_MAX | Volumul maxim al unei tranzactii | MODE_MAXLOT |
| SYMBOL_VOLUME_STEP | Pasul volumului (volumul acceptabil al tranzactiei trebuie sa fie un multiplu de pas, dupa volumul minim) | MODE_LOTSTEP |
| SYMBOL_SWAP_LONG | Swap pentru pozitia long | MODE_SWAPLONG |
| SYMBOL_SWAP_SHORT | Swap pentru pozitia short | MODE_SWAPSHORT |
SymbolInfoInteger()
Functia are acelasi prototip ca functia SymbolInfoDouble().
Tabelul de echivalenta a functiei SymbolInfoInteger() in MQL4 este:
| Identificator | Descriere | Tip | Echivalentul in MQL4 |
| SYMBOL_SELECT | Simbolul este selectat in Market Watch | bool | Nu are echivalent in MQL4 |
| SYMBOL_VOLUME | Volumul ultimei tranzactii | long | Nu are echivalent in MQL4 |
| SYMBOL_VOLUMEHIGH | Volumul maxim al zilei | long | Nu are echivalent in MQL4 |
| SYMBOL_VOLUMELOW | Volumul minim al zilei | long | Nu are echivalent in MQL4 |
| SYMBOL_VOLUMEBID | Volumul pentru Bid-ul curent | long | Nu are echivalent in MQL4 |
| SYMBOL_VOLUMEASK | Volumul pentru Ask-ul curent | long | Nu are echivalent in MQL4 |
| SYMBOL_TIME | Timpul ultimei cotari | datetime | MODE_TIME |
| SYMBOL_DIGITS | Numarul de zecimale dupa punct (sau logaritm in baza 10 din inversul lui POINT) | int | MODE_DIGITS |
| SYMBOL_SPREAD | Valoarea spredului in puncte | int | MODE_SPREAD |
| SYMBOL_TICK_BOOKDEPTH | Adancimea pietei in nivele de stocare a cotatiilor. | long | Nu are echivalent in MQL4 |
| SYMBOL_TRADE_CALC_MODE | Modul de calcul al profitului si marjei pentru contract | ENUM_ SYMBOL_ CALC_ MODE | Nu are echivalent in MQL4 |
| SYMBOL_TRADE_MODE | Tipul de executie al ordinului | ENUM_ SYMBOL_ TRADE_ MODE | Nu are echivalent in MQL4 |
| SYMBOL_TRADE_STOPS_LEVEL | Distanta minima acceptabila intre pretul curent si nivelul de Stop | int | MODE_STOPLEVEL |
| SYMBOL_TRADE_FREEZE_LEVEL | Nivelul de inghetare a ordinului, in puncte. Daca pretul de executie este in zona definita de nivelul de inghetare, ordinul nu poate modificat, anulat sau inchis. | int | MODE_FREEZELEVEL |
| SYMBOL_TRADE_EXEMODE | Modul de executie al tranzactiei | ENUM_ SYMBOL_ TRADE_ EXECUTION | Nu are echivalent in MQL4 |
| SYMBOL_SWAP_MODE | Modelul de calcul al swapului | ENUM_ SYMBOL_ SWAP_ MODE | MODE_SWAPTYPE |
| SYMBOL_ROLLOVER3DAYS | Ziua in care swapul e triplu | ENUM_ DAY_OF_ WEEK | Nu are echivalent in MQL4 |
Tipul ENUM_SYMBOL_CALC_MODE descrie modul de calcul pentru marja si profit, dupa cum urmeaza:
| Identificator | Descriere | Formula |
| SYMBOL_CALC_MODE_FOREX | Forex | Marja=Lots*Contract_Size/Leverage; Profit=(close_price-open_price)*Contract_Size*Lots |
| SYMBOL_CALC_MODE_CFD | CFD | Marja=Lots*Contract_Size*Market_Price*Percentage/100; Profit=(close_price-open_price)*Contract_Size*Lots |
| SYMBOL_CALC_MODE_FUTURES | Futures | Marja=Lots*Initial_Margin*Percentage/100; Profit=(close_price-open_price)*Tick_Price/Tick_Size*Lots |
| SYMBOL_CALC_MODE_CFDINDEX | Indice CFD | Marja=(Lots*Contract_Size*Market_Price)*Tick_Price/Tick_Size; Profit=(close_price-open_price)*Contract_Size*Lots |
| SYMBOL_CALC_MODE_CFDLEVERAGE | CFD cu levier | Marja=(Lots*Contract_Size*Market_Price*Percentage)/Leverage; Profit=(close_price-open_price)*Contract_Size*Lots |
Tipul ENUM_SYMBOL_TRADE_MODE descrie ce fel de operatiuni sunt permise.
| Identificator | Semnificatie |
| SYMBOL_TRADE_MODE_DISABLED | Tranzactionarea este oprita |
| SYMBOL_TRADE_MODE_LONGONLY | Se admite numai ca pozitia sa fie long |
| SYMBOL_TRADE_MODE_SHORTONLY | Se admite numai ca pozitia sa fie short |
| SYMBOL_TRADE_MODE_CLOSEONLY | Se admit numai operatiuni de inchidere a pozitiei |
| SYMBOL_TRADE_MODE_FULL | Trading nerestrictionat |
Tipul ENUM_SYMBOL_TRADE_MODE descrie ce fel este executia.
| Identificator | Semnificatie |
| SYMBOL_TRADE_EXECUTION_REQUEST | Executie la cerere. |
| SYMBOL_TRADE_EXECUTION_INSTANT | Executie instant. |
| SYMBOL_TRADE_EXECUTION_MARKET | Executie la piata |
In masura in care Deviation ramane un parametru crucial pentru executie, ramane de vazut diferenta dintre cele trei moduri…
Tipul ENUM_SYMBOL_SWAP_MODE descrie in ce fel se aplica swapul.
| Identificator | Semnificatie | Observatii |
| SYMBOL_SWAP_MODE_DISABLED | Fara swap | |
| SYMBOL_SWAP_MODE_BY_POINTS | Swap in puncte | |
| SYMBOL_SWAP_MODE_BY_MONEY | Swap in bani, cu valoarea specificata in moneda de depozit. | Probabil swap in moneda de depozit, pentru lotul standard. |
| SYMBOL_SWAP_MODE_BY_INTEREST | Swap in puncte procentuale anuale (model bancar, an de 360 de zile) | Formula e destul de clara, dar care e moneda? |
| SYMBOL_SWAP_MODE_BY_MARGIN_CURRENCY | Swap in bani, cu valoarea specificata in moneda marjei. | Probabil swap in moneda marjei, pentru lotul standard. |
Totusi, MetaQuotes nu a indicat si formulele de calcul pentru swap. Swapul a fost o adevarata enigma in MT4, iar formulele de calcul au fost depistate pe incercate (in afara de tipul 2, pe care nu l-am acoperit in articolul din 2007 pe tema swapului). Se pare ca totusi de aceasta data vor fi mai simplu de extras, fara bataile de cap pe care le-am avut cu MT4.
Tipul ENUM_DAY_OF_WEEK cuprinde zilele saptamanii.
SymbolInfoString()
Functia are acelasi prototip ca functia SymbolInfoDouble().
Tabelul de echivalenta a functiei SymbolInfoString() in MQL4 este:
| Identificator | Descriere | Echivalentul in MQL4 |
| SYMBOL_CURRENCY_BASE | Moneda de baza a simbolului | Nu are echivalent in MQL4 |
| SYMBOL_CURRENCY_PROFIT | Moneda profitului | Nu are echivalent in MQL4 |
| SYMBOL_CURRENCY_MARGIN | Moneda marjei. La forex, e prima moneda din pereche. | Nu are echivalent in MQL4 |
| SYMBOL_BANK | Furnizorul cotatiei curente | Nu are echivalent in MQL4 |
| SYMBOL_DESCRIPTION | Descrierea simbolului | Nu are echivalent in MQL4 |
| SYMBOL_PATH | Calea in arborele de simboluri | Nu are echivalent in MQL4 |
SymbolInfoTick()
Functia SymbolInfoTick() are urmatorul prototip:
1 2 3 4 | bool SymbolInfoTick( string symbol, // simbol MqlTick& tick // referinta la o structura MqlTick ); |
Functia pune intr-o structura MqlTick datele cotatiei curente de piata.