Accesarea datelor de piata in MQL5

February 28, 2010
By Bogdan Baltatu, MQLmagazine editor

[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.

Leave a Reply