Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 128

 
Alexey Kozitsyn:
Há algum indicador/conselheiro nos gráficos?
Sem assessores, apenas indicadores padrão do terminal
 
Sergey Parkin:
Sem conselheiros especializados, apenas indicadores padrão do terminal
Ou seja, abriu a carta, traçou uma linha horizontal, fechou o terminal, abriu o terminal, a carta (aberta para traçar a linha) está no lugar, mas a linha em si não está lá?
 
Alexey Kozitsyn:
Ou seja, você abre a carta, desenha uma linha horizontal, fecha o terminal, abre o terminal, a carta (aberta para desenhar a linha) está no lugar, mas a linha em si desapareceu?
exatamente assim
 
Sergey Parkin:
E é.

É místico, não deveria ser...

 

Olá, você poderia me dizer como posso verificar programmaticamente se um certo indicador personalizado existe ou não na pasta MQL4\Indicators por seu nome?

Preciso dele para verificar se a função iCustom encontrou e funciona com um indicador.

Verifique se o indicador com este nome existe (não sei como)

if( !=Indicatorname)/Well, ou outro "sinal" de que não há nenhum indicador com este nome, como -1, falso ...

{aonde eu escrevo algo :)}

senão //receber valor do indicador

{

iCustom(....Indicatorname....)

}

Suspeito que o tópico está no plano das "Operações de arquivo sem restrições" ( poderia estar errado), mas nunca encontrei as bibliotecas do sistema, que geralmente são usadas neste "tópico"...

De qualquer forma, preciso de alguns conselhos..., talvez já exista algo pronto, ou pelo menos - onde "cavar".

Obrigado

 
Ilya Melamed:

Olá, você poderia me dizer como posso verificar programmaticamente se um certo indicador personalizado existe ou não na pasta MQL4\Indicators por seu nome?

Preciso dele para verificar se a função iCustom encontrou e funciona com um indicador.

Verifique se o indicador com este nome existe (não sei como)

if( !=Indicatorname)/Well, ou outro "sinal" de que não há nenhum indicador com este nome, como -1, falso ...

{aonde eu escrevo algo :)}

senão //receber valor do indicador

{

iCustom(....Indicatorname....)

}

Suspeito que o tópico está no plano das "Operações de arquivo sem restrições" ( poderia estar errado), mas nunca encontrei as bibliotecas do sistema, que geralmente são usadas neste "tópico"...

De qualquer forma, preciso de alguns conselhos..., talvez já exista algo pronto, ou pelo menos - onde "cavar".

Obrigado

conectar melhor o indicador como um recurso, então você não precisará procurá-lo, ele sempre estará lá
 
Sergey Gritsay:
é melhor conectar o indicador como um recurso, então você não precisará procurá-lo, ele sempre estará lá
Os indicadores serão conectados pelo usuário. É por isso que precisamos de uma verificação, se o usuário cometeu um erro no nome do indicador, iCustom retornará apenas zeros como informação, sem saber que o indicador simplesmente não existe.
 
Ilya Melamed:
Os indicadores serão conectados pelo usuário. É por isso que precisamos verificar que se o usuário cometeu um erro no nome do indicador, iCustom retornará apenas zeros como informação, sem entender que o indicador simplesmente não existe.

operações de arquivos podem ajudá-lo, aqui está um exemplo da documentação de busca de arquivos

//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- дата для старых файлов
input datetime InpFilesDate=D'2013.01.01 00:00';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string   file_name;      // переменная для хранения имен файлов
   string   filter="*.txt"; // фильтр для поиска файлов
   datetime create_date;    // дата создания файла
   string   files[];        // список имен файлов
   int      def_size=25;    // размер массива по умолчанию
   int      size=0;         // количество файлов
//--- выдели память для массива
   ArrayResize(files,def_size);
//--- получение хэндла поиска в корне локальной папки
   long search_handle=FileFindFirst(filter,file_name);
//--- проверим, успешно ли отработала функция FileFindFirst()
   if(search_handle!=INVALID_HANDLE)
     {
      //--- в цикле перебираем файлы
      do
        {
         files[size]=file_name;
         //--- увеличим размер массива
         size++;
         if(size==def_size)
           {
            def_size+=25;
            ArrayResize(files,def_size);
           }
         //--- сбрасываем значение ошибки
         ResetLastError();
         //--- получим дату создания файла
         create_date=(datetime)FileGetInteger(file_name,FILE_CREATE_DATE,false);
         //--- проверим, старый ли файл
         if(create_date<InpFilesDate)
           {
            PrintFormat("Файл %s удален!",file_name);
            //--- удаляем старый файл
            FileDelete(file_name);
           }
        }
      while(FileFindNext(search_handle,file_name));
      //--- закрываем хэндл поиска
      FileFindClose(search_handle);
     }
   else
     {
      Print("Files not found!");
      return;
     }
