MT version archive.

 

Dear friends, I propose to create here an archive of MT versions. Sometimes with updates unexpected errors can occur and you have to roll back to a previous version...

I need build 2007 now. Do you have it? Share it please.

 
Сергей Таболин:

Dear friends, I propose to create here an archive of MT versions. Sometimes with updates unexpected errors can occur and you have to roll back to a previous version...

I need build 2007 now. Do you have it? Share it, please.

There's a man here who collects a collection. But as far as I remember, his posts with links to MT version archives are sometimes deleted so that progress isn't slowed down. ))

 


my link was killed here,

the developers suggest downloading only from verified sources

if you want to risk my build, just drop me a line.

you should keep working stabile in the portal or archive and consciously upgrade to the test builds

you should be very conscious of updating to the latest builds.

 
Fast235:

my link was killed here,

the developers suggest downloading only from verified sources

if you want to risk my build, just drop me a line.

you should keep working stabile in the portal or archive and consciously upgrade to the test builds

you should keep working stabile in the portable or archive and in general be aware of updates to test builds

They are right to remove old versions.

You have to write normal programs. Do not ignore warnings. Initialize variables and don't use global ones as much as possible. Avoid potentially dangerous fragments in code.

I have tens of thousands of lines of code - not a single warning in strict-mode. Half of my code base projects have warnings even without strict, although they don't even contain thousands of lines. And then you start complaining that "it all worked in the old build and stopped working in the new one"...

 
Georgiy Merts:

They are right to remove old versions.

You need to write programs properly. Do not ignore warnings. Initialize variables and do not use global ones as much as possible. Avoid potentially unsafe fragments in code.

I have not a single warningin tens of thousands of code lines in strict-mode. Half of my code base projects report warnings even without strict, although they don't contain even a thousand strings. And then you start complaining that "it all worked in the old build and stopped working in the new one"...

Is this the Mars Rover program? What can you describe in so many lines???

 
Sergey Basov:

There is a person here who is building a collection. But as far as I remember his posts with links to MT-version archives are sometimes deleted so that progress is not slowed down. ))

Thank you. Downloaded it.

Fast235:

the link killed my link here,

The developers suggest downloading only from verified sources.

If you want to risk my build, just drop me a line.

you should keep working stabile in the portal or archive and consciously upgrade to the test builds

I'm in DC now with 2007 build maybe.

I am not updating on test builds. But now I will save))).

Georgiy Merts:

They are right to remove old versions.

You have to write programs properly. Do not ignore warnings. Initialize variables and don't use global ones as much as possible. Avoid potentially unsafe fragments in code.

I have tens of thousands of lines of code and no warnings at all in strict-mode. Half of my code base dummies show warnings even without strict, although they don't contain even a thousand strings. And then you start complaining that "it all worked in the old build and stopped working in the new one"...

George, read my last post in the thread. I have found the source of the problem. It's not in my code.

 
Сергей Таболин:

Thank you. Downloaded.

I don't update to test ones. But now I will save))).

George, read my last post in the thread. I found the source of the problem. It's not in my code.

I read it.

The source of the problem is that the developers and you approached the situation slightly differently. That's why I insist that the code must always be very simple and clear, except for any places where there may be ambiguities.

I remember, back in the days when MT5 was just breaking its way - I was amazed, people used variables without initialization, thinking that they would contain zero.

One can't help recalling a joke:

Pinocchio gave Pinocchio three apples. He ate two. How many apples are left?

Programmer N1:
- You don't know how many. Nobody knows how many apples he had before!

Moral: clear the initial variables.


Programmer N2
- It's not clear how many. Maybe while Malvina was giving away the apples, Pierrot was also eating them ?

Moral: do not use global variables.

Programmer N3
- Unknown how many. It doesn't say that Pinocchio ate exactly apples, it says that he ate two, but it's not clear what he ate. Besides, given that the name "Pinocchio" is not declined - Pinocchio and Pinocchio are different variables.


Moral: Watch your syntax

 
Сергей Таболин:

Thank you. Downloaded.

I don't update to test ones. But now I will save))).

George, read my last post in the thread. I found the source of the problem. It is not in my code.

And the source of the problem was "didn't read the documentation", not the new build. So you're being sly by saying it's not your code.

1:

Forum on trading, automated trading systems and testing trading strategies

So what do you want to do next?

Sergey Tabolin, 2019.06.16 00:17

I found the reason for this outrage.

The thing is this:

//--- пропустить бесполезные проходы оптимизации
//*
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(period_HMA7C == 0 && move_profit)                                                            TesterStop();
      if(period_HMA7C == 0 && move_stop)                                                              TesterStop();
      if(period_HMA7C == 0 && shift_correction_HMA7C != 5)                                            TesterStop();
      if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0)                              TesterStop();
      if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0)                              TesterStop();
      if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))  TesterStop();
      check_init = true;
   }
//*/

It turns out that after TesterStop(), OnTester() is also launched in the new release, although it shouldn't be launched.

Naturally, no data are being prepared and that's what we get.

It is the fault of MT 2085.

2:

Forum on trading, automated trading systems and testing of trading strategies

What should I do next?

Sergey Tabolin, 2019.06.16 09:02

Apologies. The description just says that OnTester() is called afterwards. (((

I have to do checks there as well. I will try to replace it with ExpertRemove()...

And then I will "try" it again. And then, if your attempts are unsuccessful, then it's MQ's fault again ?

I can't remember, but I think there is a special function for skipping "bad" passes. And just what you want to try, the developers didn't recommend using - again - if my memory serves me correctly.

But what is important in my message - before shifting the blame on the developers, you must first read the documentation, ask for a solution on the forum, and only then, and only if the error is really found, write a bug report with a minimal code reproducing it. That would be serious, but otherwise...

 
Artyom Trishkin:

And the source of the problem was "didn't read the documentation", not the new build. So you're lying about the code not being yours.

1:

2:

And then you go on to "try it" again... And then if your tries are unsuccessful, then it's MQ's fault again ?

I can't remember, but I think there's a special function for skipping "bad" passes. And just what you want to try, the developers didn't recommend using - again - if my memory serves me correctly.

But what is important in my message - before you shove the blame on the developers, you should first read the documentation, ask for a solution on the forum, and only then, and only in the case of a really found bug - write a bug report with reproducing it with minimal code. That would be serious, but otherwise...

Artyom, the problem is in the new build!

Tell me, here you have written code that works without errors. It works for a long time. And suddenly, after new MT release it collapses with a bunch of errors. Whose fault is that? All the more considering that documentation, as many people know, doesn't always keep up with innovations.

So, my code worked without errors.

I used this:

Forum on trading, automated trading systems and strategy testing

What to replace INIT_PARAMETERS_INCORRECT with ? Found solution )))

Sergey Tabolin, 2019.04.24 08:48

Found the answer to my own question in the thread:

It turned out to be quite simple. It is enough to move check for invalid parameters from OnInit() to OnTick()

bool                 check_init              = false;                // флаг проверки входных параметров
..........
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(period_HMA7C == 0 && move_profit)                                 ExpertRemove();
      if(period_HMA7C == 0 && move_stop)                                   ExpertRemove();
      if(period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();
      check_init = true;
   }
//*/ 
//+------------------------------------------------------------------+ 

Checked! It works. Genetics does not fail ))))

Now, after appearing problems, I've added a couple more lines:

bool                 check_init              = false;                // флаг проверки входных параметров
bool                 tester_stop             = true;                 // флаг проверки выхода по TesterStop
.............
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(period_HMA7C == 0 && move_profit)                                                            TesterStop();
      if(period_HMA7C == 0 && move_stop)                                                              TesterStop();
      if(period_HMA7C == 0 && shift_correction_HMA7C != 5)                                            TesterStop();
      if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0)                              TesterStop();
      if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0)                              TesterStop();
      if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))
      {
         Print("Результат в OnTester() должен быть -99999999999.99");
         TesterStop();
      }
      check_init  = true;
      tester_stop = false;
   }
//*/
.........
}
Вызов TesterStop() считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester() 
с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.

It's supposed, by reasoning, that the transfer should be executed immediately, without executing the rest of the code. Right?

