Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 108

 
Renat Fatkhullin:

А куда вы его кастили и как понимать эту строку?

Ну это был просто абстрактный пример.  Вот более развёрнуто:

struct A
{ 
  string a;
  void f() {  }
};

struct B : private A
{ 
};

void F(A&) {  }


void OnInit()
{
  B b;
  ((A)b).f(); // '(' - invalid cast operation
  
  F((A)b);  // '(' - invalid cast operation
}

Если убрать string, то всё работает.   Аналогично и с массивами.  Это видимо оставшийся рудимент с тех пор, когда сложные объекты нельзя было копировать.  Хотя здесь ведь даже не копирование, а просто кастинг.  Ну точнее по правилам C++ тут должна создаваться копия объекта, а в MQL происходит приведение ссылки,  поэтому ошибка компиляции тут вообще неуместна.

 
WebRequest сломался в 1971.
void TestWebRequest( const string URL )
{
  uchar Data[];
  const int TimeOut = 5000;
  string Headers;
  char Post[];

  if (::WebRequest("GET", URL, NULL, NULL, TimeOut, Post, 0, Data, Headers) != -1)
    ::Print(URL + " - " + (string)::ArraySize(Data) + " bytes.");
  else
  {
    ::Print(URL + ": WebRequest Error - " + (string)::GetLastError());

    if (::GetLastError() == ERR_FUNCTION_NOT_ALLOWED)
      ::Print("Please add \"" + URL + "\" domain name to the list of allowed URLs!");
  }
}

void OnStart()
{
  TestWebRequest("https://www.mql5.com");
  TestWebRequest("https://www.rannforex.com");
  TestWebRequest("https://alpari.com");  
}


https://www.mql5.com - 94956 bytes.
https://www.rannforex.com: WebRequest Error - 5200
https://alpari.com - 231892 bytes.


В 1970 все работало.

 
Renat Fatkhullin:

Выпустили бету 1971 с массой улучшений производительности.

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

Уже несколько билдов расхождения результатов оптимизации и тестов.

Результаты оптимизации в билде 1971. Смотрим первый результат.

//---

//---

Код для воспроизведения передавал в личных сообщениях.

 
fxsaber:
Идентичные настройки Тестера

Hedge, RAM-Drive, 1 Agent-only. Советник

В нем добавлена выделенная строка, т.к. раньше тестировал только на кастомных по реальным тикам и библиотека немного менялась с момента первого теста.

Время берется shortest из лога (пять проходов Оптимизатора).

AmountMT5-TesterMT5-Virtual
02.1372.761
13.4952.808
24.1962.933
34.6802.793
45.6162.808
56.1623.042
2015.0543.432


Видно, что Tester сильно замедляется, Virtual - нет. Кто быстрее - см. таблицу.


ЗЫ Virtual не вычисляет (специально) маржу, своп и стопаут. Но вряд ли это является причиной сильных отличий.

Я тестирую одиночный проход.

Не вычислять маржу и риски, это экономить десятки миллионов мат операций. 
 

Я так понимаю что любые вопросы к разработчикам сюда пишутся? Т.к. в сервисдеск не по теме, а другие темы не часто читают.

1) Будут ли добавлены фьючерсы на MOEX демо от MetaQuotes?

В настоящее время из актуальных там только с экспирацией 3.19: si rts eu

+брент за февраль,

а акционных фьючей нет совсем никаких- даже сбера и газпрома

так же нету и ED и т.п.

2) Как можно запустить оптимизацию, тест не на всё облако а например заказать для оптимизации только 5-10 и т.п. агентах? Или заказать например не агенты а число PR например 1000 на 1 час, сутки и т.п.? Или еще проще- чтобы была настройка на ограничение макс кол-во используемых агентов в своих вычислениях, а там уже если видишь что нужно больше-повышаешь лимит-если меньше то понижаешь. То есть чтобы не использовать все 100500 агентов с результатом в 1 сек, а сразу а взять только необходимые ресурсы/ограничить предел максимальный/ - заодно и предел трат можно заранее просчитать на сутки неделю месяц. Или можно ли поставить ограничение например на 1 час оптимизации я трачу не более такой то суммы, правда 1-ый вариант с ограничением макс кол-ва агентов видится намного лучше.

 
Renat Fatkhullin:

Я тестирую одиночный проход.

Эот неправильно, потому как два одинаковых прохода даже в Оптимизаторе могут выполняться с различием в 1.5 раза. Ну и давно доказано (на форуме надо искать), что одиночные проходы выполняются медленнее оптимизационных.

Не вычислять маржу и риски, это экономить десятки миллионов мат операций. 

С этим не могу не согласиться. Другое дело, что не знаю людей, кому нужны постоянно вычисление маржи и рисков.

Все же Тестер - это исследовательский инструмент. Основная задача которого - помочь найти робастную ТС. А при таком раскладе маржа и риски - лишнее.


ЗЫ 100 млн дорогостоящих мат. операций

#define BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

void Test( const int Amount = 1e8 )
{
  double Sum = 0;
  
  for (int i = 0; i < Amount; i++)
    Sum += MathSqrt(MathRand());
    
  Print(Sum);
}

void OnStart()
{
  BENCH(Test());
}


выполняются за секунду

12067822377.72478
Time[Test()] = 955919
 

Достаточно правильно и результаты у меня почему-то приемлемо сходятся.

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

 
Renat Fatkhullin:

Достаточно правильно и результаты у меня почему-то приемлемо сходятся.

Ваш результат не воспроизводится.

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

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

 
Проблема с пропуском баров на каст. символах в этом билде пока не решена
 
По прежнему невозможно прервать отладку без плохих последствий

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5

fxsaber, 2019.01.10 07:47

Запускаю дебаг через CTRL+F5. Затем выхожу из него через SHIFT+F5. Повисают Визуализатор и ME.

ME возвращается к жизни, если убить повисший Визуализатор. Воспроизводится в 100% случаев - 1969.


Смог дождаться отвиса Визуалиазатора. В нем такой лог

2019.01.10 08:45:11.800 2018.10.20 00:00:00   debugging terminated
2019.01.10 08:45:11.800 OnInit critical error
2019.01.10 08:45:11.800 tester stopped because OnInit failed
2019.01.10 08:45:11.806 shutdown tester machine
2019.01.10 08:45:11.806 try to cancel expert execution
2019.01.10 08:45:11.807 expert execution canceled
2019.01.10 08:46:11.808 cannot stop tester process [0, 0]
2019.01.10 08:46:11.809 agent shutdown forced


Код для воспроизведения

int OnInit()
{
  DebugBreak();

  return(INIT_FAILED);
}