Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 128

 
Alexey Kozitsyn:
Y a-t-il des indicateurs/conseillers sur les graphiques ?
Pas de conseillers, seulement des indicateurs standards du terminal
 
Sergey Parkin:
Pas de conseillers experts, uniquement des indicateurs standard du terminal.
Par exemple, j'ai ouvert le graphique, tracé une ligne horizontale, fermé le terminal, ouvert le terminal, le graphique (ouvert pour tracer la ligne) est en place, mais la ligne elle-même n'est pas là ?
 
Alexey Kozitsyn:
Par exemple, vous ouvrez le graphique, tracez une ligne horizontale, fermez le terminal, ouvrez le terminal, le graphique (ouvert pour tracer la ligne) est en place, mais la ligne elle-même a disparu ?
exactement comme ça
 
Sergey Parkin:
Elle l'est.

C'est mystique, ça ne devrait pas l'être...

 

Bonjour, pourriez-vous me dire comment je peux vérifier par programme si un certain indicateur personnalisé existe ou non dans le dossier MQL4\Indicators par son nom ?

J'en ai besoin pour vérifier si la fonction iCustom a trouvé et fonctionne avec un indicateur.

Vérifier si l'indicateur avec ce nom existe (je ne sais pas comment)

if( !=Indicatorname)//Bien, ou un autre "signal" qu'il n'y a pas d'indicateur avec ce nom, comme -1, false ...

{ici j'écris quelque chose :)}

else //recevoir la valeur de l'indicateur

{

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

}

Je soupçonne que le sujet se situe dans le plan des "Opérations sur les fichiers sans contraintes" ( je peux me tromper), mais je n'ai jamais rencontré les bibliothèques système qui sont habituellement utilisées dans "ce sujet"....

Quoi qu'il en soit, j'ai besoin de conseils..., peut-être y a-t-il quelque chose de déjà prêt, ou du moins - où "creuser"...

Merci

 
Ilya Melamed:

Bonjour, pourriez-vous me dire comment je peux vérifier par programme si un certain indicateur personnalisé existe ou non dans le dossier MQL4\Indicators par son nom ?

J'en ai besoin pour vérifier si la fonction iCustom a trouvé et fonctionne avec un indicateur.

Vérifier si l'indicateur avec ce nom existe (je ne sais pas comment)

if( !=Indicatorname)//Bien, ou un autre "signal" qu'il n'y a pas d'indicateur avec ce nom, comme -1, false ...

{ici j'écris quelque chose :)}

else //recevoir la valeur de l'indicateur

{

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

}

Je soupçonne que le sujet se situe dans le plan des "Opérations sur les fichiers sans contraintes" ( je peux me tromper), mais je n'ai jamais rencontré les bibliothèques système, qui sont habituellement utilisées dans "ce sujet"....

Quoi qu'il en soit, j'ai besoin de conseils..., peut-être y a-t-il quelque chose de déjà prêt, ou du moins - où "creuser"...

Merci

mieux vaut connecter l'indicateur comme une ressource, alors vous n'aurez pas besoin de le chercher, il sera toujours là.
 
Sergey Gritsay:
vous feriez mieux de connecter l'indicateur comme une ressource, alors vous n'aurez pas besoin de le chercher, il sera toujours là
Les indicateurs seront connectés par l'utilisateur, c'est pourquoi nous avons besoin d'une vérification, si l'utilisateur a fait une erreur dans le nom de l'indicateur, iCustom retournera juste des zéros comme information, sans savoir que l'indicateur n'existe tout simplement pas.
 
Ilya Melamed:
Les indicateurs seront connectés par l'utilisateur. C'est pourquoi nous avons besoin d'une vérification que si l'utilisateur a fait une erreur dans le nom de l'indicateur, iCustom retournera juste des zéros comme information, sans comprendre que l'indicateur n'existe tout simplement pas.

Les opérations sur les fichiers pourraient vous aider, voici un exemple tiré de la documentation sur la recherche de fichiers

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

alors les opérations sur les fichiers pourraient vous aider, voici un exemple tiré de la documentation sur la recherche de fichiers

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

....

Les fichiers ne peuvent pas être en dehors de la sandbox des fichiers. Le dossier Indicateurs n'en fait pas partie non plus.
 
Sergey Gritsay:

alors les opérations sur les fichiers pourraient vous aider, voici un exemple tiré de la documentation sur la recherche de fichiers


  }

....

Si cela ne fonctionne pas, vous ne pouvez pas accéder au dossier des indicateurs, essayez de l'ouvrir via win api si cela ne fonctionne pas.

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

...

Raison: