Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 128

 
Alexey Kozitsyn:
¿Hay indicadores/asesores en los gráficos?
No hay asesores, sólo indicadores estándar del terminal
 
Sergey Parkin:
No hay Asesores Expertos, sólo indicadores estándar del terminal
Es decir, he abierto el gráfico, he trazado una línea horizontal, he cerrado el terminal, he abierto el terminal, el gráfico (abierto para trazar la línea) está en su sitio, pero la línea en sí no está.
 
Alexey Kozitsyn:
Es decir, abres el gráfico, dibujas una línea horizontal, cierras el terminal, abres el terminal, el gráfico (abierto para dibujar la línea) está en su sitio, pero la propia línea ha desaparecido?
exactamente así
 
Sergey Parkin:
Lo es.

Es místico, no debería serlo...

 

Hola, ¿podríais decirme cómo puedo comprobar mediante programación si un determinado indicador personalizado existe o no existe en la carpeta MQL4\Indicators por su nombre?

Lo necesito para comprobar si la función iCustom ha encontrado y funciona con un indicador.

Comprueba si el indicador con este nombre existe (no sé cómo)

if( !=Indicatorname)//Bueno, u otra "señal" de que no hay ningún indicador con este nombre, como -1, false ...

{aquí escribo algo :)}

else //recibir el valor del indicador

{

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

}

Sospecho que el tema se sitúa en el plano de las "Operaciones de archivos sin restricciones" ( podría equivocarme), pero nunca me he encontrado con las librerías del sistema que se suelen utilizar en "este tema"...

De todos modos, necesito algún consejo..., tal vez hay algo ya hecho, o al menos - donde "cavar"

Gracias

 
Ilya Melamed:

Hola, ¿podríais decirme cómo puedo comprobar mediante programación si un determinado indicador personalizado existe o no existe en la carpeta MQL4\Indicators por su nombre?

Lo necesito para comprobar si la función iCustom ha encontrado y funciona con un indicador.

Comprueba si el indicador con este nombre existe (no sé cómo)

if( !=Indicatorname)//Bueno, u otra "señal" de que no hay ningún indicador con este nombre, como -1, false ...

{aquí escribo algo :)}

else //recibir el valor del indicador

{

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

}

Sospecho que el tema se sitúa en el plano de las "Operaciones de archivos sin restricciones" ( podría equivocarme), pero nunca me he encontrado con las bibliotecas del sistema, que se suelen utilizar en "este tema"...

De todos modos, necesito algún consejo..., tal vez hay algo ya hecho, o al menos - donde "cavar"

Gracias

mejor conecte el indicador como un recurso, entonces no necesitará buscarlo, siempre estará ahí
 
Sergey Gritsay:
es mejor que conectes el indicador como un recurso, entonces no necesitarás buscarlo, siempre estará ahí
Los indicadores serán conectados por el usuario. Por eso necesitamos una comprobación, si el usuario se ha equivocado en el nombre del indicador, iCustom devolverá sólo ceros como información, sin saber que el indicador simplemente no existe.
 
Ilya Melamed:
Los indicadores serán conectados por el usuario. Por eso necesitamos una comprobación de que si el usuario se ha equivocado en el nombre del indicador, iCustom devolverá sólo ceros como información, sin entender que el indicador simplemente no existe.

Las operaciones con archivos pueden ayudarle, aquí hay un ejemplo de la documentación de búsqueda de archivos

//--- покажем окно входных параметров при запуске скрипта
#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:

entonces las operaciones de archivo podrían ayudarte, aquí hay un ejemplo de la documentación de búsqueda de archivos

//--- покажем окно входных параметров при запуске скрипта
#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]);
     }
  }

....

Los archivos no pueden estar fuera de la caja de arena de archivos. La carpeta de Indicadores tampoco forma parte de ella.
 
Sergey Gritsay:

entonces las operaciones de archivo podrían ayudarte, aquí hay un ejemplo de la documentación de búsqueda de archivos


  }

....

Si no funciona, no puedes entrar en la carpeta de indicadores, intenta abrirla a través de win api si no funciona

//--- покажем окно входных параметров при запуске скрипта
#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ón de la queja: