Библиотеки: SingleTesterCache - страница 7

После выполнения скрипта SingleTesterCache_Example.ex5 не открывает результат Test.tst в тестере стратегий по кнопке "Предыдущие результаты". 

Прилагаю файл результата работы скрипта и историю счета, на котором прогонял скрипт.

Библиотеку обновил сегодня.

Билд MT5 6230.

Файлы:
Files.zip  315 kb
Ivan Titov #:

После выполнения скрипта SingleTesterCache_Example.ex5 не открывает результат Test.tst в тестере стратегий по кнопке "Предыдущие результаты". 

Save-методом не пользуюсь с момента создания библиотеки (скоро будет семь лет). За это время, скорее всего, вносились правки со стороны MQ.


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

Сам пока не готов этим заниматься. Не пользуюсь этим функционалом.

Т.е. в части "писать tst-файлы" данную библиотеку лучше не использовать. Только в части "читать". Я правильно понимаю?
Ivan Titov #:
Т.е. в части "писать tst-файлы" данную библиотеку лучше не использовать. Только в части "читать". Я правильно понимаю?
Если писать для чтения Тестером, то требуется явная доработка. Какая - надо смотреть.
fxsaber #:
Если писать для чтения Тестером, то требуется явная доработка. Какая - надо смотреть.
Заменить это число
      this.Header.version = ::MathMax(this.Header.version, 502);

на 505.


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

Делается таким образом.

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/ru/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

template <typename T>
void ChangeComments( T &Array[], const string NewComment = NULL )
{
  for (uint i = ArraySize(Array); (bool)i--;)
    Array[i].comment = NewComment;
    
  return;
}

void ChangeName( SINGLETESTERCACHE &SingleTesterCache, const string Name = "Deleted", const bool Comments = false )
{
  SingleTesterCache.Header.expert_name = Name;            // имя эксперта
  SingleTesterCache.Header.expert_path = Name;            // имя эксперта с путём от MQL5

  if (!Comments)
  {  
    ChangeComments(SingleTesterCache.Deals);
    
    ChangeComments(SingleTesterCache.Orders);
  }
  
  return;
}

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Если получилось прочитать последнюю кеш-запись одиночного прогона
  {
    SINGLETESTERCACHE SingleTesterCache(Bytes2); // Загоняем ее в соответствующий объект.

    ChangeName(SingleTesterCache);
    
    SingleTesterCache.Save("ForumBacktest.tst");
  }
}


Сначала сделайте бэктест, а затем запустите в Терминале этот скрипт. В итоге получите ваш бэктест без идентификационных данных. Соответственно, сохранится вся статистика бэктеста, которую можно без опасений разместить на форуме.

Здесь в исходнике можно посмотреть, как организовать работу одновременно с любым количеством кэшей одиночных проходов.


В частности, так выцепляются сделки.

struct DEAL_SIGN2 : public DEAL_SIGN
{
  bool operator =( const TradeDeal &Deal )
  {
    const bool Res = (Deal.action <= DEAL_TYPE_SELL);

    if (Res)
    {
      const double ContactSize = Deal.contract_size ? Deal.contract_size * 1000 : 1e8;

      this.Volume = (1.0 - (Deal.action << 1)) * Deal.volume / ContactSize;
      this.Time = Deal.time_create;
    }

    return(Res);
  }
};

int GetDeals( const string FileName, DEAL_SIGN &Deals[] )
{
  const SINGLETESTERCACHE SingleTesterCache(FileName);

  int Amount = 0;
  DEAL_SIGN2 Deal;

  for (int i = 0, const Size = ArrayResize(Deals, ArraySize(SingleTesterCache.Deals)); i < Size; i++)
    if (Deal = SingleTesterCache.Deals[i])
      Deals[Amount++] = Deal;

  return(ArrayResize(Deals, Amount));
}
Коэффициент НЕкорреляции.
Коэффициент НЕкорреляции.
  • www.mql5.com
При составлении портфеля ТС стараются опираться на статистику. Например, пробуют составлять таблицу корреляции на основе вычислений соответствующих коэффициента (КК). Основная причина такого подхода -