Ativos do "Observações de Mercado" não carregam num EA

 

Um salve a todos os amigos do Fórum!

Estou criando um EA para verificar determinadas condições e quero que seja realizada APENAS NOS ATIVOS da lista do  "Observações de Mercado"  ou "Market Watch",

porém quando coloco "true" em SymbolsTotal aparece apenas o PRIMEIRO ATIVO da lista geral de ativos da corretora e

quando coloco "false" aparecem TODOS os ativos da corretora!!!

Então volto a lembrar aqui, quero que seja realizada APENAS NOS ATIVOS da lista do "Observações de Mercado" ou "Market Watch"


Testes já realizados:

01 - Já coloquei uma função para verificar se o ativo está selecionado na referida lista de Observações de Mercado, já desativei...

02 - Já testei em outra corretora 

03 - Já testei em conta real

04 - Já testei em conta demo

É sempre os mesmos resultados!!!!


Segue abaixo o codigo (apenas dessa verificação para facilitar)

//+------------------------------------------------------------------+
//|                                                          OM.mq5 |
//|                        Copyright 2023,                          |
//|                                                                 |
//+------------------------------------------------------------------+
#property  version           "1.00"
#property  strict

//+------------------------------------------------------------------+
//| Função de inicialização do EA                                     |
//+------------------------------------------------------------------+
int OnInit()
{
    // Obter o número total de símbolos disponíveis
    int totalSymbols = SymbolsTotal(false);

    // Verificar se há símbolos disponíveis
    if (totalSymbols > 0)
    {
        // Exibir os nomes dos símbolos presentes na lista de observação de mercado
        for (int i = 0; i < totalSymbols; i++)
        {
            string symbolName = SymbolName(i, false);

            //// Verificar se o símbolo está na lista de observação
            //if (IsSymbolSelected(symbolName))
            //{
                Print("Nome do ativo ", i + 1, ": ", symbolName);
            //}
        }
    }
    else
    {
        Print("Nenhum símbolo disponível");
    }

    // Retornar o código de inicialização bem-sucedido
    return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| Função de desinicialização do EA                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // Realizar quaisquer ações de desinicialização necessárias
}

//+------------------------------------------------------------------+
//| Função principal do EA                                            |
//+------------------------------------------------------------------+
void OnTick()
{
    // Implementação do EA (deixar vazio caso não seja necessário)
}

////+------------------------------------------------------------------+
////| Função para verificar se o símbolo está presente na lista de      |
////| observação de mercado                                             |
////+------------------------------------------------------------------+
//bool IsSymbolSelected(const string symbol)
//{
//    MqlTick tick;
//    if (SymbolInfoTick(symbol, tick))
//    {
//        return true;
//    }
//    else
//    {
//        return false;
//    }
//}


Qual o veredicto dos amigos?

Obrigado Deus abençoe a todos!

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

Um salve a todos os amigos do Fórum!

Estou criando um EA para verificar determinadas condições e quero que essa verificação seja realizada, não apenas no grafico atual, mas em TODOS os ativos da lista do  "Observações de Mercado",

porém quando coloco "true" em SymbolsTotal aparece apenas o primeiro ativo da lista geral de ativos da corretora, apenas o primeiro!!

Quando coloco false aparecem TODOS os ativos da corretora e não apenas os da lista de Observações de Mercado  

01 - Já coloquei uma função para verificar se o ativo está selecionado na referida lista de Observações de Mercado, já desativei...

02 - Já testei em outra corretora 

03 - Já testei em conta real

É sempre os mesmos resultados!!!!


Segue abaixo o codigo (apenas dessa verificação para facilitar) 


Qual o veredicto dos amigos?

Obrigado Deus abençoe a todos!

Eu não entendi só uma coisa há uma necessidade de passar por toda a lista de ativos e descobrir quais estão no market watch? Porque não passar SOMENTE pela lista dos que estão no market watch? Se não houver necessidade de passar por TODOS os ativos, voce pode só trocar os false por true no seu codigo que vai fazer a passagem SOMENTE pelos ativos do market watch. Lembrando que tu precisa alterar tanto o SymbolsTotal e o SymbolName para eles trabalharem em cima da mesma "lista".

Pelo seu comentario, lendo novamente, parece que voce colocou true no SymbolsTotal e esqueceu o do SymbolName.

 
Ricardo Rodrigues Lucca #:

Eu não entendi só uma coisa há uma necessidade de passar por toda a lista de ativos e descobrir quais estão no market watch? Porque não passar SOMENTE pela lista dos que estão no market watch? Se não houver necessidade de passar por TODOS os ativos, voce pode só trocar os false por true no seu codigo que vai fazer a passagem SOMENTE pelos ativos do market watch. Lembrando que tu precisa alterar tanto o SymbolsTotal e o SymbolName para eles trabalharem em cima da mesma "lista".

Pelo seu comentario, lendo novamente, parece que voce colocou true no SymbolsTotal e esqueceu o do SymbolName.

Exatamente isso que eu quero!

Que apenas os ativos da lista de Observação de Mercado ou Market Watch sejam analisados por essa EA!

Mesmo que eu modifique para true ou false nao acontece da forma esperada...


Sobre o Symbolname ele está dentro do loop e tambem já alterei pra true ou false e não adiantou 

        for (int i = 0; i < totalSymbols; i++)
        {
            string symbolName = SymbolName(i, false);

            Print("Nome do ativo ", i + 1, ": ", symbolName);
        }
        
 
Alexandre Molina #:

Exatamente isso que eu quero!

Que apenas os ativos da lista de Observação de Mercado ou Market Watch sejam analisados por essa EA!

Mesmo que eu modifique para true ou false nao acontece da forma esperada...


Sobre o Symbolname ele está dentro do loop e tambem já alterei pra true ou false e não adiantou 

Voce esta fazendo algo errado, como eu disse não é um ou outro tem que colocar o true em ambos. Veja o codigo abaixo que aqui funciona.

#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   int total = SymbolsTotal(true);
//---
   for (int i=0; i<total; i++)
      {
       string name = SymbolName(i, true);
       PrintFormat("%d: %s", i, name);
      }
//---
   return(INIT_FAILED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
 
Ricardo Rodrigues Lucca #:

Voce esta fazendo algo errado, como eu disse não é um ou outro tem que colocar o true em ambos. Veja o codigo abaixo que aqui funciona.

Então eu fiz assim e deu certo... Tbm li na documentação que era o certo True e True mas funcionou assim:

// Função para exibir os instrumentos ativos e seus preços de venda
void ExibirInstrumentosAtivos()
{
   // Obter o total de símbolos disponíveis
   int totalSymbols = SymbolsTotal(true);

   // Percorrer todos os símbolos
   for (int i = 0; i < totalSymbols; i++)
   {
      // Obter o nome do símbolo
      string symbolName = SymbolName(i, false);

      // Verificar se o símbolo está selecionado na janela do Market Watch
      bool symbolSelected = SymbolInfoInteger(symbolName, SYMBOL_VISIBLE);

      // Se o símbolo estiver selecionado, obter o preço de venda (ask) do símbolo
      if (symbolSelected)
      {
         double ask = SymbolInfoDouble(symbolName, SYMBOL_ASK);
         Print("Símbolo: ", symbolName, " Preço de Venda:", DoubleToString(ask, _Digits));
          if (i == totalSymbols - 1)
          Print("");
      }
      
   }
}

// Função de inicialização do Expert Advisor
int OnInit()
{
   // Chamar a função para exibir os instrumentos ativos e seus preços de venda
   ExibirInstrumentosAtivos();

   return INIT_SUCCEEDED;
}

// Função de evento tick do Expert Advisor
void OnTick()
{
   // Atualizar os preços a cada tick
   ExibirInstrumentosAtivos();
}

Rsrsrsrs só sei que pro teste que fiz serviu kkkkkk

mas muito obrigado pessoal pela ajuda, Deus abençoe vcs!!!!


Arquivos anexados:
teste_OM.jpg  182 kb