Discussão do artigo "Criamos um auxiliar na negociação manual" - página 6

 
zhixiong Li:
Olá, Dmitriy, esse painel de negociação pode ser usado no modo de teste de histórico do MT4? Parece que a função OnChartEvent() não é executada ao fazer o teste de histórico? Você poderia me ensinar como resolver isso? Muito obrigado, Robison.
Sim, no modo de teste, o MT4 e o MT5 não geram eventos para executar a função OnChartEvent. Mas se você quiser usar algum painel no modo de teste do MT4, deverá criar uma função para verificar o estado dos botões a cada tick. Mas esse método não funciona no MT5.
Melhores registros,
Dmitriy.
 

Olá. No seu artigo, não entendi como a "mobilidade" do painel é implementada, como fazer o painel se mover com o mouse e minimizar. Por favor, explique. E me diga se é possível implementar o mesmo no mql4.

 
Aleksandr Teleguz:

Olá. No seu artigo, não entendi como a "mobilidade" do painel é implementada, como fazer o painel se mover com o mouse e minimizar. Por favor, explique. E me diga se é possível implementar o mesmo no mql4.

Bom dia,
Em meu artigo, usei bibliotecas padrão ao escrever o painel. As funções especificadas por você já estão implementadas nelas. No mql4, há bibliotecas semelhantes com funções semelhantes.

Atenciosamente,
Dmitry.

 

Dmitry, olá! Estou criando um painel no MT4. Tomei sua experiência como base, mas o problema é o seguinte: ao alternar os TFs, por volta da terceira vez, o painel começa a se duplicar e a se afastar. No MT5, em seu exemplo, tudo está OK, mas no MT4 estou com um problema. Talvez você saiba onde procurar).

 
Eugeny Kotovschikov:

Dmitry, olá! Estou criando um painel no MT4. Tomei sua experiência como base, mas o problema é o seguinte: ao alternar os TFs, por volta da terceira vez, o painel começa a se duplicar e a se afastar. No MT5, em seu exemplo, tudo está OK, mas no MT4 estou com um problema. Talvez você saiba onde procurar).


Bom dia, Eugene.
Você precisa escrever a função de remoção forçada do painel do gráfico em OnDeinit. O problema é que, ao mudar o gráfico, o MT4 não inicia o fechamento do programa e chama a função OnDeinit. Após a primeira desinicialização na classe CAppDialog , o motivo da desinicialização é gravado na variável privada m_deinit_reason . Mas ao alterar o período de tempo, o MT4 não exclui a classe da memória. E nas tentativas subsequentes de excluir o painel, a classe lê o valor da variável e, como ela não está vazia, não faz nada

//+------------------------------------------------------------------+
//| Função de desinicialização do diálogo do aplicativo
//+------------------------------------------------------------------+
void CAppDialog::Destroy(const int reason)
  {
//--- já destruído?
   if(m_deinit_reason!=WRONG_VALUE)
      return;
//---

Mas uma variante mais simples e provavelmente mais correta seria declarar a classe do painel por meio de uma referência à classe usando "*". Nessa variante, você precisa fazer pequenas alterações no código

CTradePanel *TradePanel;
//+------------------------------------------------------------------+
//| Função de inicialização de especialista|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   // Init class CTradePanel
   TradePanel=new CTradePanel();
   if(CheckPointer(TradePanel)==POINTER_INVALID)
      return INIT_FAILED;
   // Painel de Comércio de Criaturas
   if(!TradePanel.Create(ChartID(),"Trade Panel"))
     {
      return (INIT_FAILED);
     }
   // Executar painel de comércio
   TradePanel.Run();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(CheckPointer(TradePanel)!=POINTER_INVALID)
     {
      TradePanel.Destroy(reason);
      delete TradePanel;
     }
  }

Essa variante excluirá forçosamente a classe do painel de comércio na desinicialização e, em seguida, a recriará.

Atenciosamente,
Dmitry.

 
Dmitriy Gizlyk:

Boa tarde, Eugene.
Preciso escrever a função de remoção forçada do painel do gráfico em OnDeinit. O problema é que, ao mudar o gráfico, o MT4 não inicia o fechamento do programa e chama a função OnDeinit. Após a primeira desinicialização na classe CAppDialog , o motivo da desinicialização é gravado na variável privada m_deinit_reason . Mas ao alterar o período de tempo, o MT4 não exclui a classe da memória. E nas tentativas subsequentes de excluir o painel, a classe lê o valor da variável e, como ela não está vazia, não faz nada

Mas uma variante mais simples e provavelmente mais correta seria declarar a classe do painel por meio de uma referência à classe usando "*". Nessa variante, você precisa fazer pequenas alterações no código

Essa variante excluirá forçosamente a classe do painel de comércio na desinicialização e, em seguida, a recriará.

Atenciosamente,
Dmitry.


Dmitry, muito obrigado, a segunda opção funcionou. )))).

 
Dmitriy Gizlyk:
Como posso criar um painel semelhante ao painel para colocar manualmente uma função de ordem ao testar dados históricos no MT4?

Não é possível operar o backtesting histórico usando botões.

 
Yupeng Xiao:

Não é possível operar o backtesting histórico usando os botões.


O testador MT4 não gera eventos, mas os próprios botões funcionam. Portanto, para o testador MT4, você pode verificar o status dos botões em cada tick.

 

Oi Dimitriy

Muito bom o seu trabalho. Você poderia me explicar como alterar a cor de fundo do painel? Sei que posso editar a definição de macro nos arquivos Defines.mqh, mas gostaria de saber se há alguma maneira de fazer isso sem editar esse arquivo.

Desde já, obrigado.


Sávio

 

Muito boa ideia! Muito fácil de usar, facilita o mt5 para iniciantes. Agradecimentos