And in fact TesterStop() doesn't stop the test at all!

double OnTester()
{
   if(tester_stop) return(-99999999999.99);
   
   double   equity_dd_percent             = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);
   if(equity_dd_percent > 0.0)
   {
      equity_dd_percent = 100.0 / equity_dd_percent;
   }
   else     equity_dd_percent    = 1.0;
   
   double   param                         = 0.0;
   double   profit                        = TesterStatistics(STAT_PROFIT);
   double   stability                     = 0.0;
   int      balance_arr_size              = ArraySize(balance_arr) - 1;
   int      alpha_size                    = balance_arr_size - 1;
   int      beta_size                     = alpha_size - 1;
   double   trade2time                    = ratioTrades2Time(TesterStatistics(STAT_TRADES));
   double   max_balance                   = balance_arr[0];
//+-------------------   
   if(balance_arr[balance_arr_size-1] - balance_arr[0] == 0.0) return(-99999999999.88);
//+-------------------   

I entered an "invalid" parameter and got this result:

LL      0       11:30:20.816    Core 1  2016.10.01 00:00:00   Советник получил MAGIC = 153128312914612747.
QN      0       11:30:20.816    Core 1  2016.10.03 00:00:00   Результат в OnTester() должен быть -99999999999.99
NJ      3       11:30:20.816    Core 1  TesterStop() called on 0% of testing interval
CD      0       11:30:20.816    Core 1  final balance 10000.00 USD
QF      0       11:30:20.816    Core 1  OnTester result -99999999999.88

So this is a bug! And this is exactly MQ's bug.

I believe that TesterStop() andExpertRemove() should return true if they cannot immediately pass control to OnTester(). It will allow to react somehow, for example, like this:

bool                 tester_stop = false;                 // флаг проверки выхода по TesterStop
.......
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(недопустимый параметр)          tester_stop = TesterStop();
........
}
double OnTester()
{
   if(tester_stop) return(-99999999999.99);

In this case we can get exactly the result that is logically expected, instead of dancing around and foreseeing all the errors that could theoretically occur as a result of stopping the test.

 
Сергей Таболин:

Artyom, the problem is in the new build!

Tell me, here you have written code that works without errors. It works for a long time. And suddenly, after the new MT release it crashes with a bunch of errors. Whose fault is that? All the more considering that documentation, as many people know, doesn't always keep up with innovations.

So, my code worked without errors.

I used this one:

Now, after some problems, I've added a couple more lines:

The transfer is supposed, smartly, to be done immediately, without executing the rest of the code. Right?

And in fact TesterStop() doesn't stop the test at all!

I entered an "invalid" parameter and got this result:

So this is a bug! And this is exactly MQ's bug.

I believe that TesterStop() andExpertRemove() should return true if they cannot immediately pass control to OnTester(). In such a case, it will be possible to react somehow, e.g. like this:

In this case, it will be possible to get exactly the result that is logically expected, instead of dancing around and foreseeing all the errors that could theoretically occur as a result of stopping the test.

All your calculations and tests should not be shown to me, and not with a certain amount of sarcasm and irritation, but dryly and concisely in the"Errors, bugs, questions" thread. Unless, of course, you want to be heard and get an answer.

ZS. And preferably forget words like "bug", "fault", "dancing with tambourine" and other "shitcodes" in bug reports - all people, and you're not without mistakes. And the "psychotic" statements don't look very serious or constructive.

 
Artyom Trishkin:

All your calculations and tests should not be shown to me, and not with a certain amount of sarcasm and irritation, but dryly and concisely in the"bugs, bugs, questions" thread. Unless, of course, you want to be heard and get an answer.

I'm sorry if you feel that way. There is irritation, of course, but how could there not be when problems arise out of the blue? And the sarcasm... - I'm more puzzled by what I consider to be obvious bloopers. ))

As for the topic in question, something seems to me that the question could easily get "lost" there. So I think a new topic with a specific problem is more effective? Or is it not?

In any case, you, as a moderator, can rather draw developers' attention to some problems, if you yourself are convinced of their existence )))

I'll try to add a question there...

Reason: