Библиотеки: Expert - страница 8

 
Vitaly Muzichenko:

Как это совместить, чтобы при запуске "Hand.ех4" полноценно работал "Trade.ех4",   при этом "Trade.ех4" был вшит в "Hand.ех4"

То есть имеем на машине только файл Hand.ех4, а используем в работе Trade.ех4

Должно получиться с индикаторами. Вроде, советники не вшиваются в другие советники.

 
fxsaber:

Должно получиться с индикаторами. Вроде, советники не вшиваются в другие советники.

Да, советник не получилось вшить, решение не найдено

 
Спасибо ребята!
 
Vitaly Muzichenko:

Да, советник не получилось вшить, решение не найдено

Скорее всего, решение есть и, похоже, как-то использовал его здесь в одном из вариантов. Но я напрочь забыл, как это делал.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
fxsaber:

Скорее всего, решение есть и, похоже, как-то использовал его здесь в одном из вариантов. Но я напрочь забыл, как это делал.

Вот Я когда пробовал, то не нашёл ни единого способа. Касалось четвёрки, на пятёрке не пробовал.

 

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

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

fxsaber, 2020.05.21 09:13

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

// Выгружает себя, если после смены счета отсутствует символ.
void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
  {
    MqlTick Tick;
    
    if (!SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM) && !SymbolInfoTick(_Symbol, Tick))
    {
      Alert("Account is changed!");
      
      if (EXPERT::Remove())
        Alert("Expert is removed!");
      
      // ExpertRemove(); // Не поможет.
      // ChartClose();   // Не лучшее решение.
    }
//  else
      // Для кастомных и других случаев дополнить код следущим решением.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819    
  }  
}
 
fxsaber:
Классная библиотека!  Я бы не додумался так реализовать открытие эксперта. А Вы еще не подскажете, как определить активный график средствами mql без использования dll. Я тут накодил на winapi, получилось слишком громоздко:
long                          Agent::ChartGetActiveID()
  {
   static long                terminal_wnd = ChartGetInteger(0,CHART_IS_DOCKED) ?
                              GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2) :
                              GetParent(GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2));

   static uint                process_id = 0;
   static uint                thread_id = GetWindowThreadProcessId(terminal_wnd, process_id);
   static long                mdi_wnd = GetDlgItem(terminal_wnd, 0xE900);
   static GUITHREADINFO       thread_info;


   thread_info.cbSize = sizeof(GUITHREADINFO);
   if(!GetGUIThreadInfo(thread_id, thread_info))
      return -1;

   long wnd_on_focus = 0, chart_id = -1;
   if(GetDlgItem(thread_info.hwndActive, 0xE900)== mdi_wnd)
      wnd_on_focus = GetWindow(SendMessageW(mdi_wnd, 0x0229, 0, 0), 5);
   else
      wnd_on_focus = GetWindow(thread_info.hwndActive, 5);

   for(long ch_id = ChartFirst(); ch_id != -1; ch_id = ChartNext(ch_id))
      if(ChartGetInteger(ch_id, CHART_WINDOW_HANDLE)==wnd_on_focus)
        {
         chart_id = ch_id;
         break;
        }
   return chart_id;
  }

Может быть знаете, как это дело реализовать на mql или хотя бы с dll, но попроще?

 
vek_y4icb:
как определить активный график средствами mql без использования dll.

Не помню точно. Вроде, решалась эта задача. Возможно, поиск поможет.

 
vek_y4icb:
Классная библиотека!  Я бы не додумался так реализовать открытие эксперта. А Вы еще не подскажете, как определить активный график средствами mql без использования dll. Я тут накодил на winapi, получилось слишком громоздко:

Может быть знаете, как это дело реализовать на mql или хотя бы с dll, но попроще?

Если дочернее окно в терминале максимизировано, то оно такое одно (остальные не считаются максимизированными). За счет этого можно в цикле ChartFirst/ChartNext проверять ChartGetInteger(id, CHART_IS_MAXIMIZED, 0, value), и там где value будет 1 - это и есть активное окно.

 
Stanislav Korotky:

Если дочернее окно в терминале максимизировано, то оно такое одно (остальные не считаются максимизированными). За счет этого можно в цикле ChartFirst/ChartNext проверять ChartGetInteger(id, CHART_IS_MAXIMIZED, 0, value), и там где value будет 1 - это и есть активное окно.

Это немного не то, то что мне нужно. Но, все-равно, спасибо!!!

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