Ошибки, баги, вопросы - страница 2603

 
При смене названий символов у брокера (добавили суффиксы) слетают все настройки чартов с прежними символами (которых уже нет, и которые нужно перенести на новые названия)! Безвозвратно, вместе с индикаторами экспертами. Бред.
 

В 2204 профиль с советниками загружается без них.

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

 
Прошу помощи. Нужно в неактивное окно Тестера во вкладку Настройки отправлять комбинации клавиш CTRL+C и CTRL+V. Поиском накопал только такое

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

Подскажите, как программно запустить скрипт при смене ТФ или открытии терминала

Егор, 2008.11.16 09:28

Ilnur, наверно можно все-таки, если дополнительно обновить "keyboard input-state table" в нужном потоке.

Вот это надо бы попробовать на MQL, может поможете?:

    if (h != NULL)
    {
        HWND child = ::FindWindowEx(h,NULL,"Edit", NULL);

        UINT lparam_Ctrl1 = ::MapVirtualKey(VK_CONTROL, 0) << 16 | 1 ;
        UINT lparam_A1 = ::MapVirtualKey((int)'A', 0) << 16 | 1 ;

        UINT lparam_A2 = 1 << 31 | 1 << 30 | ::MapVirtualKey((int)'A', 0) << 16 | 1 ;
        UINT lparam_Ctrl2 = 1 << 31 | 1 << 30 | ::MapVirtualKey(VK_CONTROL, 0) << 16 | 1 ;

        DWORD pid;
        DWORD tid = GetWindowThreadProcessId(child, &pid);
        HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid);
        //Ctrl + A

        AttachThreadInput(GetCurrentThreadId(), tid, TRUE);

        LRESULT pl1_Ctrl = ::PostMessage(child, WM_KEYDOWN, VK_CONTROL, lparam_Ctrl1 );
        WaitForInputIdle(hProc, INFINITE);

        BYTE state[256];
        GetKeyboardState(state);
        state[VK_CONTROL] = 0x80;
        SetKeyboardState(state);

        LRESULT pl1_A = ::PostMessage(child, WM_KEYDOWN, (int)'A', lparam_A1 );
        WaitForInputIdle(hProc, INFINITE);

        LRESULT pl2_A = ::PostMessage(child, WM_KEYUP, (int)'A', lparam_A2);
        WaitForInputIdle(hProc, INFINITE);

        LRESULT pl2_Ctrl = ::PostMessage(child, WM_KEYUP, VK_CONTROL, lparam_Ctrl2);        
        WaitForInputIdle(hProc, INFINITE);
/*
        GetKeyboardState(state);
        state[VK_CONTROL] = 0x0;
        SetKeyboardState(state);
*/

        AttachThreadInput(GetCurrentThreadId(), tid, FALSE);

    }

Реализовать не получилось. Очень нужно для мультитестера.

 
fxsaber:
Прошу помощи. Нужно в неактивное окно Тестера во вкладку Настройки отправлять комбинации клавиш CTRL+C и CTRL+V. Поиском накопал только такое

Реализовать не получилось. Очень нужно для мультитестера.

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

Что-то не так с подсказками. Файл советника:

Alt+G отправляет сюда:


Эдитор 2200

 
Slava:
В неактивное окно невозможно послать команду копирования-вставки. Для начала надо раскрыть окно тестера и активизировать вкладку настроек

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

А вот получение и импорт настроек - исключение из данного удобства. Какой-то механизм для помощи в автоматизации работы с настройками возможно организовать с Вашей стороны?

 

Подскажите, а придуман какой способ остановить тестер или оптимизатор из кода?

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

 
Igor Makanu: В МТ4 билд 1220 это скорее всего было последнее обновление МТ4, кто ранее из админов писал, что МЕ для терминалов 4/5 одинаковые, а значит нового 32-х разрядного МЕ больше не будет

А если найдутся какие новые баги, то так и останутся?

 
. ... Rick D. ... .:

А если найдутся какие новые баги, то так и останутся?

Исправлять ошибки и развивать - разные вещи.
 
. ... Rick D. ... .:

Подскажите, а придуман какой способ остановить тестер или оптимизатор из кода?

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

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

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2019.11.06 16:57

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

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

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

// Выключает Оптимизацию ( и одиночный проход)
bool OptimizationStop( void )
{
  return(!MTTESTER::IsReady() && MTTESTER::ClickStart(false));
}


Применение.

// Демонстрация прерывания Оптимизации.

sinput int inAmountPasses = 20; // Через сколько проходов закончить
input int Range = 0; // 0..10000

double OnTester()
{
  int Data[];
  
  return(FrameAdd(NULL, 0, 0, Data)); // Сгенерировали TesterPass
}

void OnTesterPass()
{
  static int Amount = 0;
  
  ulong Pass;
  string Name;
  long ID;
  double Value;
  int Data[];

  while (FrameNext(Pass, Name, ID, Value, Data))
    if (++Amount > inAmountPasses)
    {
      OptimizationStop(); // Как достигли нужного количества проходов, выключили оптимизатор.
      
      break;
    }
}
Причина обращения: