Discussion of article "Graphical Interfaces X: Sorting, rebuilding the table and controls in the cells (build 11)"

 

New article Graphical Interfaces X: Sorting, rebuilding the table and controls in the cells (build 11) has been published:

We continue to add new features to the rendered table: data sorting, managing the number of columns and rows, setting the table cell types to place controls into them.

In the end, everything works like this:

 Fig. 3. Demonstration of interaction with controls in the table cells.

Fig. 3. Demonstration of interaction with controls in the table cells.

Author: Anatoli Kazharski

 

Hi,

your table project is really interesting and an example of good OOP coding.

May I ask whether you will be willing to think about an - I hope for other too - a very helpful add-on for complicated multi-symbol EAs?

Imagine an EA that trades many symbols with a lot of indicators with - for each symbol - an individual indicator setup of parameters (simple e.g.):

input string Sym1 = "EURUSD";

input int     Sym1MACDema1 = 12;

input int     Sym1MACDema2 = 26;

input int     Sym1MACDsma3 = 9

input ENUM_APPLIED_PRICE Sym1MACDprc =PRICE_CLOSE;

input string Sym2 = "GBPUSD";

input int     Sym2MACDema1 = 11;

input int     Sym2MACDema2 = 25;

input int     Sym2MACDsma3 = 10

input ENUM_APPLIED_PRICE  Sym2MACDprc =PRICE_CLOSE;

...

This would be a lot easier to handle for the user if this setup is presented as a table instead of a long list of parameters.

Especially if you enable your app to manage the StartegyTester by that csv-file. I think one has to manage the EA in the StrategyTester by the csv-file in the OnInit()-function.

For this one could add what the StratTester offers: defining a range. from, to, step.

But there the problem could be that in case of the Genetic Algorithm if OnInit() returns INIT_PARAMETERS_INCORRECT or INIT_FAILED the genetic algorithm counts this as a valid pass which will reduce the amount of really passed test runs and that reduces the validity if the final outcome.

I realized this problem with mt4 and I wrote this to the Service Desk - but I have no idea whether they have solved this or not.


Anyway good work - keep on :)




 
Carl Schreiber:

...

Thanks for the feedback and suggestion! I'll think about how this can be realized.
 

Hello, How can I programmatically move the main form or dialog to a specific location.

For example I would like to move the dialog to the left upper corner when the form title is clicked.

 

Hi!

This is a great library!

Do you still support MT4?

Having both MT4 and MT5 support would be a great way to be able to have a smooth transition from MT4 to MT5 when it is time for that.

 

Hello,


i downloaded the library in this article, i was modifying thing to learn the library.  I have a simple question.


If i don't create menus, like in the code i modified below, i can't sort the table and single click on checkbox, why is this happening? @Anatoli Kazharski


//+------------------------------------------------------------------+
//| Creates a trading panel                                          |
//+------------------------------------------------------------------+
bool CProgram::CreateExpertPanel(void)
  {
//--- Creating form 1 for controls
   if(!CreateWindow1("EXPERT PANEL"))
      return(false);
/*/--- Creating controls:
//    Main menu
   if(!CreateMenuBar(1,20))
      return(false);
//--- Context menus
   if(!CreateMBContextMenu1())
      return(false);
   if(!CreateMBContextMenu2())
      return(false);
   if(!CreateMBContextMenu3())
      return(false);
   if(!CreateMBContextMenu4())
      return(false);*/
//--- Creating the status bar
   if(!CreateStatusBar(1,25))
      return(false);
//--- Buttons
   if(!CreateSimpleButton1(7,50,"ADD COLUMN"))
      return(false);
   if(!CreateSimpleButton2(7,75,"DELETE COLUMN"))
      return(false);
   if(!CreateSimpleButton3(180,50,"ADD ROW"))
      return(false);
   if(!CreateSimpleButton4(180,75,"DELETE ROW"))
      return(false);
   if(!CreateSimpleButton5(353,50,"REBUILD TABLE"))
      return(false);
   if(!CreateSimpleButton6(353,75,"CLEAR TABLE"))
      return(false);
//--- Edits
   if(!CreateSpinEdit1(114,52,":"))
      return(false);
   if(!CreateSpinEdit2(114,77,":"))
      return(false);
   if(!CreateSpinEdit3(287,52,":"))
      return(false);
   if(!CreateSpinEdit4(287,77,":"))
      return(false);
//--- Create rendered table
   if(!CreateCanvasTable(1,103)) // 103 | 42
      return(false);
//--- Redrawing of the chart
   m_chart.Redraw();
   return(true);
  }
Reason: