Простой способ прерывания отдельного прогона во время оптимизации НЕ РАБОТАЕТ - страница 3

 
Что именно не работает? Видео выше.
 
Вычисления продолжаются.
 
Проверил еще раз, добавил немного кода. Ну что Вам сказать, getch. БОЛЬШОЕ СПАСИБО!

Процедура проверки количества непрерывных убыточных сделок была реализована таким образом, что работала только при наличии открытых позиций (после завершения функции start()). Будет обязательно пофиксено. На данный момент можно немного добавить в Вашу функцию прерывания тестирования и будет работать корректно.

//+------------------------------------------------------------------+
//|                                    CheckOptimizationBreakout.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/ru/"
#define NUM 10
 
extern int a = 1;
extern int Porog = 10;
extern int MaxAmountLoss = 30;
 
int CountedBars=0;
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   if (IsOptimization()) GlobalVariableSet("input_a="+a,CountedBars);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Stop( int Amount )
{
  int Ticket;
  double MinLot;
  string Symb;
  
  Symb = Symbol();
  MinLot = MarketInfo(Symb, MODE_MINLOT);
 
  while (Amount > 0)
  {
    Ticket = OrderSend(Symb, OP_BUY, MinLot, Ask, 0, 0, 0);
    OrderClose(Ticket, MinLot, Bid, 0);
    
    Amount--;
  }
  Ticket = OrderSend(Symb, OP_BUY, MinLot, Ask, 0, 0, 0);// добавлено
  
  return;
}
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  int i;
  
  CountedBars++;
  
  if (a > Porog)
    Stop(MaxAmountLoss);
  
  for (i = 0; i < NUM; i++)
    MathSqrt(i);
    
  return;   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
Я также добавил подсчет количества обсчитанных тиков в ходе каждого прогона, и в функции deinit() вывожу эти данные в Глобальные переменные терминала. После исправления необходимость в наличии открытого ордера после окончания функции start() отпадет.
 
Красивое использование глобальных переменных!
Причина обращения: