Expert ou script que monitora varios ativos

 

Gostaria de saber se existe alguma função que possibilita um expert ou script monitorar varios ativos ao mesmo tempo a partir de uma lista, para poder configurar algum tipo de alerta quando alguma condição for cumprida. Se sim gostaria de saber o link da ajuda ou artigo pra ter como referência.

 
Samuel Manoel de Souza:

Gostaria de saber se existe alguma função que possibilita um expert ou script monitorar varios ativos ao mesmo tempo a partir de uma lista, para poder configurar algum tipo de alerta quando alguma condição for cumprida. Se sim gostaria de saber o link da ajuda ou artigo pra ter como referência.

Olá Samuel,

No MT5 basta fazer um loop com uma varredura de preços/volumes, ativo a ativo da sua lista, para fazer essa monitoração.

Sds.,

Rogério Figurelli 

 
Rogerio Figurelli:

Olá Samuel,

No MT5 basta fazer um loop com uma varredura de preços/volumes, ativo a ativo da sua lista, para fazer essa monitoração.

Sds.,

Rogério Figurelli 

Sim, mas tem como obter a lista a partir da janela de ativos ou teria que criar a lista manualmente dentro do expert?
 
Samuel Manoel de Souza:
Sim, mas tem como obter a lista a partir da janela de ativos ou teria que criar a lista manualmente dentro do expert?

Olá Samuel,

Você até poderia ter uma lista externa e tratar ela na forma de arquivo, para evitar uma lista hardcoded no expert, como acredito ser o que está buscando evitar.

Mas acredito que a forma mais rápida e direta é utilizar os ativos na janela de observação de mercado, com as funções de informações de mercado em https://www.mql5.com/pt/docs/marketinformation

Sds.,

Rogério Figurelli 

Documentação sobre MQL5: Informações de Mercado
Documentação sobre MQL5: Informações de Mercado
  • www.mql5.com
Informações de Mercado - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Rogerio Figurelli:

Olá Samuel,

Você até poderia ter uma lista externa e tratar ela na forma de arquivo, para evitar uma lista hardcoded no expert, como acredito ser o que está buscando evitar.

Mas acredito que a forma mais rápida e direta é utilizar os ativos na janela de observação de mercado, com as funções de informações de mercado em https://www.mql5.com/pt/docs/marketinformation

Sds.,

Rogério Figurelli 

Obrigado, consegui fazer o loop dos ativos e a principio configurei um sinal sonoro com um print informando o ativo, testei também enviando um alerta por email. O próximo passo é entender como usar isso para destacar atrvés de cores na janela de observação os ativos satisfaz determinada condição.

Se tiver alguma dica sobre isso ajudaria bastante. Desde já agradeço pela atenção.

O que fiz até agora pra teste ficou assim:

//+------------------------------------------------------------------+
//|                                            Monitor de Ativos.mq5 |
//|                                           Samuel Manoel de Souza |
//|                               Samuelmanoeldesouza@outlook.com.br |
//+------------------------------------------------------------------+
#property copyright "Samuel Manoel de Souza"
#property link      "Samuelmanoeldesouza@outlook.com.br"
#property version   "1.00"
#include <Arrays\ArrayInt.mqh>      CArrayInt handle;

