Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 7

 
Pavlick:

Ошибка при компиляции:

 

Забавно. Компилятор "думает", что это - декларация функции:

'w' - function can be declared only in the global scope

Можно заставить его опознавать Q::val как выражение, а не как возможное имя типа, простейшим стандартным способом:

class W
{
public:
    W(int) {}
};

class Q
{
public:
    static const int val;
    static void fn()
    {
        W w((Q::val));
    }
};
const int Q::val = 3;

Компилятор успешно "заборен", и не смеет ругаться.

А можно применить копирующую инициализацию вместо прямой:

class W
{
public:
    W(int) {}
};

class Q
{
public:
    static const int val;
    static void fn()
    {
        W w = Q::val;
    }
};
const int Q::val = 3;

С тем же успехом.

 

Вообще вопрос возник, никак не могу раскурить и распить, как прервать тестирование советника или прогона оптимизации если не достаточно средств для открытия позиции ???

void OnTick()
  {
   double LotB=InputLot;
   error_lot(LotB);
   if(LotB<0)return;
  }
//+------------------------------------------------------------------+
void error_lot(double &lt)
  {
   if(lt*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountFreeMargin())
      lt=-1;
  }

 Данный код не помогает или работает через раз ... Оптимизация зависает и все ... 

Пишет 2014.07.13 01:41:35.526 Tester: PrevBalance: 15118.13, PrevPL: -5850.61, PrevEquity 9267.52, PrevMargin: 5462.06, NewMargin: 9279, FreeMargin: -11.67

 
VOLDEMAR:

Вообще вопрос возник, никак не могу раскурить и распить, как прервать тестирование советника или прогона оптимизации если не достаточно средств для открытия позиции ???

 Данный код не помогает или работает через раз ... Оптимизация зависает и все ... 

Пишет 2014.07.13 01:41:35.526 Tester: PrevBalance: 15118.13, PrevPL: -5850.61, PrevEquity 9267.52, PrevMargin: 5462.06, NewMargin: 9279, FreeMargin: -11.67

 

 

Ну, можно, например, на 0 поделить (пришлось длинным способом на 0 делить, а то компилятор сильно умничать пытается, но у него нет шансов против программиста):

#property strict

/******************************************************************************/
void OnTick()
{
  if (Time[0] > D'2014.07.10 00:00:00') {
    int i = 0, j = i / (i - i); // Длинный способ поделить на 0
  }
}

Проверочный советник был назван "Stop":

2014.07.13 03:08:31.009 2014.07.10 01:00  Testing pass stopped due to a critical error in the EA
2014.07.13 03:08:31.009 2014.07.10 01:00  zero divide in 'Stop.mq4' (7,27)
2014.07.13 03:08:17.212 Stop test started

Задал диапазон прогона с 2014.07.07 пл 2014.07.13, с первым же тиком после заданного в советнике времени был инициировано событие, приведшее к "Testing pass stopped", что и требовалось.

Кстати, оптимизация прекрасно работает при использовании данного решения, и результат таким образом оборванного прогона также учитывается с достигнутым на тот момент торговым результатом советника.

Функция ExpertRemove() в тестере игнорируется, зато нашлось вменяемое применение, казалось бы, бесполезной "ошибке" деления на 0.

Даже деление на 0 иногда полезно и совсем не ошибочно.

Однако, замечу, что данное решение является чистым хакерством (хотя и безопасным хакерством - от деления на 0 в программе MQL терминал не имеет права "упасть" или сделать что-нибудь "непотребное"), эксплуатирующим особенности поведения системы, и поэтому уже даже в следующей её версии может перестать работать.

 
Вопросы.

Свойство #property indicator_plots
Работает ли это свойство в MT4 ?
Мастер MQL4 при генерации кода для индикатора создает это свойство, но работает ли это свойство в MT4 и нужно ли это свойство в MT4 ?

Какое сейчас максимально возможное значение свойства #property indicator_buffers  ?
 
Omm:



а вот ваше пред. сообщение :  "Например, поменяв параметры местами."

и где там слово "входной"?

 

- Запускайте космонавта

- ???

- Ты что, в советское время не жил? Запускать - космонавта. Израильская - военщина. Параметр - входной.

(ц) День выборов

 

После удаления советника из окна не всегда удаляются Object.

Приходится удалять  вручную.

В прошлой версии этого не было.

Но спасибо, что нормализовали  OBJPROP_XDISTANCE.

 

Скажите эти новые билды понимают нестандартные таймфреймы, например

iCCI(Symbol(),PERIOD_H4,14,PRICE_CLOSE,1);

если вместо PERIOD_H4  поставить PERIOD_H2, проблем не будет? 

 
Barbarian:
Используйте механизм как в С++, там работают по одной точке привязки для всех объектов - левый верхний угол. Для того что бы объект был привязан к правому углу либо нижней точке, используйте события. MetaQuotes вообще зря стали использовать четыре точки привязки.
А можно подробнее о работе по одной точке привязки для всех объектов в C++? Я представляю что тогда к Х нужно прибавлять ширину строки, к Y - высоту. Или имеются иные решения?
 
Сегодня заметил - советник висит на графике, после перекомпиляции он продолжает работать по старому алгоритму (выдает старые Принты), на новые переходит лишь после переустановки его на графике.
 

Разработчики ответе :

Как остановить тестирование советника или прогон оптимизации в случае если не достаточно средств для открытия позиции ?

Как вообще программно остановить тестирование ? 

void OnTick()
  {
   double LotB=InputLot;
   error_lot(LotB);
   if(LotB<0)return;
  }
//+------------------------------------------------------------------+
void error_lot(double &lt)
  {
   if(lt*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountFreeMargin())
      lt=-1;
  }

 Данный метод не помогает:

Сыпет 2014.07.13 01:41:35.526 Tester: PrevBalance: 15118.13, PrevPL: -5850.61, PrevEquity 9267.52, PrevMargin: 5462.06, NewMargin: 9279, FreeMargin: -11.67