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

 
fxsaber:

Спасибо, хорошее правило. Стал жертвой своей некомпетентности. Правда, нужно еще какое-то правило для такого более очевидного случая.


Может на оба случая Warning умный делать?

Не надо))) Совсем скучно будет)))

 
Vladimir Simakov:
А в чем проблема этого кода? В Deinit пришибли объект по константному указателю (знаю, что тут хэндл). Нормальная стрельба по конечностям в С++ стиле, а то распустили всех создатели)))

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

Это не загадка, просто гораздо лучше приходит понимание, если поискать проблему в безобидном коде на первый взгляд.
 
fxsaber:

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

Это не загадка, просто гораздо лучше приходит понимание, если поискать проблему в безобидном коде на первый взгляд.
Да знаю я, в чем тут проблема. Смена тайм-фрейма и упс.. Я к тому, что тут все по стандарту. Warning? А зачем? Вот сам для себя, когда с подобным сам сталкиваюсь, только в поднятие скилла засчитываю. С Вашим примером, ИМХО, здесь от силы процентов 20 сообщества в состоянии столкнуться, так зачем их лишать развития?
 
Vladimir Simakov:
Да знаю я, в чем тут проблема. Смена тайм-фрейма и упс.. Я к тому, что тут все по стандарту. Warning? А зачем? Вот сам для себя, когда с подобным сам сталкиваюсь, только в поднятие скилла засчитываю. С Вашим примером, ИМХО, здесь от силы процентов 20 сообщества в состоянии столкнуться, так зачем их лишать развития?

У меня даже интереснее ситуация была. Не было смены чего-либо, но OnDeinit вызвался после реконнекта. Теперь буду отслеживать Reason.

 

Постоянно сталкиваюсь с необходимостью поиска в Обзоре рынка необходимого символа. Например, символа текущего чарта.

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

// После запуска и нажатия ENTER делает активным в Обзоре рынка символ чарта.
#include <WinAPI\winuser.mqh>

#define GA_ROOT           0x00000002

#define WM_KEYDOWN        0x0100
#define WM_LBUTTONDOWN    0x0201

#define VK_DELETE         0x2E

#define WM_CHAR           0x0102

#define GET_HANDLE                                                                       \
  long Handle = user32::GetAncestor(::ChartGetInteger(0, CHART_WINDOW_HANDLE), GA_ROOT); \
                                                                                         \
  for (int i = 0; i < sizeof(ControlID) / sizeof(int); i++)                              \
    Handle = user32::GetDlgItem(Handle, ControlID[i]);


bool SetSymbolNavigator( const string SymbName )
{
  const bool Res = ::SymbolInfoInteger(SymbName, SYMBOL_EXIST);

  if (Res)
  {
    static const int ControlID[] = {0xE81C, 0x804B, 0x27A0, 0x271B, 0x3E9};
    GET_HANDLE

    user32::SendMessageW(Handle, WM_LBUTTONDOWN, 0, 0);
    user32::SendMessageW(Handle, WM_KEYDOWN, VK_DELETE, 0);

    const int Size = ::StringLen(SymbName);
    
    for (int i = 0; i < Size; i++)
      user32::SendMessageW(Handle, WM_CHAR, SymbName[i], 0);
  }

  return(Res);
}

void OnStart()
{
  SetSymbolNavigator(_Symbol);
}
 
fxsaber:

Постоянно сталкиваюсь с необходимостью поиска в Обзоре рынка необходимого символа. Например, символа текущего чарта.

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

Коллега, уточните относительно цели. Нужно, чтобы символ появился в "Обзоре рынка", или чтобы он был выделен в "Обзоре рынка"?

 
Denis Kirichenko:

Коллега, уточните относительно цели. Нужно, чтобы символ появился в "Обзоре рынка", или чтобы он был выделен в "Обзоре рынка"?

Чтобы был выделен. Например, полно кастомных. Мне нужно запустить Тестер на том кастомном, чарт которого вижу.

Тогда запускаю этот скрипт и после этого выделенный символ в Обзоре рынка мышкой кидаю в Тестер. На все пару секунд уходит.

 
fxsaber:

Чтобы был выделен. Например, полно кастомных. Мне нужно запустить Тестер на том кастомном, чарт которого вижу.

Тогда запускаю этот скрипт и после этого выделенный символ в Обзоре рынка мышкой кидаю в Тестер. На все пару секунд уходит.

Ну тогда у меня не работает этот скрипт. Ничего не происходит, символ не выделяется.

Запускаю, жму Enter. В логах вижу ошибку:

2019.11.29 11:47:38.609 Error   file C:\Users\Admin\AppData\Roaming\MetaQuotes\Terminal\5B326B03063D8D9C446E3637EFA32247\MQL5\Scripts\Shared Projects\Testing\fxsaber\SetActiveSymbol.mq5 not found

Да, скрипт я назвал SetActiveSymbol.mq5.

 
Denis Kirichenko:

В логах вижу ошибку

Так просто не запускается. Файла нет.

 
fxsaber:

Так просто не запускается. Файла нет.

Он есть. Я привёл только одну запись из лога. Полный вот такой:

2019.11.29 12:37:18.851 Scripts script SetActiveSymbol (AUDJPY,H1) loaded successfully
2019.11.29 12:37:18.878 Scripts script SetActiveSymbol (AUDJPY,H1) removed
2019.11.29 12:37:26.419 Error   file C:\Users\Admin\AppData\Roaming\MetaQuotes\Terminal\5B326B03063D8D9C446E3637EFA32247\MQL5\Scripts\Shared Projects\Testing\fxsaber\SetActiveSymbol.mq5 not found
Причина обращения: