Библиотеки: Virtual - страница 64

 
fxsaber #:

Спасибо, получилось воспроизвести.

Видны сильные различия между Classic и Alternative.

#define REPORT_BROWSER            // Создание отчета с запуском браузера - требует разрешения DLL.
#include <Report.mqh> // https://www.mql5.com/ru/code/18801

double OnTester() {
  if (VirPointer.Select())
    VIRTUAL::Stop();
  
  if (!MQLInfoInteger(MQL_OPTIMIZATION))
    REPORT::ToFile();
  
  return(AccountInfoDouble(ACCOUNT_BALANCE));
}

Буду искать причину расхождения Alternative-режима.

 
fxsaber # :

Спасибо, получилось воспроизвести.

На всякий случай напомню, что в MQ-Тестере сначала вызывается OnTester и только потом OnDeinit. Поэтому иногда логично закрывать все Virtual-позиции в OnTester.

Хорошо, спасибо за напоминание, я понял.
 
fxsaber # :

Видны сильные различия между Classic и Alternative.

Буду искать причину расхождения Alternative-режима.

Я еще не пользовался Report, но он выглядит великолепно!
Ложись пораньше, успей еще раз решить проблему, спокойной ночи!
 
Hi fxsaber, I noticed you mentioned that you always use custom symbols for backtesting. Do you use third-party tick data? If so, which tick data do you recommend?"
 
hini #:
Do you use third-party tick data?

Нет.

 

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

Если цена ниже цены тейк-профита , check() не будет выполнен, в результате чего ордер не сможет быть закрыт.

 
hini #:

I seem to have found the reason, but I don’t know the logic of your code and don’t know how to fix it.

If the price is lower than the take profit price, check() will not be executed, resulting in the order being unable to be closed.

Classic?

 
fxsaber # :

Classic?

APART. (Кажется, это не имеет ничего общего с Classic/Apart)

Только первый длинный и короткий ордер имеет TP.

Когда рынок движется в противоположном направлении, он никогда не достигнет TP; когда он падает, он не может достичь длинной TP; когда он растет, он не может достичь короткой TP.

и цена всегда будет ниже/выше TP, поэтому функция Check не будет выполнена и позиция не может быть закрыта.


 

Просто закомментируйте эту строку кода и все будет нормально. Но это только лечение симптомов, а не первопричины


 
hini #:

APART. ( This seems to have nothing to do with Classic/Apart )

Only the first long and short order has TP.

When the market goes in the opposite direction, it will never reach TP; when it falls, it cannot reach long TP; when it rises, it cannot reach short TP.

and the price will always be lower/higher than TP, Therefore, the Check function will not be executed and the position cannot be closed.

Я плохо понял ваше сообщение. Возможно, вас ввело в заблуждение название методов.

    struct MINMAX
    {
      double Min;
      double Max;

      void SetMax( const double &Price )
      {
        if (Price && (Price < this.Max))
          this.Max = Price;

        return;
      }