188 lines
11 KiB
Markdown
188 lines
11 KiB
Markdown
# StringFormat
|
||||
|
|
|
|||
|
|
The function formats obtained parameters and returns a string.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
string StringFormat(
|
|||
|
|
string format, // string with format description
|
|||
|
|
... ... // parameters
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Parameters
|
|||
|
|
|
|||
|
|
format
|
|||
|
|
|
|||
|
|
[in] String containing method of formatting. Formatting rules are the same as for the [PrintFormat](/en/docs/common/printformat) function.
|
|||
|
|
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
[in] Parameters, separated by a comma.
|
|||
|
|
|
|||
|
|
Return Value
|
|||
|
|
|
|||
|
|
String.
|
|||
|
|
|
|||
|
|
Example:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
void OnStart()
|
|||
|
|
{
|
|||
|
|
//--- string variables
|
|||
|
|
string output_string;
|
|||
|
|
string temp_string;
|
|||
|
|
string format_string;
|
|||
|
|
//--- prepare the specification header
|
|||
|
|
temp_string=StringFormat("Contract specification for %s:\n",_Symbol);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- int value output
|
|||
|
|
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_DIGITS = %d (number of digits after the decimal point)\n",
|
|||
|
|
digits);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output with variable number of digits after the decimal point
|
|||
|
|
double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
|
|||
|
|
format_string=StringFormat(" SYMBOL_POINT = %%.%df (point value)\n",
|
|||
|
|
digits);
|
|||
|
|
temp_string=StringFormat(format_string,point_value);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- int value output
|
|||
|
|
int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_SPREAD = %d (current spread in points)\n",
|
|||
|
|
spread);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- int value output
|
|||
|
|
int min_stop=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_TRADE_STOPS_LEVEL = %d (minimal indention in points for Stop orders)\n",
|
|||
|
|
min_stop);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output without the fractional part
|
|||
|
|
double contract_size=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_TRADE_CONTRACT_SIZE = %.f (contract size)\n",
|
|||
|
|
contract_size);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output with default accuracy
|
|||
|
|
double tick_size=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_TRADE_TICK_SIZE = %f (minimal price change)\n",
|
|||
|
|
tick_size);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- determining the swap calculation mode
|
|||
|
|
int swap_mode=(int)SymbolInfoInteger(_Symbol,SYMBOL_SWAP_MODE);
|
|||
|
|
string str_swap_mode;
|
|||
|
|
switch(swap_mode)
|
|||
|
|
{
|
|||
|
|
case SYMBOL_SWAP_MODE_DISABLED: str_swap_mode="SYMBOL_SWAP_MODE_DISABLED (no swaps)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_POINTS: str_swap_mode="SYMBOL_SWAP_MODE_POINTS (in points)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_CURRENCY_SYMBOL: str_swap_mode="SYMBOL_SWAP_MODE_CURRENCY_SYMBOL (in money, in base currency of the symbol)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_CURRENCY_MARGIN: str_swap_mode="SYMBOL_SWAP_MODE_CURRENCY_MARGIN (in money, in margin currency of the symbol)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_CURRENCY_DEPOSIT: str_swap_mode="SYMBOL_SWAP_MODE_CURRENCY_DEPOSIT (in money, in client deposit currency)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_INTEREST_CURRENT: str_swap_mode="SYMBOL_SWAP_MODE_INTEREST_CURRENT (as the specified annual interest from the instrument price at calculation of swap)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_INTEREST_OPEN: str_swap_mode="SYMBOL_SWAP_MODE_INTEREST_OPEN (as the specified annual interest from the position open price)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_REOPEN_CURRENT: str_swap_mode="SYMBOL_SWAP_MODE_REOPEN_CURRENT (by reopening positions by the close price +/- specified number of points)"; break;
|
|||
|
|
case SYMBOL_SWAP_MODE_REOPEN_BID: str_swap_mode="SYMBOL_SWAP_MODE_REOPEN_BID (by reopening positions by the current Bid price +/- specified number of points)"; break;
|
|||
|
|
}
|
|||
|
|
//--- string value output
|
|||
|
|
temp_string=StringFormat(" SYMBOL_SWAP_MODE = %s\n",
|
|||
|
|
str_swap_mode);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output with default accuracy
|
|||
|
|
double swap_long=SymbolInfoDouble(_Symbol,SYMBOL_SWAP_LONG);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_SWAP_LONG = %f (long swap value)\n",
|
|||
|
|
swap_long);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output with default accuracy
|
|||
|
|
double swap_short=SymbolInfoDouble(_Symbol,SYMBOL_SWAP_SHORT);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_SWAP_SHORT = %f (short swap value)\n",
|
|||
|
|
swap_short);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- determining the trading mode
|
|||
|
|
int trade_mode=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_MODE);
|
|||
|
|
string str_trade_mode;
|
|||
|
|
switch(trade_mode)
|
|||
|
|
{
|
|||
|
|
case SYMBOL_TRADE_MODE_DISABLED: str_trade_mode="SYMBOL_TRADE_MODE_DISABLED (trade is disabled for the symbol)"; break;
|
|||
|
|
case SYMBOL_TRADE_MODE_LONGONLY: str_trade_mode="SYMBOL_TRADE_MODE_LONGONLY (only long positions are allowed)"; break;
|
|||
|
|
case SYMBOL_TRADE_MODE_SHORTONLY: str_trade_mode="SYMBOL_TRADE_MODE_SHORTONLY (only short positions are allowed)"; break;
|
|||
|
|
case SYMBOL_TRADE_MODE_CLOSEONLY: str_trade_mode="SYMBOL_TRADE_MODE_CLOSEONLY (only position close operations are allowed)"; break;
|
|||
|
|
case SYMBOL_TRADE_MODE_FULL: str_trade_mode="SYMBOL_TRADE_MODE_FULL (no trade restrictions)"; break;
|
|||
|
|
}
|
|||
|
|
//--- string value output
|
|||
|
|
temp_string=StringFormat(" SYMBOL_TRADE_MODE = %s\n",
|
|||
|
|
str_trade_mode);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output in a compact format
|
|||
|
|
double volume_min=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_VOLUME_MIN = %g (minimal volume for a deal)\n",volume_min);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output in a compact format
|
|||
|
|
double volume_step=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_VOLUME_STEP = %g (minimal volume change step)\n",volume_step);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output in a compact format
|
|||
|
|
double volume_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_VOLUME_MAX = %g (maximal volume for a deal)\n",volume_max);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- determining the contract price calculation mode
|
|||
|
|
int calc_mode=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE);
|
|||
|
|
string str_calc_mode;
|
|||
|
|
switch(calc_mode)
|
|||
|
|
{
|
|||
|
|
case SYMBOL_CALC_MODE_FOREX:str_calc_mode="SYMBOL_CALC_MODE_FOREX (Forex)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_FUTURES:str_calc_mode="SYMBOL_CALC_MODE_FUTURES (futures)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_CFD:str_calc_mode="SYMBOL_CALC_MODE_CFD (CFD)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_CFDINDEX:str_calc_mode="SYMBOL_CALC_MODE_CFDINDEX (CFD for indices)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_CFDLEVERAGE:str_calc_mode="SYMBOL_CALC_MODE_CFDLEVERAGE (CFD at leverage trading)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_EXCH_STOCKS:str_calc_mode="SYMBOL_CALC_MODE_EXCH_STOCKS (trading securities on a stock exchange)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_EXCH_FUTURES:str_calc_mode="SYMBOL_CALC_MODE_EXCH_FUTURES (trading futures contracts on a stock exchange)";break;
|
|||
|
|
case SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS:str_calc_mode="SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS (trading futures contracts on FORTS)";break;
|
|||
|
|
}
|
|||
|
|
//--- string value output
|
|||
|
|
temp_string=StringFormat(" SYMBOL_TRADE_CALC_MODE = %s\n",
|
|||
|
|
str_calc_mode);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output with 2 digits after the decimal point
|
|||
|
|
double margin_initial=SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_MARGIN_INITIAL = %.2f (initial margin)\n",
|
|||
|
|
margin_initial);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- double value output with 2 digits after the decimal point
|
|||
|
|
double margin_maintenance=SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_MARGIN_MAINTENANCE = %.2f (maintenance margin)\n",
|
|||
|
|
margin_maintenance);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
//--- int value output
|
|||
|
|
int freeze_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
|
|||
|
|
temp_string=StringFormat(" SYMBOL_TRADE_FREEZE_LEVEL = %d (order freeze level in points)",
|
|||
|
|
freeze_level);
|
|||
|
|
StringAdd(output_string,temp_string);
|
|||
|
|
Print(output_string);
|
|||
|
|
Comment(output_string);
|
|||
|
|
/* execution result
|
|||
|
|
Contract specification for EURUSD:
|
|||
|
|
SYMBOL_DIGITS = 5 (number of digits after the decimal point)
|
|||
|
|
SYMBOL_POINT = 0.00001 (point value)
|
|||
|
|
SYMBOL_SPREAD = 10 (current spread in points)
|
|||
|
|
SYMBOL_TRADE_STOPS_LEVEL = 18 (minimal indention in points for Stop orders)
|
|||
|
|
SYMBOL_TRADE_CONTRACT_SIZE = 100000 (contract size)
|
|||
|
|
SYMBOL_TRADE_TICK_SIZE = 0.000010 (minimal price change)
|
|||
|
|
SYMBOL_SWAP_MODE = SYMBOL_SWAP_MODE_POINTS (in points)
|
|||
|
|
SYMBOL_SWAP_LONG = -0.700000 (buy order swap value)
|
|||
|
|
SYMBOL_SWAP_SHORT = -1.000000 (sell order swap value)
|
|||
|
|
SYMBOL_TRADE_MODE = SYMBOL_TRADE_MODE_FULL (no trade restrictions)
|
|||
|
|
SYMBOL_VOLUME_MIN = 0.01 (minimal volume for a deal)
|
|||
|
|
SYMBOL_VOLUME_STEP = 0.01 (minimal volume change step)
|
|||
|
|
SYMBOL_VOLUME_MAX = 500 (maximal volume for a deal)
|
|||
|
|
SYMBOL_TRADE_CALC_MODE = SYMBOL_CALC_MODE_FOREX (Forex)
|
|||
|
|
SYMBOL_MARGIN_INITIAL = 0.00 (initial margin)
|
|||
|
|
SYMBOL_MARGIN_MAINTENANCE = 0.00 (maintenance margin)
|
|||
|
|
SYMBOL_TRADE_FREEZE_LEVEL = 0 (order freeze level in points)
|
|||
|
|
*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
See also
|
|||
|
|
|
|||
|
|
[PrintFormat](/en/docs/common/printformat), [DoubleToString](/en/docs/convert/doubletostring),[ColorToString](/en/docs/convert/colortostring), [TimeToString](/en/docs/convert/timetostring)
|