Bibliotecas: Expert - página 8

 
Stanislav Korotky:

Ainda não entendo por que o nome constante Expert.mqh.tpl é mais "prático" (prático?) do que os modelos com o nome do programa que os gera? Digamos que haja um programa A.mq5 e um B.mq5 que usam bibla. Se eles gerassem modelos com seus próprios nomes, seria mais prático, em primeiro lugar, ter a última "impressão digital" das ações de cada programa, em vez de substituir uma pela outra. Em segundo lugar, você poderia ver imediatamente quem é o gerador pelo nome (especialmente útil se os programas forem estrangeiros). Agora não é possível saber isso pelo arquivo Expert.mqh.tpl até que você entre nele. A solução universal que forneci é usar o nome do programa MQL+carimbo de data/hora+aleatório. E não vejo a necessidade de deixar o arquivo em sync=true. Acho que tudo já foi testado e depurado há muito tempo. No caso de erros e da necessidade de depuração, há uma opção sync=false. Nesse caso, o arquivo deve ser deixado. Acho que tudo é lógico. E as edições são simples.

Concordo que, na prática, a colisão pode ocorrer raramente, a menos que alguém use a biblio em paralelo em vários programas. Não o tenho, mas dei uma rápida olhada no código e meu olhar foi atraído pelo Expert.mqh.tpl na pasta Files. Tudo é puramente imho.

Eu não queria excluir arquivos, então achei que um nome comum era suficiente, levando em conta a confiabilidade do trabalho na prática.

Eu não queria ver um zoológico de arquivos tpl na pasta Files. Para excluir algo de propósito - da mesma forma. Excluí somente aqui.

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

Como é possível executar um Consultor Especialista no formato .ex4 conectando-o a um Consultor Especialista com um nome diferente, sendo necessário exibir os parâmetros de entrada, ou seja, para poder trabalhar plenamente com ele?

Temos um Expert Advisor compilado com o nome "Trade.ex4".

Crie um novo Expert Advisor com o nome "Hand.ex4".

Como combiná-los de modo que, quando o "Hand.ex4" for iniciado, o "Trade.ex4" funcione plenamente e o "Trade.ex4" seja incorporado ao "Hand.ex4".

Ou seja, temos apenas o arquivo Hand.ex4 na máquina, mas usamos o Trade.ex4 no trabalho

Muito obrigado!

Você encontrou uma solução?

 
Vitaly Muzichenko:

Como combiná-lo para que, quando o "Hand.ex4" for iniciado, o "Trade.ex4" esteja totalmente funcional e o "Trade.ex4" seja incorporado ao "Hand.ex4"?

Ou seja, temos apenas o arquivo Hand.ex4 na máquina, mas usamos o Trade.ex4 no trabalho

Isso deve funcionar com indicadores. Parece que os Expert Advisors não são costurados em outros Expert Advisors.

 
fxsaber:

Ele deve funcionar com indicadores. Aparentemente, os Expert Advisors não são costurados em outros Expert Advisors.

Sim, o Expert Advisor não pôde ser incorporado, nenhuma solução foi encontrada

 
Obrigado, pessoal!
 
Vitaly Muzichenko:

Sim, o conselheiro não pôde ser costurado, nenhuma solução foi encontrada

Provavelmente há uma solução, e parece que eu a usei aqui uma vez em uma das variantes. Mas esqueci completamente como fiz isso.

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

Provavelmente há uma solução, e parece que eu a usei aqui uma vez em uma das variantes. Mas esqueci, distraidamente, como fiz isso.

Aqui estou, quando tentei, não encontrei uma única maneira. Foi no 4, não tentei no 5.

 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Peculiaridades da linguagem mql5, sutilezas e técnicas de trabalho

fxsaber, 2020.05.21 09:13

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

// Descarrega-se se não houver nenhum símbolo após a alteração da conta.
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(); // Isso não ajudará.
      // ChartClose(); // Não é a melhor solução.
    }
// else
      // Para casos personalizados e outros, aumente o código com a seguinte solução.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
Biblioteca legal! Eu não teria pensado em implementar a abertura do Expert Advisor dessa forma. Você poderia me dizer como definir um gráfico ativo usando mql sem usar dll. Trabalhei um pouco com o winapi, mas acabou sendo muito complicado:
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;
  }

Talvez você saiba como implementar esse caso no mql ou pelo menos com a dll, mas de forma mais simples?

 
vek_y4icb:
como definir um gráfico ativo usando ferramentas mql sem usar a dll.

Não me lembro exatamente. Acho que esse problema foi resolvido. Talvez uma pesquisa possa ajudar.