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

 
Igor Makanu:

понятно, т.е. решаете извечную проблему обмена данными между терминалами

Нет. Нужно получение данных Тестера, из которого запущен советник. Для 90% случаев это умею делать.

 
fxsaber:

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

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

#define   READ_CONTROL   0x00020000
#define   bInheritHandle true

#include <WinAPI\processthreadsapi.mqh>
int OnInit()
  {
   uint process_id = GetCurrentProcessId();
   Print("process_id = ",process_id);
   HANDLE handle = OpenProcess(READ_CONTROL,bInheritHandle,process_id);	// https://docs.microsoft.com/ru-ru/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess?redirectedfrom=MSDN
   Print("handle = ",handle);
   return(INIT_SUCCEEDED);
  }

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

вот проверил PID в диспетчере задач совпадает


 
Igor Makanu:

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

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

вот проверил PID в диспетчере задач совпадает

Такой код подойдет для Сервиса, но не для советника на Агенте.

 
Igor Makanu:

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

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

вот проверил PID в диспетчере задач совпадает

Решил задачу, Спасибо.

 
Подскажите пожалуйста, в metatrader5 в папке MQL5/logs сохраняются логи за последние 7 дней. Это где то меняется в настройках или это баг-терминала?
 

Вот 2 предложения.

1- сделать вариант (кнопка) остановки оптимизации и переход к форвард оптимизации.

Тоесть, это должна была быть быстрая считалка. Но он считает и считает... А мне форвард также интересен, приходится ждать.

Иногда надо поподробнее посчитать, подольше, а иногда надо кратко. 

Нужны 2 кнопки - продлить оптимизацию и остановить оптимизацию, с переходом к форварду.

2- Панели инструментов опять сползли в 2 яруса! Дочка маленькая была, как-то сказала "скатывается и скатывается - скатина!"...)

Вот и тут всё скатываются и скатываются панельки во 2 ряд. Уже надоело их назад переносить (в один ряд). Уже почините это! Сколько места пропадает!

 

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

Последовательность действий такая.

  1. Компилируем индикатор, размещаем на чарте, убеждаемся, что выведен 0 ("капслок" не включен).
  2. Переключаемся в ME, включаем CapsLock, делаем перекомпиляцию. Возвращаемся в терминал. По логам убеждаемся, что старый индикатор выгрузился, а новый загрузился. Однако состояние "капслок" по прежнему возвращается как 0.
  3. Если убрать индикатор с чарта и повесить его заново, то капслок распознается нормально - выводится 1.

Что за чудеса? При перезагрузке по компиляции какие-то переменные окружения не чистятся или еще что?

Файлы:
CapsLock.mq5  1 kb
 
Stanislav Korotky:

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

Последовательность действий такая.

  1. Компилируем индикатор, размещаем на чарте, убеждаемся, что выведен 0 ("капслок" не включен).
  2. Переключаемся в ME, включаем CapsLock, делаем перекомпиляцию. Возвращаемся в терминал. По логам убеждаемся, что старый индикатор выгрузился, а новый загрузился. Однако состояние "капслок" по прежнему возвращается как 0.
  3. Если убрать индикатор с чарта и повесить его заново, то капслок распознается нормально - выводится 1.

Что за чудеса? При перезагрузке по компиляции какие-то переменные окружения не чистятся или еще что?

А если так?

void OnDeinit(const int reason)
{
  if (ind != INVALID_HANDLE)
  {
    IndicatorRelease(ind);
  }
}
 
Vitaly Muzichenko:

А если так?

При чем здесь это? Я не создаю индикатор из MQL-кода. Он навешен на чарт вручную. Мне нужно, чтобы в процессе разработки, когда перекомпиляция программ происходит часто, они не теряли бы функционал из-за непоняток с сохраненным контекстом/системным окружением. Сейчас приходится после перекомпиляции снимать и снова навешивать индюк, чтобы он подхватил текущее состояние клавиатуры.

 
Stanislav Korotky:

При перезагрузке по компиляции какие-то переменные окружения не чистятся или еще что?

Да, это баг. Индикатор или советник - без разницы.

Причина обращения: