Symbol Properties
Symbol Properties
Market information identifiers, used with MarketInfo() function. It can be any of the following values:
| ID | Value | Description |
|---|---|---|
| MODE_LOW | 1 | Low day price |
| MODE_HIGH | 2 | High day price |
| MODE_TIME | 5 | The last incoming tick time (last known server time) |
| MODE_BID | 9 | Last incoming bid price. For the current symbol, it is stored in the predefined variable Bid |
| MODE_ASK | 10 | Last incoming ask price. For the current symbol, it is stored in the predefined variable Ask |
| MODE_POINT | 11 | Point size in the quote currency. For the current symbol, it is stored in the predefined variable Point |
| MODE_DIGITS | 12 | Count of digits after decimal point in the symbol prices. For the current symbol, it is stored in the predefined variable Digits |
| MODE_SPREAD | 13 | Spread value in points |
| MODE_STOPLEVEL | 14 | Stop level in points |
A zero value of MODE_STOPLEVEL means either absence of any restrictions on the minimal distance for Stop Loss/Take Profit or the fact that a trade server utilizes some external mechanisms for dynamic level control, which cannot be translated in the client terminal. In the second case, GetLastError() can return error 130, because MODE_STOPLEVEL is actually “floating” here. | | MODE_LOTSIZE | 15 | Lot size in the base currency | | MODE_TICKVALUE | 16 | Tick value in the deposit currency | | MODE_TICKSIZE | 17 | Tick size in points | | MODE_SWAPLONG | 18 | Swap of the buy order | | MODE_SWAPSHORT | 19 | Swap of the sell order | | MODE_STARTING | 20 | Market starting date (usually used for futures) | | MODE_EXPIRATION | 21 | Market expiration date (usually used for futures) | | MODE_TRADEALLOWED | 22 | Trade is allowed for the symbol | | MODE_MINLOT | 23 | Minimum permitted amount of a lot | | MODE_LOTSTEP | 24 | Step for changing lots | | MODE_MAXLOT | 25 | Maximum permitted amount of a lot | | MODE_SWAPTYPE | 26 | Swap calculation method. 0 - in points; 1 - in the symbol base currency; 2 - by interest; 3 - in the margin currency | | MODE_PROFITCALCMODE | 27 | Profit calculation mode. 0 - Forex; 1 - CFD; 2 - Futures | | MODE_MARGINCALCMODE | 28 | Margin calculation mode. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD for indices | | MODE_MARGININIT | 29 | Initial margin requirements for 1 lot | | MODE_MARGINMAINTENANCE | 30 | Margin to maintain open orders calculated for 1 lot | | MODE_MARGINHEDGED | 31 | Hedged margin calculated for 1 lot | | MODE_MARGINREQUIRED | 32 | Free margin required to open 1 lot for buying | | MODE_FREEZELEVEL | 33 | Order freeze level in points. If the execution price lies within the range defined by the freeze level, the order cannot be modified, cancelled or closed | | MODE_CLOSEBY_ALLOWED | 34 | Allowed using OrderCloseBy() to close opposite orders on a specified symbol |
Example:
//+------------------------------------------------------------------+
//| The script prints information on symbol |
//+------------------------------------------------------------------+
void OnStart()
{
Print("Symbol=",Symbol());
Print("Low day price=",MarketInfo(Symbol(),MODE_LOW));
Print("High day price=",MarketInfo(Symbol(),MODE_HIGH));
Print("The last incoming tick time=",(MarketInfo(Symbol(),MODE_TIME)));
Print("Last incoming bid price=",MarketInfo(Symbol(),MODE_BID));
Print("Last incoming ask price=",MarketInfo(Symbol(),MODE_ASK));
Print("Point size in the quote currency=",MarketInfo(Symbol(),MODE_POINT));
Print("Digits after decimal point=",MarketInfo(Symbol(),MODE_DIGITS));
Print("Spread value in points=",MarketInfo(Symbol(),MODE_SPREAD));
Print("Stop level in points=",MarketInfo(Symbol(),MODE_STOPLEVEL));
Print("Lot size in the base currency=",MarketInfo(Symbol(),MODE_LOTSIZE));
Print("Tick value in the deposit currency=",MarketInfo(Symbol(),MODE_TICKVALUE));
Print("Tick size in points=",MarketInfo(Symbol(),MODE_TICKSIZE));
Print("Swap of the buy order=",MarketInfo(Symbol(),MODE_SWAPLONG));
Print("Swap of the sell order=",MarketInfo(Symbol(),MODE_SWAPSHORT));
Print("Market starting date (for futures)=",MarketInfo(Symbol(),MODE_STARTING));
Print("Market expiration date (for futures)=",MarketInfo(Symbol(),MODE_EXPIRATION));
Print("Trade is allowed for the symbol=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
Print("Minimum permitted amount of a lot=",MarketInfo(Symbol(),MODE_MINLOT));
Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));
Print("Maximum permitted amount of a lot=",MarketInfo(Symbol(),MODE_MAXLOT));
Print("Swap calculation method=",MarketInfo(Symbol(),MODE_SWAPTYPE));
Print("Profit calculation mode=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
Print("Margin calculation mode=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
Print("Initial margin requirements for 1 lot=",MarketInfo(Symbol(),MODE_MARGININIT));
Print("Margin to maintain open orders calculated for 1 lot=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
Print("Hedged margin calculated for 1 lot=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
Print("Free margin required to open 1 lot for buying=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
Print("Order freeze level in points=",MarketInfo(Symbol(),MODE_FREEZELEVEL));
}To obtain the current market information there are several functions: SymbolInfoInteger(), SymbolInfoDouble() and SymbolInfoString(). The first parameter is the symbol name, the values of the second function parameter can be one of the identifiers of ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE and ENUM_SYMBOL_INFO_STRING.
For function SymbolInfoInteger():
ENUM_SYMBOL_INFO_INTEGER
| Identifier | Description | Type |
|---|---|---|
| SYMBOL_SELECT | Symbol is selected in Market Watch. |
Some symbols can be hidden in Market Watch, but still they are considered as selected. | bool | | SYMBOL_VISIBLE | Symbol is visible in Market Watch.
Some symbols (mostly, these are cross rates required for calculation of margin requirements or profits in deposit currency) are selected automatically, but generally are not visible in Market Watch. To be displayed such symbols have to be explicitly selected. | bool | | SYMBOL_SESSION_DEALS | Not supported | long | | SYMBOL_SESSION_BUY_ORDERS | Not supported | long | | SYMBOL_SESSION_SELL_ORDERS | Not supported | long | | SYMBOL_VOLUME | Not supported | long | | SYMBOL_VOLUMEHIGH | Not supported | long | | SYMBOL_VOLUMELOW | Not supported | long | | SYMBOL_TIME | Time of the last quote | datetime | | SYMBOL_DIGITS | Digits after a decimal point | int | | SYMBOL_SPREAD_FLOAT | Indication of a floating spread | bool | | SYMBOL_SPREAD | Spread value in points | int | | SYMBOL_TRADE_CALC_MODE | Contract price calculation mode | int | | SYMBOL_TRADE_MODE | Order execution type | ENUM_SYMBOL_TRADE_MODE | | SYMBOL_START_TIME | Date of the symbol trade beginning (usually used for futures) | datetime | | SYMBOL_EXPIRATION_TIME | Date of the symbol trade end (usually used for futures) | datetime | | SYMBOL_TRADE_STOPS_LEVEL | Minimal indention in points from the current close price to place Stop orders | int | | SYMBOL_TRADE_FREEZE_LEVEL | Distance to freeze trade operations in points | int | | SYMBOL_TRADE_EXEMODE | Deal execution mode | ENUM_SYMBOL_TRADE_EXECUTION | | SYMBOL_SWAP_MODE | Swap calculation model | int | | SYMBOL_SWAP_ROLLOVER3DAYS | Day of week to charge 3 days swap rollover | ENUM_DAY_OF_WEEK | | SYMBOL_EXPIRATION_MODE | Not supported | int | | SYMBOL_FILLING_MODE | Not supported | int | | SYMBOL_ORDER_MODE | Not supported | int |
For function SymbolInfoDouble():
ENUM_SYMBOL_INFO_DOUBLE
| Identifier | Description | Type |
|---|---|---|
| SYMBOL_BID | Bid - best sell offer | double |
| SYMBOL_BIDHIGH | Not supported | double |
| SYMBOL_BIDLOW | Not supported | double |
| SYMBOL_ASK | Ask - best buy offer | double |
| SYMBOL_ASKHIGH | Not supported | double |
| SYMBOL_ASKLOW | Not supported | double |
| SYMBOL_LAST | Not supported | double |
| SYMBOL_LASTHIGH | Not supported | double |
| SYMBOL_LASTLOW | Not supported | double |
| SYMBOL_POINT | Symbol point value | double |
| SYMBOL_TRADE_TICK_VALUE | Value of SYMBOL_TRADE_TICK_VALUE_PROFIT | double |
| SYMBOL_TRADE_TICK_VALUE_PROFIT | Not supported | double |
| SYMBOL_TRADE_TICK_VALUE_LOSS | Not supported | double |
| SYMBOL_TRADE_TICK_SIZE | Minimal price change | double |
| SYMBOL_TRADE_CONTRACT_SIZE | Trade contract size | double |
| SYMBOL_VOLUME_MIN | Minimal volume for a deal | double |
| SYMBOL_VOLUME_MAX | Maximal volume for a deal | double |
| SYMBOL_VOLUME_STEP | Minimal volume change step for deal execution | double |
| SYMBOL_VOLUME_LIMIT | Not supported | double |
| SYMBOL_SWAP_LONG | Buy order swap value | double |
| SYMBOL_SWAP_SHORT | Sell order swap value | double |
| SYMBOL_MARGIN_INITIAL | Initial margin means the amount in the margin currency required for opening an order with the volume of one lot. It is used for checking a client’s assets when he or she enters the market. | double |
| SYMBOL_MARGIN_MAINTENANCE | The maintenance margin. If it is set, it sets the margin amount in the margin currency of the symbol, charged from one lot. It is used for checking a client’s assets when his/her account state changes. If the maintenance margin is equal to 0, the initial margin is used. | double |
| SYMBOL_MARGIN_LONG | Not supported | double |
| SYMBOL_MARGIN_SHORT | Not supported | double |
| SYMBOL_MARGIN_LIMIT | Not supported | double |
| SYMBOL_MARGIN_STOP | Not supported | double |
| SYMBOL_MARGIN_STOPLIMIT | Not supported | double |
| SYMBOL_SESSION_VOLUME | Not supported | double |
| SYMBOL_SESSION_TURNOVER | Not supported | double |
| SYMBOL_SESSION_INTEREST | Not supported | double |
| SYMBOL_SESSION_BUY_ORDERS_VOLUME | Not supported | double |
| SYMBOL_SESSION_SELL_ORDERS_VOLUME | Not supported | double |
| SYMBOL_SESSION_OPEN | Not supported | double |
| SYMBOL_SESSION_CLOSE | Not supported | double |
| SYMBOL_SESSION_AW | Not supported | double |
| SYMBOL_SESSION_PRICE_SETTLEMENT | Not supported | double |
| SYMBOL_SESSION_PRICE_LIMIT_MIN | Not supported | double |
| SYMBOL_SESSION_PRICE_LIMIT_MAX | Not supported | double |
For function SymbolInfoString():
ENUM_SYMBOL_INFO_STRING
| Identifier | Description | Type |
|---|---|---|
| SYMBOL_CURRENCY_BASE | Basic currency of a symbol | string |
| SYMBOL_CURRENCY_PROFIT | Profit currency | string |
| SYMBOL_CURRENCY_MARGIN | Margin currency | string |
| SYMBOL_DESCRIPTION | Symbol description | string |
| SYMBOL_PATH | Path in the symbol tree | string |
There are several symbol trading modes. Information about trading modes of a certain symbol is reflected in the values of enumeration ENUM_SYMBOL_TRADE_MODE.
ENUM_SYMBOL_TRADE_MODE
| Identifier | Description |
|---|---|
| SYMBOL_TRADE_MODE_DISABLED | Trade is disabled for the symbol |
| SYMBOL_TRADE_MODE_LONGONLY* | Allowed only long positions |
| SYMBOL_TRADE_MODE_SHORTONLY* | Allowed only short positions |
| SYMBOL_TRADE_MODE_CLOSEONLY | Allowed only position close operations |
| SYMBOL_TRADE_MODE_FULL | No trade restrictions |
Possible deal execution modes for a certain symbol are defined in enumeration ENUM_SYMBOL_TRADE_EXECUTION.
ENUM_SYMBOL_TRADE_EXECUTION
| Identifier | Description |
|---|---|
| SYMBOL_TRADE_EXECUTION_REQUEST | Execution by request |
| SYMBOL_TRADE_EXECUTION_INSTANT | Instant execution |
| SYMBOL_TRADE_EXECUTION_MARKET | Market execution |
| SYMBOL_TRADE_EXECUTION_EXCHANGE* | Exchange execution |
*These values are not used in MQL4 (added for compatibility with MQL5).
Values of the ENUM_DAY_OF_WEEK enumeration are used for specifying days of week.
ENUM_DAY_OF_WEEK
| Identifier | Description |
|---|---|
| SUNDAY | Sunday |
| MONDAY | Monday |
| TUESDAY | Tuesday |
| WEDNESDAY | Wednesday |
| THURSDAY | Thursday |
| FRIDAY | Friday |
| SATURDAY | Saturday |