void OnStart() { //— string variables string output_string; string temp_string; string format_string; //— prepare the specification header temp_string=StringFormat(“Contract specification for %s:\r\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)\r\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)\r\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)\r\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)\r\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)\r\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)\r\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 0: str_swap_mode=“0 (in points)”; break; case 1: str_swap_mode=“1 (in symbol base currency)”; break; case 2: str_swap_mode=“2 (by interest)”; break; case 3: str_swap_mode=“3 (in margin currency)”; break; } //— string value output temp_string=StringFormat(” SYMBOL_SWAP_MODE = %s\r\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 (buy order swap value)\r\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 (sell order swap value)\r\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\r\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)\r\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)\r\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)\r\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 0:str_calc_mode=“0 (Forex)”;break; case 1:str_calc_mode=“1 (CFD)”;break; case 2:str_calc_mode=“2 (futures)”;break; case 3:str_calc_mode=“3 (CFD for indices)”;break; } //— string value output temp_string=StringFormat(” SYMBOL_TRADE_CALC_MODE = %s\r\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)\r\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)\r\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 EURJPY: SYMBOL_DIGITS = 3 (number of digits after the decimal point) SYMBOL_POINT = 0.001 (point value) SYMBOL_SPREAD = 23 (current spread in points) SYMBOL_TRADE_STOPS_LEVEL = 100 (minimal indention in points for Stop orders) SYMBOL_TRADE_CONTRACT_SIZE = 100000 (contract size) SYMBOL_TRADE_TICK_SIZE = 0.001000 (minimal price change) SYMBOL_SWAP_MODE = 0 (in points) SYMBOL_SWAP_LONG = -1.600000 (buy order swap value) SYMBOL_SWAP_SHORT = -1.100000 (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 = 1000 (maximal volume for a deal) SYMBOL_TRADE_CALC_MODE = 0 (Forex) SYMBOL_MARGIN_INITIAL = 0.00 (initial margin) SYMBOL_MARGIN_MAINTENANCE = 0.00 (maintenance margin) SYMBOL_TRADE_FREEZE_LEVEL = 20 (order freeze level in points) */ } |