Библиотеки: MultiTester - страница 56

 
fxsaber #:
Спасибо, обновил.
👍
 

Иногда возникает необходимость посмотреть какой-то кусок истории цен в виде таблицы. Это возможно сделать через CTRL+U, выбрав вкладку Bars/Ticks. Вбивая руками туда нужный интервал. Это утомительно.


Поэтому создал доп. функционал, который демонстрирует следующий советник.

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

input bool inTicks = true; // true - Ticks, false - Bars
input int inBefore = -60; // Before in seconds
input int inAfter = 60;   // After in seconds
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // Period (Bars mode)

datetime GetTime( const int X )
{
  int Window;
  datetime Res;
  double Price;
    
  return(ChartXYToTimePrice(0, X, 0, Window, Res, Price) ? Res : 0);
}

void OnChartEvent( const int32_t id, const long &lparam, const double&, const string& )
{
  if ((id == CHARTEVENT_CLICK) && KEYBOARD::IsControl())
  {
    const datetime Time = GetTime((int)lparam);

    if (Time)
    {
      if (inTicks)
        MTTESTER::CopyTicks(_Symbol, Time + inBefore, Time + inAfter);
      else
        MTTESTER::CopyRates(_Symbol, inPeriod, Time + inBefore, Time + inAfter);      
    }    
  }
}


Щелкаете (с нажатой CTRL) на нужном месте чарта и получаете автоматически сразу соответствующие табличные данные.

Выделенные функции просто заполняют определенные поля данных и делают их запрос. Далее через GUI смотрите, что интересовало. Автоматизация, в общем.

 
Возможно, идея написать инструмент EA, объединяющий различные удобные функции, будет хорошей.
 

5430 Окна до сих пор моргают при подготовке задания.

Как вы это фиксите?

 
Aleksei Skrypnev #:

5430 Окна до сих пор моргают при подготовке задания.

Как вы это фиксите?

Таким образом.
Попробуйте загрузить все файлы в архиве.
Попробуйте загрузить все файлы в архиве.
  • 2025.12.22
  • www.mql5.com
если бы время файлов в архиве совпадало со временем модификации в кодобазе. Не соответствует времени изменения конкретного файла. Я вижу корректную структуру после разархивирования а ведь сам редактор позволяет загрузить все эти файлы именно так
 

Здоровская тема. Но я скачал до этого всё по отдельности всё равно моргает.

Видел что в файл MultiTester_Example.mq5

добавились строки

#define FAKE // Убрать - обход для размещения кода в КБ.

#ifdef FAKE
  void OnStart() {}
#else // #ifdef FAKE
#endif // #ifdef FAKE #else

Я закоментил так или по другому нужно? Или вообще можно все эти 4 строчки поудалять?

//#define FAKE // Убрать - обход для размещения кода в КБ.

#ifdef FAKE//  void OnStart() {}

#else // #ifdef FAKE

#endif // #ifdef FAKE #else


P.S. я увидел что я взял старый список заданйи без этих строк и он барахлил миганием. С новыми строками не мигает.

Но всё ли я там правильно закоментил только 1 строку?

 
Aleksei Skrypnev #:

Здоровская тема. Но я скачал до этого всё по отдельности всё равно моргает.

Видел что в файл MultiTester_Example.mq5

добавились строки

Я закоментил так или по другому нужно? Или вообще можно все эти 4 строчки поудалять?


P.S. я увидел что я взял старый список заданйи без этих строк и он барахлил миганием. С новыми строками не мигает.

Но всё ли я там правильно закоментил только 1 строку?

Ваше понимание верно: уберите комментарии или полностью удалите эти 4 строки.
 
Добрый день, уважаемый fxsaber! Помогите, пожалуйста, решить проблему. В моем скрипте есть функция архивации, которую я разработал с помощью великолепной библиотеки MTTESTER. Она записывает сет в папку Tester в следующей строке: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) // Переписываем Settin из песочницы Files в папку Tester. Получается сет с именем: "После архивации". Но для повторной работы в дальнейшем он не пригоден, по-видимому, из-за кодировки. Однако, если его вручную записать в робота в Тестере стратегий, а потом сохранить с именем "После ручной записи в робота и сохранения", то такой сет уже годится. И дело там не только в замене заголовка, а в чём-то ещё. Обратился к железным (Qwen, Deep Seek) за помощью, и они сгенерили скрипт "ReloadSetsFromCommonFixed". Там много замечательных функций и он работает, за исключением строки: if(!FileCopy(source_path, FILE_COMMON, dest_path, FILE_COMMON)) Сет копируется, но потом при проверочной распечатке на выходе абракадабра, по-видимому, из-за кодировки. Железные предложили 4 варианта решения, но ни один не сработал (в тексте есть все эти варианты). Последняя надежда – на кожаных. Нельзя ли как-то изменить эту строку в функции архивации: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) чтобы имитировать ещё и ручную запись в робота с последующим сохранением в нужном формате "После ручной записи в робота и сохранения"? С уважением, Александр
 
klycko #:
Нельзя ли как-то изменить эту строку в функции архивации

Подсмотрел здесь (в открывшемся окне нажать ENTER в адресной строке) запись сета. Скорее всего, нужны эти флаги.

FileOpen(FileName, FILE_WRITE | FILE_UNICODE | FILE_TXT);
 

Эти флаги очень помогли, и проблема архивации решилась. Теперь результат в нужном формате.

Большое Вам спасибо!

 

Но в моем скрипте Nocturne неправильно срабатывает команда:

prWrite0 = MTTESTER::SetSettings2(Settings);     // Запись настроек в робота

Хотя prWrite0 = true после ее выполнения.

Наверное, опять дело во флагах при считывании сета Settings из папки.

Это производится функцией GetKthFileContent, в которой есть строка:

int handle = FileOpen(full_path, FILE_READ | FILE_WRITE | FILE_UNICODE | FILE_TXT | FILE_COMMON);

Варианты строки ниже тоже не работают:

// int handle = FileOpen(full_path, FILE_READ | FILE_TXT | FILE_COMMON);   // Исходный вариант строки

// int handle = FileOpen(full_path, FILE_READ | FILE_UNICODE | FILE_TXT | FILE_COMMON);

 

Следующая команда:

prRead0 = MTTESTER::GetSettings(Control); // Считываются только что установленные настройки робота

работает правильно, и prRead0 = true после ее выполнения.

Но в сете Control prMFI=true, как это изначально было загружено вручную в робота. Это означает, что записи в робота на самом деле не произошло, хотя признак записи prWrite0 = true.

 

В исходном сете prHEX=true

В сете робота исходно prMFI=true

Команда MTTESTER::SetSettings2(Settings) отрабатывает, но в роботе эти настройки не появляются.

В чем же здесь проблема?

 

С уважением, Александр