//+------------------------------------------------------------------+ //| Math_3D.mq5 | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #include "Functions.mqh" #property optimization_chart_mode "3d,InpX,InpY" //--- input parameters sinput EnFunctionType InpFunction=Chomolungma; input double InpX =0.0; input double InpY =0.0; //--- a pointer to the mathematical function MathFunction ExtFunction; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- this EA is designed for optimization if(!MQLInfoInteger(MQL_OPTIMIZATION)) { MessageBox("This EA is designed for 3D visualization of optimization results\r\n\r\nRun this EA in the Strategy Tester using the Math Calculations mode!", "EA warning", 0x00000030); return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| TesterInit function | //+------------------------------------------------------------------+ int OnTesterInit() { //--- get a pointer to a mathematical function by its type ExtFunction=GetMathFunction(InpFunction); Print(__FUNCTION__, ": ExtFunction=", ExtFunction); //--- variables to get values during optimization double x_cur, x_start, x_stop, x_step; double y_cur, y_start, y_stop, y_step; bool x_enable, y_enable; //--- get parameter values ParameterGetRange("InpX", x_enable, x_cur, x_start, x_step, x_stop); ParameterGetRange("InpY", y_enable, y_cur, y_start, y_step, y_stop); PrintFormat("x=%G start=%G step=%G stop=%G", x_cur, x_start, x_step, x_stop); PrintFormat("y=%G start=%G step=%G stop=%G", y_cur, y_start, y_step, y_stop); PrintFormat("Function=%s", EnumToString(InpFunction)); //--- check if parameters are selected if(!x_enable || !y_enable) { Print("Select both parameters InpX and InpY for optimization! Optimization stopped"); return (INIT_PARAMETERS_INCORRECT); } //--- check input parameters if(x_step==0 || y_step==0) { Print("Specify non-zero value for x_step and y_step! Optimization stopped"); return (INIT_PARAMETERS_INCORRECT); } //--- return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- get a pointer to a mathematical function by its type ExtFunction=GetMathFunction(InpFunction); //--- calculate function result double value=ExtFunction(InpX, InpY); return(value); } //+------------------------------------------------------------------+ //| TesterDeinit function | //+------------------------------------------------------------------+ void OnTesterDeinit() { //--- } //+------------------------------------------------------------------+