Watch how to download trading robots for free
Find us on Twitter!
Join our fan page
Interesting script?
So post a link to it -
let others appraise it
You liked the script? Try it in the MetaTrader 5 terminal
Libraries

Print massive information (PrintXYZ) from the terminal - library for MetaTrader 5

Views:
365
Rating:
(3)
Published:
2025.02.15 14:00
Updated:
2025.02.21 04:55
PrintXYZ.mqh (42.78 KB) view
PrintXYZ_demo.mq5 (41.81 KB) view
MQL5 Freelance Need a robot or indicator based on this code? Order it on Freelance Go to Freelance

PrintXYZ() library

A small collection of functions to print massive information from the terminal to the Experts tab.

This is most useful for printing (and debugging) the trade account specs, the client terminal properties, OpenCL devices, a specific chart or symbol, mql program info, or printing a specific position/deal/order in the trading history. Printing all tester statisitcs is available inside OnTester() or OnDeinit() in tester.

Definitions of all the enumerated types of MQL5 language can also be pretty-printed using a generic way (no hard-coded enums, to ensure printing all newly-added values to MQL5) by using PrintEnum<T>(), where T is the enum type, such as ENUM_TIMEFRAMES.

The PrintStruct(var) function is used to pretty print a structure variable (with the display of all its field names and values).

The PrintExpr(x) function-like macro prints a stringified expression along with its value and type. This is used mainly to debug expressions, variables or function calls.The output of this script can be sent to a remote-support person or to a freelance developper to aid detecting and fixing problems on your terminal.

Functions:

//+------------------------------------------------------------------+
//| Functions in the 'PrintXYZ' library.                             |
//+------------------------------------------------------------------+
void PrintAccount();
void PrintTerminal();
void PrintMQLInfo();

void PrintChart( long chart_id );
void PrintObject( long chart_id, string name );
void PrintSymbol( string symbol );
void PrintSeries( string symbol, ENUM_TIMEFRAMES timeframe );

void PrintPosition( ulong pos_ticket );
void PrintOrder( ulong order_ticket );
void PrintDeal( ulong deal_ticket );
void PrintHistoryOrder( ulong order_ticket );

void PrintOpenCL( int device );
void PrintTesterStatistics();

void PrintEnum<T> ();
void PrintStruct<T> (T& struct_var);
PrintExpr(x); // macro


MetaEditor Tip:

By including 'PrintXYZ' library in your projects, the above functions will become available in MetaEditor's auto-complete box wherever, you type 'Print'. You can quickly compile the project file to print the results of MQL5 functions to the 'Experts' tab, and then you can decide which combination of MQL function / enum value will suit your requirements the best.


Test script:

//+------------------------------------------------------------------+
//| Test script                                                      |
//+------------------------------------------------------------------+
#include "PrintXYZ.mqh"

void OnStart()
  {
//--- Print massive information for debugging
   PrintAccount();
   PrintTerminal();
   PrintOpenCL(0);                       // by index of OpenCL device in the system
   //PrintOpenCL(CL_USE_GPU_ONLY);       // by type of the OpenCL device

//--- Print info about running program, specific chart, symbol or series.
   PrintMQLInfo();
   PrintChart(0);
   PrintObject(0,"Horizontal Line 54478");
   PrintSymbol(_Symbol);
   PrintSeries(_Symbol, PERIOD_CURRENT);

//--- Print a specific position or pending order.
   //PrintPosition(925571424);           // by position ticket
   PrintPosition(PositionGetTicket(0));  // by position index [ add extra PositionGetTicket(index) ]
   PrintOrder(OrderGetTicket(0));

//--- Print a specific history deal or order.
   HistorySelect(0,INT_MAX);
   PrintDeal(HistoryDealGetTicket(0));   // by deal index
   PrintHistoryOrder(HistoryOrderGetTicket(0));

//--- Print enumeration definition, structure variable or expression.
   PrintEnum<ENUM_TIMEFRAMES>();

   MqlDateTime dt;
   TimeToStruct(TimeCurrent(), dt);
   PrintStruct(dt);

   PrintExpr( AccountInfoInteger(ACCOUNT_LOGIN) );
   PrintExpr( _Point );
   PrintExpr( ((int)1 << 16) | 0xFFF );
  }


Sample output:

/*
 example output:

 ACCOUNT INFORMATION <<==============================
 AccountInfoInteger():
   ACCOUNT_LOGIN = 51986913
   ACCOUNT_TRADE_MODE = ACCOUNT_TRADE_MODE_DEMO(0)
   ACCOUNT_TRADE_ALLOWED = 1
   ACCOUNT_TRADE_EXPERT = 1
   ACCOUNT_LEVERAGE = 1000
   ACCOUNT_MARGIN_SO_MODE = ACCOUNT_STOPOUT_MODE_PERCENT(0)
   ACCOUNT_LIMIT_ORDERS = 200
   ACCOUNT_MARGIN_MODE = ACCOUNT_MARGIN_MODE_RETAIL_HEDGING(2)
   ACCOUNT_CURRENCY_DIGITS = 2
   ACCOUNT_FIFO_CLOSE = 0
   ACCOUNT_HEDGE_ALLOWED = 1
 AccountInfoDouble():
   ACCOUNT_BALANCE = 199.96
   ACCOUNT_CREDIT = 0.0
   ACCOUNT_PROFIT = -4.47
   ACCOUNT_EQUITY = 195.49
   ACCOUNT_MARGIN = 1.05
   ACCOUNT_MARGIN_FREE = 194.44
   ACCOUNT_MARGIN_LEVEL = 18618.09523809524
   ACCOUNT_MARGIN_SO_CALL = 100.0
   ACCOUNT_MARGIN_SO_SO = 0.0
   ACCOUNT_MARGIN_INITIAL = 0.0
   ACCOUNT_MARGIN_MAINTENANCE = 0.0
   ACCOUNT_ASSETS = 0.0
   ACCOUNT_LIABILITIES = 0.0
   ACCOUNT_COMMISSION_BLOCKED = 0.0
 AccountInfoString():
   ACCOUNT_NAME = Amr
   ACCOUNT_COMPANY = Raw Trading Ltd
   ACCOUNT_SERVER = ICMarketsSC-Demo
   ACCOUNT_CURRENCY = USD
 SymbolsTotal(true) = 2 [int]
 SymbolsTotal(false) = 2065 [int]
 PositionsTotal() = 1 [int]
 OrdersTotal() = 0 [int]
 HistoryDealsTotal() = 2 [int]
 HistoryOrdersTotal() = 1 [int]
 TERMINAL INFORMATION <<==============================
 TerminalInfoInteger():
   TERMINAL_BUILD = 4755
   TERMINAL_CONNECTED = 1
   TERMINAL_DLLS_ALLOWED = 0
   TERMINAL_TRADE_ALLOWED = 0
   TERMINAL_EMAIL_ENABLED = 0
   TERMINAL_FTP_ENABLED = 0
   TERMINAL_MAXBARS = 500000
   TERMINAL_CODEPAGE = 0
   TERMINAL_MEMORY_PHYSICAL = 32609
   TERMINAL_MEMORY_TOTAL = 65218
   TERMINAL_MEMORY_AVAILABLE = 64428
   TERMINAL_MEMORY_USED = 790
   TERMINAL_X64 = 1
   TERMINAL_OPENCL_SUPPORT = 65538
   TERMINAL_DISK_SPACE = 104699
   TERMINAL_CPU_CORES = 24
   TERMINAL_MQID = 0
   TERMINAL_COMMUNITY_ACCOUNT = 0
   TERMINAL_COMMUNITY_CONNECTION = 0
   TERMINAL_NOTIFICATIONS_ENABLED = 0
   TERMINAL_SCREEN_DPI = 96
   TERMINAL_PING_LAST = 213171
   TERMINAL_SCREEN_LEFT = 0
   TERMINAL_SCREEN_TOP = 0
   TERMINAL_SCREEN_WIDTH = 1920
   TERMINAL_SCREEN_HEIGHT = 1080
   TERMINAL_LEFT = 476
   TERMINAL_TOP = 74
   TERMINAL_RIGHT = 1793
   TERMINAL_BOTTOM = 876
   TERMINAL_VPS = 0
   TERMINAL_KEYSTATE_TAB = 0
   TERMINAL_KEYSTATE_ENTER = 0
   TERMINAL_KEYSTATE_SHIFT = 0
   TERMINAL_KEYSTATE_CONTROL = 0
   TERMINAL_KEYSTATE_MENU = 0
   TERMINAL_KEYSTATE_CAPSLOCK = 0
   TERMINAL_KEYSTATE_ESCAPE = 0
   TERMINAL_KEYSTATE_PAGEUP = 0
   TERMINAL_KEYSTATE_PAGEDOWN = 0
   TERMINAL_KEYSTATE_END = 0
   TERMINAL_KEYSTATE_HOME = 0
   TERMINAL_KEYSTATE_LEFT = 0
   TERMINAL_KEYSTATE_UP = 0
   TERMINAL_KEYSTATE_RIGHT = 0
   TERMINAL_KEYSTATE_DOWN = 0
   TERMINAL_KEYSTATE_INSERT = 0
   TERMINAL_KEYSTATE_DELETE = 0
   TERMINAL_KEYSTATE_NUMLOCK = 1
   TERMINAL_KEYSTATE_SCRLOCK = 0
 TerminalInfoDouble():
   TERMINAL_COMMUNITY_BALANCE = 0.0
   TERMINAL_RETRANSMISSION = 19.23797626483448
 TerminalInfoString():
   TERMINAL_COMPANY = Raw Trading Ltd
   TERMINAL_NAME = MetaTrader 5 IC Markets (SC)
   TERMINAL_PATH = C:\Program Files\MetaTrader 5 IC Markets (SC)
   TERMINAL_DATA_PATH = C:\Users\Amr\AppData\Roaming\MetaQuotes\Terminal\1640F6577B1C4EC659BF41EA9F6C38ED
   TERMINAL_COMMONDATA_PATH = C:\Users\Amr\AppData\Roaming\MetaQuotes\Terminal\Common
   TERMINAL_LANGUAGE = English
   TERMINAL_CPU_NAME = 13th Gen Intel Core i7-13700KF
   TERMINAL_OS_VERSION = Windows 11 build 22631
   TERMINAL_CPU_ARCHITECTURE = AVX2 + FMA3
 TIME ZONE INFORMATION <<==============================
 TimeTradeServer() = 2025.02.21 06:20:12 [datetime]
 TimeCurrent() = 2025.02.21 06:20:12 [datetime]
 TimeGMT() = 2025.02.21 04:20:12 [datetime]
 TimeLocal() = 2025.02.21 07:20:12 [datetime]
 TimeGMTOffset() = -10800 [int]
 TimeDaylightSavings() = 0 [int]
 OpenCL INFORMATION <<==============================
 CLGetInfoInteger(Param(cl_ctx)):
   CL_LAST_ERROR = 0
   CL_DEVICE_COUNT = 1
   CL_DEVICE_TYPE = CL_DEVICE_GPU(4)
   CL_DEVICE_VENDOR_ID = 4098
   CL_DEVICE_MAX_COMPUTE_UNITS = 16
   CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3
   CL_DEVICE_MAX_WORK_GROUP_SIZE = 256
   CL_DEVICE_MAX_WORK_ITEM_SIZES = -1
   CL_DEVICE_MAX_CLOCK_FREQUENCY = 1050
   CL_DEVICE_GLOBAL_MEM_SIZE = 3221225472
   CL_DEVICE_LOCAL_MEM_SIZE = 32768
   CL_DEVICE_DOUBLE_FP_CONFIG = 63
   CL_BUFFER_SIZE = 0
   CL_KERNEL_WORK_GROUP_SIZE = -1
   CL_KERNEL_LOCAL_MEM_SIZE = -1
   CL_KERNEL_PRIVATE_MEM_SIZE = -1
 CLGetInfoString(Param(cl_ctx)):
   CL_PLATFORM_PROFILE = FULL_PROFILE
   CL_PLATFORM_VERSION = OpenCL 2.1 AMD-APP (3075.13)
   CL_PLATFORM_NAME = AMD Accelerated Parallel Processing
   CL_PLATFORM_VENDOR = Advanced Micro Devices, Inc.
   CL_PLATFORM_EXTENSIONS = cl_khr_icd cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_amd_event_callback cl_amd_offline_devices
   CL_ERROR_DESCRIPTION = unknown OpenCL error 65536
   CL_DEVICE_NAME = Pitcairn
   CL_DEVICE_VENDOR = Advanced Micro Devices, Inc.
   CL_DRIVER_VERSION = 3075.13
   CL_DEVICE_PROFILE = FULL_PROFILE
   CL_DEVICE_VERSION = OpenCL 1.2 AMD-APP (3075.13)
   CL_DEVICE_EXTENSIONS = cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics .....
   CL_DEVICE_OPENCL_C_VERSION = OpenCL C 1.2
   CL_DEVICE_BUILT_IN_KERNELS =
 PROGRAM INFORMATION <<==============================
 Compiler Version: 4755 (__MQLBUILD__), X64 Regular (__CPU_ARCHITECTURE__)
 MQLInfoInteger():
   MQL_PROGRAM_TYPE = PROGRAM_SCRIPT(1)
   MQL_DLLS_ALLOWED = 0
   MQL_TRADE_ALLOWED = 0
   MQL_DEBUG = 0
   MQL_TESTER = 0
   MQL_OPTIMIZATION = 0
   MQL_VISUAL_MODE = 0
   MQL_LICENSE_TYPE = LICENSE_FREE(0)
   MQL_PROFILER = 0
   MQL_MEMORY_USED = 1
   MQL_FRAME_MODE = 0
   MQL_MEMORY_LIMIT = 8388608
   MQL_SIGNALS_ALLOWED = 0
   MQL_CODEPAGE = 0
   MQL_FORWARD = 0
   MQL_HANDLES_USED = 0
   MQL_STARTED_FROM_CONFIG = 0
   MQL_GLOBAL_COUNTER = 44
 MQLInfoString():
   MQL_PROGRAM_NAME = PrintXYZ_demo
   MQL_PROGRAM_PATH = C:\Users\Amr\AppData\Roaming\MetaQuotes\Terminal\1640F6577B1C4EC659BF41EA9F6C38ED\MQL5\Scripts\PrintXYZ\PrintXYZ_demo.ex5
 CHART INFORMATION <<==============================
 Chart(EURUSD,H1)
 ChartGetInteger(Param(chart_id)):
   CHART_MODE = CHART_CANDLES(1)
   CHART_FOREGROUND = 0
   CHART_SHIFT = 1
   CHART_AUTOSCROLL = 1
   CHART_SCALE = 4
   CHART_SCALEFIX = 0
   CHART_SCALEFIX_11 = 0
   CHART_SCALE_PT_PER_BAR = 0
   CHART_SHOW_OHLC = 0
   CHART_SHOW_BID_LINE = 1
   CHART_SHOW_ASK_LINE = 0
   CHART_SHOW_LAST_LINE = 0
   CHART_SHOW_PERIOD_SEP = 0
   CHART_SHOW_GRID = 0
   CHART_SHOW_VOLUMES = CHART_VOLUME_TICK(1)
   CHART_SHOW_OBJECT_DESCR = 0
   CHART_COLOR_BACKGROUND = clrBlack
   CHART_COLOR_FOREGROUND = clrWhite
   CHART_COLOR_GRID = clrLightSlateGray
   CHART_COLOR_VOLUME = clrLimeGreen
   CHART_COLOR_CHART_UP = clrLime
   CHART_COLOR_CHART_DOWN = clrLime
   CHART_COLOR_CHART_LINE = clrLime
   CHART_COLOR_CANDLE_BULL = clrBlack
   CHART_COLOR_CANDLE_BEAR = clrWhite
   CHART_COLOR_BID = clrLightSlateGray
   CHART_COLOR_ASK = clrRed
   CHART_COLOR_LAST = 0,192,0
   CHART_COLOR_STOP_LEVEL = clrRed
   CHART_SHOW_TRADE_LEVELS = 1
   CHART_BRING_TO_TOP = 1
   CHART_SHOW_DATE_SCALE = 1
   CHART_SHOW_PRICE_SCALE = 1
   CHART_EVENT_OBJECT_CREATE = 0
   CHART_EVENT_OBJECT_DELETE = 0
   CHART_EVENT_MOUSE_MOVE = 1
   CHART_MOUSE_SCROLL = 1
   CHART_DRAG_TRADE_LEVELS = 1
   CHART_SHOW_ONE_CLICK = 1
   CHART_QUICK_NAVIGATION = 1
   CHART_SHOW = 1
   CHART_KEYBOARD_CONTROL = 1
   CHART_EVENT_MOUSE_WHEEL = 0
   CHART_CROSSHAIR_TOOL = 1
   CHART_CONTEXT_MENU = 1
   CHART_IS_DOCKED = 1
   CHART_FLOAT_LEFT = 0
   CHART_FLOAT_TOP = 0
   CHART_FLOAT_RIGHT = 0
   CHART_FLOAT_BOTTOM = 0
   CHART_SHOW_TRADE_HISTORY = 1
   CHART_VISIBLE_BARS = 76
   CHART_WINDOWS_TOTAL = 1
   CHART_WINDOW_IS_VISIBLE = 1
   CHART_WINDOW_HANDLE = 264304
   CHART_FIRST_VISIBLE_BAR = 75
   CHART_WIDTH_IN_BARS = 95
   CHART_WIDTH_IN_PIXELS = 1506
   CHART_HEIGHT_IN_PIXELS = 431
   CHART_WINDOW_YDISTANCE = 0
   CHART_IS_OBJECT = 0
   CHART_IS_OFFLINE = 0
   CHART_IS_MAXIMIZED = 1
   CHART_IS_MINIMIZED = 0
   CHART_SHOW_TICKER = 1
 ChartGetDouble(Param(chart_id)):
   CHART_SHIFT_SIZE = 20.371599203715988
   CHART_FIXED_MAX = 1.051
   CHART_FIXED_MIN = 1.0387
   CHART_POINTS_PER_BAR = 1.0
   CHART_FIXED_POSITION = 0.0
   CHART_PRICE_MIN = 1.0387
   CHART_PRICE_MAX = 1.051
 ChartGetString(Param(chart_id)):
   CHART_COMMENT =
   CHART_EXPERT_NAME =
   CHART_SCRIPT_NAME = PrintXYZ_demo
 ChartIndicatorName(0,0) = "iForexSessions"
 ChartIndicatorName(0,1) = "MA(10)"
 OBJECT INFORMATION <<==============================
 ObjectGetInteger(Params(chart_id,objname)):
   OBJPROP_COLOR = clrRed
   OBJPROP_STYLE = STYLE_SOLID(0)
   OBJPROP_WIDTH = 1
   OBJPROP_BACK = 0
   OBJPROP_SELECTED = 0
   OBJPROP_TYPE = OBJ_HLINE(1)
   OBJPROP_TIME = 1970.01.01 00:00:00
   OBJPROP_SELECTABLE = 1
   OBJPROP_CREATETIME = 1970.01.01 00:00:00
   OBJPROP_TIMEFRAMES = OBJ_ALL_PERIODS(2097151)
   OBJPROP_LEVELS = 0
   OBJPROP_LEVELCOLOR = clrBlack
   OBJPROP_LEVELSTYLE = STYLE_SOLID(0)
   OBJPROP_LEVELWIDTH = 0
   OBJPROP_ZORDER = 0
   OBJPROP_HIDDEN = 0
   OBJPROP_FONTSIZE = 0
   OBJPROP_RAY_LEFT = 0
   OBJPROP_RAY_RIGHT = 0
   OBJPROP_ELLIPSE = 0
   OBJPROP_ARROWCODE = 0
   OBJPROP_ANCHOR = 0
   OBJPROP_XDISTANCE = 0
   OBJPROP_YDISTANCE = 0
   OBJPROP_DIRECTION = GANN_UP_TREND(0)
   OBJPROP_DEGREE = ELLIOTT_GRAND_SUPERCYCLE(0)
   OBJPROP_DRAWLINES = 0
   OBJPROP_STATE = 0
   OBJPROP_XSIZE = 0
   OBJPROP_YSIZE = 0
   OBJPROP_PERIOD = PERIOD_CURRENT(0)
   OBJPROP_DATE_SCALE = 0
   OBJPROP_PRICE_SCALE = 0
   OBJPROP_BGCOLOR = clrBlack
   OBJPROP_CORNER = CORNER_LEFT_UPPER(0)
   OBJPROP_CHART_SCALE = 0
   OBJPROP_READONLY = 0
   OBJPROP_BORDER_TYPE = BORDER_FLAT(0)
   OBJPROP_CHART_ID = 0
   OBJPROP_FILL = 0
   OBJPROP_RAY = 0
   OBJPROP_XOFFSET = 0
   OBJPROP_YOFFSET = 0
   OBJPROP_BORDER_COLOR = clrBlack
   OBJPROP_ALIGN = ALIGN_RIGHT(0)
 ObjectGetDouble(Params(chart_id,objname)):
   OBJPROP_PRICE = 1.04291
   OBJPROP_LEVELVALUE = 0.0
   OBJPROP_SCALE = 0.0
   OBJPROP_ANGLE = 0.0
   OBJPROP_DEVIATION = 0.0
 ObjectGetString(Params(chart_id,objname)):
   OBJPROP_NAME = Horizontal Line 54478
   OBJPROP_TEXT =
   OBJPROP_LEVELTEXT =
   OBJPROP_TOOLTIP =
   OBJPROP_FONT =
   OBJPROP_BMPFILE =
   OBJPROP_SYMBOL =
 SYMBOL INFORMATION <<==============================
 EURUSD, Euro vs US Dollar
 SymbolInfoInteger(Param(symbol)):
   SYMBOL_SELECT = 1
   SYMBOL_VOLUME = 0
   SYMBOL_VOLUMEHIGH = 0
   SYMBOL_VOLUMELOW = 0
   SYMBOL_TIME = 2025.02.21 06:20:12
   SYMBOL_DIGITS = 5
   SYMBOL_SPREAD = 0
   SYMBOL_TICKS_BOOKDEPTH = 10
   SYMBOL_TRADE_CALC_MODE = SYMBOL_CALC_MODE_FOREX(0)
   SYMBOL_TRADE_MODE = SYMBOL_TRADE_MODE_FULL(4)
   SYMBOL_TRADE_STOPS_LEVEL = 0
   SYMBOL_TRADE_FREEZE_LEVEL = 0
   SYMBOL_TRADE_EXEMODE = SYMBOL_TRADE_EXECUTION_MARKET(2)
   SYMBOL_SWAP_MODE = SYMBOL_SWAP_MODE_POINTS(1)
   SYMBOL_SWAP_ROLLOVER3DAYS = WEDNESDAY(3)
   SYMBOL_SPREAD_FLOAT = 1
   SYMBOL_EXPIRATION_MODE = SYMBOL_EXPIRATION_ALL(15)
   SYMBOL_FILLING_MODE = SYMBOL_FILLING_IOC(2)
   SYMBOL_START_TIME = 1970.01.01 00:00:00
   SYMBOL_EXPIRATION_TIME = 1970.01.01 00:00:00
   SYMBOL_SESSION_DEALS = 0
   SYMBOL_SESSION_BUY_ORDERS = 0
   SYMBOL_SESSION_SELL_ORDERS = 0
   SYMBOL_ORDER_MODE = SYMBOL_ALL_ORDERS(127)
   SYMBOL_OPTION_RIGHT = SYMBOL_OPTION_RIGHT_CALL(0)
   SYMBOL_OPTION_MODE = SYMBOL_OPTION_MODE_EUROPEAN(0)
   SYMBOL_VISIBLE = 1
   SYMBOL_CUSTOM = 0
   SYMBOL_BACKGROUND_COLOR = 255,255,81
   SYMBOL_CHART_MODE = SYMBOL_CHART_MODE_BID(0)
   SYMBOL_ORDER_GTC_MODE = SYMBOL_ORDERS_GTC(0)
   SYMBOL_MARGIN_HEDGED_USE_LEG = 0
   SYMBOL_EXIST = 1
   SYMBOL_TIME_MSC = 2025.02.21 06:20:12.842
   SYMBOL_SECTOR = SECTOR_CURRENCY(12)
   SYMBOL_INDUSTRY = INDUSTRY_UNDEFINED(0)
   SYMBOL_SUBSCRIPTION_DELAY = 0
 SymbolInfoDouble(Param(symbol)):
   SYMBOL_BID = 1.05038
   SYMBOL_BIDHIGH = 1.05057
   SYMBOL_BIDLOW = 1.04844
   SYMBOL_ASK = 1.05038
   SYMBOL_ASKHIGH = 1.05058
   SYMBOL_ASKLOW = 1.04844
   SYMBOL_LAST = 0.0
   SYMBOL_LASTHIGH = 0.0
   SYMBOL_LASTLOW = 0.0
   SYMBOL_VOLUME_REAL = 0.0
   SYMBOL_VOLUMEHIGH_REAL = 0.0
   SYMBOL_VOLUMELOW_REAL = 0.0
   SYMBOL_POINT = 0.00001
   SYMBOL_TRADE_TICK_VALUE = 1.0
   SYMBOL_TRADE_TICK_SIZE = 0.00001
   SYMBOL_TRADE_CONTRACT_SIZE = 100000.0
   SYMBOL_VOLUME_MIN = 0.01
   SYMBOL_VOLUME_MAX = 200.0
   SYMBOL_VOLUME_STEP = 0.01
   SYMBOL_SWAP_LONG = -6.25
   SYMBOL_SWAP_SHORT = 2.56
   SYMBOL_MARGIN_INITIAL = 100000.0
   SYMBOL_MARGIN_MAINTENANCE = 0.0
   SYMBOL_MARGIN_LONG = 0.0
   SYMBOL_MARGIN_SHORT = 0.0
   SYMBOL_MARGIN_LIMIT = 0.0
   SYMBOL_MARGIN_STOP = 0.0
   SYMBOL_MARGIN_STOPLIMIT = 0.0
   SYMBOL_TRADE_TICK_VALUE_PROFIT = 1.0
   SYMBOL_TRADE_TICK_VALUE_LOSS = 1.0
   SYMBOL_VOLUME_LIMIT = 0.0
   SYMBOL_SESSION_VOLUME = 0.0
   SYMBOL_SESSION_TURNOVER = 0.0
   SYMBOL_SESSION_INTEREST = 0.0
   SYMBOL_SESSION_BUY_ORDERS_VOLUME = 0.0
   SYMBOL_SESSION_SELL_ORDERS_VOLUME = 0.0
   SYMBOL_SESSION_OPEN = 1.05008
   SYMBOL_SESSION_CLOSE = 1.05012
   SYMBOL_SESSION_AW = 0.0
   SYMBOL_SESSION_PRICE_SETTLEMENT = 0.0
   SYMBOL_SESSION_PRICE_LIMIT_MIN = 0.0
   SYMBOL_SESSION_PRICE_LIMIT_MAX = 0.0
   SYMBOL_OPTION_STRIKE = 0.0
   SYMBOL_MARGIN_HEDGED = 0.0
   SYMBOL_TRADE_LIQUIDITY_RATE = 0.0
   SYMBOL_TRADE_FACE_VALUE = 0.0
   SYMBOL_TRADE_ACCRUED_INTEREST = 0.0
   SYMBOL_PRICE_CHANGE = 0.0248
   SYMBOL_PRICE_VOLATILITY = 0.0
   SYMBOL_PRICE_THEORETICAL = 0.0
   SYMBOL_PRICE_DELTA = 0.0
   SYMBOL_PRICE_THETA = 0.0
   SYMBOL_PRICE_GAMMA = 0.0
   SYMBOL_PRICE_VEGA = 0.0
   SYMBOL_PRICE_RHO = 0.0
   SYMBOL_PRICE_OMEGA = 0.0
   SYMBOL_PRICE_SENSITIVITY = 0.0
   SYMBOL_SWAP_SUNDAY = 0.0
   SYMBOL_SWAP_MONDAY = 1.0
   SYMBOL_SWAP_TUESDAY = 1.0
   SYMBOL_SWAP_WEDNESDAY = 3.0
   SYMBOL_SWAP_THURSDAY = 1.0
   SYMBOL_SWAP_FRIDAY = 1.0
   SYMBOL_SWAP_SATURDAY = 0.0
 SymbolInfoString(Param(symbol)):
   SYMBOL_BANK =
   SYMBOL_DESCRIPTION = Euro vs US Dollar
   SYMBOL_PATH = Forex\Majors\EURUSD
   SYMBOL_CURRENCY_BASE = EUR
   SYMBOL_CURRENCY_PROFIT = USD
   SYMBOL_CURRENCY_MARGIN = EUR
   SYMBOL_ISIN =
   SYMBOL_BASIS =
   SYMBOL_PAGE =
   SYMBOL_FORMULA =
   SYMBOL_CATEGORY =
   SYMBOL_EXCHANGE =
   SYMBOL_COUNTRY =
   SYMBOL_SECTOR_NAME = Currency
   SYMBOL_INDUSTRY_NAME = Undefined
 SymbolInfoSessionTrade(): symbol trading sessions
     SUNDAY:
     MONDAY: 00:01-23:59
    TUESDAY: 00:01-23:59
  WEDNESDAY: 00:01-23:59
   THURSDAY: 00:01-23:59
     FRIDAY: 00:01-23:57
   SATURDAY:
 OrderCalcMargin(Buy, 1.0 Lot) = 105.04 USD
 SymbolIsSynchronized(symbol) = true [bool]
 SERIES INFORMATION <<==============================
 SeriesInfoInteger(Params(symbol,timeframe)):
   SERIES_BARS_COUNT = 169451
   SERIES_FIRSTDATE = 1971.01.04 00:00:00
   SERIES_SERVER_FIRSTDATE = 1971.01.04 00:00:00
   SERIES_TERMINAL_FIRSTDATE = 1971.01.04 00:00:00
   SERIES_SYNCHRONIZED = 1
   SERIES_LASTBAR_DATE = 2025.02.21 06:00:00
 POSITION INFORMATION <<==============================
 PositionGetInteger():
   POSITION_TIME = 2025.02.14 06:54:15
   POSITION_TYPE = POSITION_TYPE_SELL(1)
   POSITION_MAGIC = 0
   POSITION_IDENTIFIER = 925571424
   POSITION_TIME_MSC = 2025.02.14 06:54:15.641
   POSITION_TIME_UPDATE = 2025.02.14 06:54:15
   POSITION_TIME_UPDATE_MSC = 2025.02.14 06:54:15.641
   POSITION_TICKET = 925571424
   POSITION_REASON = POSITION_REASON_CLIENT(0)
 PositionGetDouble():
   POSITION_VOLUME = 0.01
   POSITION_PRICE_OPEN = 1.04571
   POSITION_PRICE_CURRENT = 1.05038
   POSITION_SL = 0.0
   POSITION_TP = 0.0
   POSITION_SWAP = 0.2
   POSITION_PROFIT = -4.67
 PositionGetString():
   POSITION_SYMBOL = EURUSD
   POSITION_COMMENT =
   POSITION_EXTERNAL_ID =
 DEAL INFORMATION <<==============================
 HistoryDealGetInteger(Param(deal_ticket)):
   DEAL_ORDER = 0
   DEAL_TIME = 2024.10.06 23:42:08
   DEAL_TYPE = DEAL_TYPE_BALANCE(2)
   DEAL_ENTRY = DEAL_ENTRY_IN(0)
   DEAL_MAGIC = 0
   DEAL_POSITION_ID = 0
   DEAL_TIME_MSC = 2024.10.06 23:42:08.966
   DEAL_TICKET = 609261076
   DEAL_REASON = DEAL_REASON_CLIENT(0)
 HistoryDealGetDouble(Param(deal_ticket)):
   DEAL_VOLUME = 0.0
   DEAL_PRICE = 0.0
   DEAL_COMMISSION = 0.0
   DEAL_SWAP = 0.0
   DEAL_PROFIT = 200.0
   DEAL_FEE = 0.0
   DEAL_SL = 0.0
   DEAL_TP = 0.0
 HistoryDealGetString(Param(deal_ticket)):
   DEAL_SYMBOL =
   DEAL_COMMENT = Demo deposit
   DEAL_EXTERNAL_ID =
 HISTORY ORDER INFORMATION <<==============================
 HistoryOrderGetInteger(Param(order_ticket)):
   ORDER_TIME_SETUP = 2025.02.14 06:54:15
   ORDER_TIME_EXPIRATION = 1970.01.01 00:00:00
   ORDER_TIME_DONE = 2025.02.14 06:54:15
   ORDER_TYPE = ORDER_TYPE_SELL(1)
   ORDER_TYPE_FILLING = ORDER_FILLING_IOC(1)
   ORDER_TYPE_TIME = ORDER_TIME_GTC(0)
   ORDER_STATE = ORDER_STATE_FILLED(4)
   ORDER_MAGIC = 0
   ORDER_POSITION_ID = 925571424
   ORDER_TIME_SETUP_MSC = 2025.02.14 06:54:15.389
   ORDER_TIME_DONE_MSC = 2025.02.14 06:54:15.641
   ORDER_POSITION_BY_ID = 0
   ORDER_TICKET = 925571424
   ORDER_REASON = ORDER_REASON_CLIENT(0)
 HistoryOrderGetDouble(Param(order_ticket)):
   ORDER_VOLUME_INITIAL = 0.01
   ORDER_VOLUME_CURRENT = 0.0
   ORDER_PRICE_OPEN = 0.0
   ORDER_PRICE_CURRENT = 1.04571
   ORDER_PRICE_STOPLIMIT = 0.0
   ORDER_SL = 0.0
   ORDER_TP = 0.0
 HistoryOrderGetString(Param(order_ticket)):
   ORDER_SYMBOL = EURUSD
   ORDER_COMMENT =
   ORDER_EXTERNAL_ID =
 enum ENUM_TIMEFRAMES
   {
    PERIOD_CURRENT = 0,
    PERIOD_M1 = 1,
    PERIOD_M2 = 2,
    PERIOD_M3 = 3,
    PERIOD_M4 = 4,
    PERIOD_M5 = 5,
    PERIOD_M6 = 6,
    PERIOD_M10 = 10,
    PERIOD_M12 = 12,
    PERIOD_M15 = 15,
    PERIOD_M20 = 20,
    PERIOD_M30 = 30,
    PERIOD_H1 = 16385,
    PERIOD_H2 = 16386,
    PERIOD_H3 = 16387,
    PERIOD_H4 = 16388,
    PERIOD_H6 = 16390,
    PERIOD_H8 = 16392,
    PERIOD_H12 = 16396,
    PERIOD_D1 = 16408,
    PERIOD_W1 = 32769,
    PERIOD_MN1 = 49153,
   };
     [year] [mon] [day] [hour] [min] [sec] [day_of_week] [day_of_year]
 [0]   2025     2    21      6    20    12             5            51
 AccountInfoInteger(ACCOUNT_LOGIN) = 51986913 [long]
 _Point = 0.00001 [double]
 ((int)1 << 16) | 0xFFF = 69631 [uint]

*/

Updates:

2025.02.15 - v.1.20 : Initial release.

2025.02.17 - v.1.30 : Added function PrintTesterStatistics(). Output more information from the existing functions.

2025.02.20 - v.1.40 : Added function PrintOpenCL() - Prints the OpenCL device properties to the Experts tab.

2025.02.21 - v.1.50 : Added function-like macro PrintExpr() - Prints a stringified expression along with its value and type.



A 3 line script that tells you how many bars are on your chart A 3 line script that tells you how many bars are on your chart

A script which when dragged onto the chart will print out in the experts window the number of bars that are on that chart - like magic.

Intrabar Volume Flow Intrabar Volume Flow

An indicator which visualizes how volume changes over time within each bar. It shows tick volume in a rolling histogram format.

Collect Data (Date, Time and Close Price) Collect Data (Date, Time and Close Price)

A simple starting-point script to collect data and send to a CSV in oldest-newest ordering. In this example only the close price data is collected.

Self Optimized SMA Self Optimized SMA

The indicator plots two lines. The lower line is calculated based on the latest SMA period that caused a bounce up. The upper line is calculated based on the latest SMA period that caused a bounce down.