int total_ativos;
double buffer[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      total_ativos = SymbolsTotal(true);
      Print("Total de ativos: ",total_ativos);
      for(int i = 0; i<total_ativos;i++)
      {
         Print("Ativo",i," adiciondo: ",SymbolName(i,true));
      }
      for(int i = 0; i<total_ativos;i++)
      {
         handle.Insert(iCustom(SymbolName(i,true),_Period,"Downloads\\heiken_ashi_smoothed",MODE_EMA,15),i);
      }
      ArraySetAsSeries(buffer,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      for(int i = 0; i<total_ativos;i++)
      {
         IndicatorRelease(handle.At(i));
      }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//===TRECHO DE CÓDIGO DE ARTIGO EM no site MQL5
   // Do we have enough bars to work with
   if(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars
     {
      Alert("We have less than 60 bars, EA will now exit!!");
      return;
     }
// We will use the static Old_Time variable to serve the bar time.
// At each OnTick execution we will check the current bar time with the saved one.
// If the bar time isn't equal to the saved time, it indicates that we have a new tick.
   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// copying the last bar time to the element New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, the data has been copied successfully
     {
      if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
        {
         IsNewBar=true;   // if it isn't a first call, the new bar has appeared
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
         Old_Time=New_Time[0];            // saving bar time
        }
     }
   else
     {
      Alert("Error in copying historical times data, error =",GetLastError());
      ResetLastError();
      return;
     }

//--- EA should only check for new trade if we have a new bar
   if(IsNewBar==false)
     {
      return;
     }

//--- Do we have enough bars to work with
   int Mybars=Bars(_Symbol,_Period);
   if(Mybars<60) // if total bars is less than 60 bars
     {
      Alert("We have less than 60 bars, EA will now exit!!");
      return;
     }
//=========================================================================
  
      for(int i = 0; i<total_ativos;i++)
      {
         SymbolSelect(SymbolName(i,true),true);

         CopyBuffer(handle.At(i),4,0,3,buffer);
        
         if(buffer[1] == 0.0 && buffer[2] == 1.0)
         {
            Comment("------------>>COMPRA");
            sinal_compra(i);
            //fechar posição vendidas
            //Abrir posição compra
            //return;
         }
         else if(buffer[1] == 1.0 && buffer[2] == 0.0)
         {
            Comment("------------->>VENDA");
            sinal_venda(i);
            //fechar posições compradas
            //Abrir posição vendida
            //return;
         }
        
      }
  }
//+------------------------------------------------------------------+

void sinal_compra(int posicao_ativo)
{
   string symbol = SymbolName(posicao_ativo,true);
   PlaySound("expert.wav");
   //SendMail("Call de Metatrader5",SymbolInfoString(_Symbol,SYMBOL_DESCRIPTION));
   Print("Call de Compra MT5\n",symbol,SymbolInfoString(symbol,SYMBOL_DESCRIPTION),"\n",SymbolInfoDouble(symbol,SYMBOL_LAST));
}

void sinal_venda(int posicao_ativo)
{
   string symbol = SymbolName(posicao_ativo,true);
   PlaySound("timeout.wav");
   //SendMail("Call de Metatrader5",SymbolInfoString(_Symbol,SYMBOL_DESCRIPTION));
   Print("Call de Venda MT5\n",symbol,SymbolInfoString(symbol,SYMBOL_DESCRIPTION),"\n",SymbolInfoDouble(symbol,SYMBOL_LAST));
}
 
Samuel Manoel de Souza:

Obrigado, consegui fazer o loop dos ativos e a principio configurei um sinal sonoro com um print informando o ativo, testei também enviando um alerta por email. O próximo passo é entender como usar isso para destacar atrvés de cores na janela de observação os ativos satisfaz determinada condição.

Se tiver alguma dica sobre isso ajudaria bastante. Desde já agradeço pela atenção.

O que fiz até agora pra teste ficou assim:

Olá Samuel,

Ótima contribuição para todos esse compartilhamento do código fonte. 

Acredito que não é possível mudar a cor diretamente na janela de observação, mas você pode criar um painel para exibição no gráfico, como por exemplo o do artigo em https://www.mql5.com/pt/articles/641 com os ativos que deseja destacar.

Dessa forma, praticamente não existiriam mais limites de exibições para teus alarmes e análises. 

Sds.,

Rogério Figurelli 

Guia prático do MQL5: Propriedades de posição no painel de informações personalizado
Guia prático do MQL5: Propriedades de posição no painel de informações personalizado
  • 2014.03.20
  • Anatoli Kazharski
  • www.mql5.com
Agora criaremos um Consultor Especialista simples que obterá propriedades de posição no símbolo atual e as exibirá no painel personalizado de informações durante as negociações manuais. O painel de informações será criado usando objetos gráficos e a informação exibida será atualizada a cada ponto. Isto será muito mais conveniente do que ter que executar manualmente todas as vezes o script descrito no artigo anterior da série, chamado "Guia prático do MQL5: Obter propriedades de posição".
 
Rogerio Figurelli:

Olá Samuel,

Ótima contribuição para todos esse compartilhamento do código fonte. 

Acredito que não é possível mudar a cor diretamente na janela de observação, mas você pode criar um painel para exibição no gráfico, como por exemplo o do artigo em https://www.mql5.com/pt/articles/641 com os ativos que deseja destacar.

Dessa forma, praticamente não existiriam mais limites de exibições para teus alarmes e análises. 

Sds.,

Rogério Figurelli 

Obg. Vou dar uma olhada no artigo e ver se desenvolvo esse painel. Thanks.