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) */ } |