//--- проверим какие из файлов остались
   PrintFormat("Результаты:");
   for(int i=0;i<size;i++)
     {
      if(FileIsExist(files[i]))
         PrintFormat("Файл %s существует!",files[i]);
      else
         PrintFormat("Файл %s удален!",files[i]);
     }
  }

....

 
Sergey Gritsay:

então as operações de arquivo podem ajudá-lo, aqui está um exemplo da documentação da pesquisa de arquivo

//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- дата для старых файлов
input datetime InpFilesDate=D'2013.01.01 00:00';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string   file_name;      // переменная для хранения имен файлов
   string   filter="*.txt"; // фильтр для поиска файлов
   datetime create_date;    // дата создания файла
   string   files[];        // список имен файлов
   int      def_size=25;    // размер массива по умолчанию
   int      size=0;         // количество файлов
//--- выдели память для массива
   ArrayResize(files,def_size);
//--- получение хэндла поиска в корне локальной папки
   long search_handle=FileFindFirst(filter,file_name);
//--- проверим, успешно ли отработала функция FileFindFirst()
   if(search_handle!=INVALID_HANDLE)
     {
      //--- в цикле перебираем файлы
      do
        {
         files[size]=file_name;
         //--- увеличим размер массива
         size++;
         if(size==def_size)
           {
            def_size+=25;
            ArrayResize(files,def_size);
           }
         //--- сбрасываем значение ошибки
         ResetLastError();
         //--- получим дату создания файла
         create_date=(datetime)FileGetInteger(file_name,FILE_CREATE_DATE,false);
         //--- проверим, старый ли файл
         if(create_date<InpFilesDate)
           {
            PrintFormat("Файл %s удален!",file_name);
            //--- удаляем старый файл
            FileDelete(file_name);
           }
        }
      while(FileFindNext(search_handle,file_name));
      //--- закрываем хэндл поиска
      FileFindClose(search_handle);
     }
   else
     {
      Print("Files not found!");
      return;
     }
//--- проверим какие из файлов остались
   PrintFormat("Результаты:");
   for(int i=0;i<size;i++)
     {
      if(FileIsExist(files[i]))
         PrintFormat("Файл %s существует!",files[i]);
      else
         PrintFormat("Файл %s удален!",files[i]);
     }
  }

....

Os arquivos não podem estar fora da caixa de areia do arquivo. A pasta Indicadores também não faz parte dela.
 
Sergey Gritsay:

então as operações de arquivo podem ajudá-lo, aqui está um exemplo da documentação da pesquisa de arquivo


  }

....

Se não funcionar, você não pode entrar na pasta de indicadores, tente abri-la via win api se ela não funcionar

//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- фильтр
input string InpFilter="Dir1\\*";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string file_name;
   string int_dir="";
   int    i=1,pos=0,last_pos=-1;
//--- ищем последний бэк-слеш
   while(!IsStopped())
     {
      pos=StringFind(InpFilter,"\\",pos+1);
      if(pos>=0)
         last_pos=pos;
      else
         break;
     }
//--- в фильтре присутствует имя папки
   if(last_pos>=0)
      int_dir=StringSubstr(InpFilter,0,last_pos+1);
//--- получение хэндла поиска в корне локальной папки
   long search_handle=FileFindFirst(InpFilter,file_name);
//--- проверим, успешно ли отработала функция FileFindFirst()
   if(search_handle!=INVALID_HANDLE)
     {
      //--- в цикле проверим являются ли переданные строки именами файлов или директорий
      do
        {
         ResetLastError();
         //--- если это файл, то функция вернет true, а если директория, то функция генерирует ошибку ERR_FILE_IS_DIRECTORY
         FileIsExist(int_dir+file_name);
         PrintFormat("%d : %s name = %s",i,GetLastError()==ERR_FILE_IS_DIRECTORY ? "Directory" : "File",file_name);
         i++;
        }
      while(FileFindNext(search_handle,file_name));
      //--- закрываем хэндл поиска
      FileFindClose(search_handle);
     }
   else
      Print("Files not found!");
  }

...

Razão: