Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 128

 
Alexey Kozitsyn:
Ci sono indicatori/consigli sui grafici?
Nessun consigliere, solo indicatori standard dal terminale
 
Sergey Parkin:
Nessun Expert Advisors, solo indicatori standard dal terminale
Cioè: aperto il grafico, tracciata una linea orizzontale, chiuso il terminale, aperto il terminale, il grafico (aperto per tracciare la linea) è a posto, ma la linea stessa non c'è?
 
Alexey Kozitsyn:
Cioè si apre il grafico, si disegna una linea orizzontale, si chiude il terminale, si apre il terminale, il grafico (aperto per disegnare la linea) è a posto, ma la linea stessa è sparita?
esattamente così
 
Sergey Parkin:
Lo è.

È mistico, non dovrebbe esserlo...

 

Ciao, potresti dirmi come posso controllare programmaticamente se un certo indicatore personalizzato esiste o non esiste nella cartella MQL4\Indicators in base al suo nome?

Mi serve per controllare se la funzione iCustom ha trovato e funziona con un indicatore.

Controllare se l'indicatore con questo nome esiste (non so come)

if( !=Indicatorname)//Bene, o un altro "segnale" che non esiste un indicatore con questo nome, come -1, false ...

{qui scrivo qualcosa :)}

else //ricevere il valore dall'indicatore

{

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

}

Ho il sospetto che l'argomento si trovi nel piano delle "Operazioni sui file senza vincoli" (potrei sbagliarmi), ma non ho mai incontrato le librerie di sistema che si usano di solito in "questo argomento"...

Comunque, ho bisogno di qualche consiglio..., forse c'è già qualcosa di pronto, o almeno - dove "scavare"

Grazie

 
Ilya Melamed:

Ciao, potresti dirmi come posso controllare programmaticamente se un certo indicatore personalizzato esiste o non esiste nella cartella MQL4\Indicators in base al suo nome?

Mi serve per controllare se la funzione iCustom ha trovato e funziona con un indicatore.

Controllare se l'indicatore con questo nome esiste (non so come)

if( !=Indicatorname)//Bene, o un altro "segnale" che non esiste un indicatore con questo nome, come -1, false ...

{qui scrivo qualcosa :)}

else //ricevere il valore dall'indicatore

{

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

}

Ho il sospetto che l'argomento si trovi nel piano delle "Operazioni sui file senza vincoli" (potrei sbagliarmi), ma non ho mai incontrato le librerie di sistema, che di solito sono utilizzate in "questo argomento"...

Comunque, ho bisogno di qualche consiglio..., forse c'è già qualcosa di pronto, o almeno - dove "scavare"

Grazie

meglio collegare l'indicatore come risorsa, allora non avrete bisogno di cercarlo, sarà sempre lì
 
Sergey Gritsay:
è meglio collegare l'indicatore come risorsa, allora non avrete bisogno di cercarlo, sarà sempre lì
Gli indicatori saranno collegati dall'utente. Ecco perché abbiamo bisogno di un controllo, se l'utente ha fatto un errore nel nome dell'indicatore, iCustom restituirà solo zeri come informazione, senza sapere che l'indicatore semplicemente non esiste.
 
Ilya Melamed:
Gli indicatori saranno collegati dall'utente. Ecco perché abbiamo bisogno di un controllo che se l'utente ha fatto un errore nel nome dell'indicatore, iCustom restituirà solo degli zeri come informazione, senza capire che l'indicatore semplicemente non esiste.

le operazioni sui file potrebbero aiutarvi, ecco un esempio dalla documentazione sulla ricerca dei file

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

allora le operazioni sui file potrebbero aiutarti, ecco un esempio dalla documentazione sulla ricerca dei file

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

....

I file non possono essere al di fuori della sandbox. Anche la cartella Indicators non ne fa parte.
 
Sergey Gritsay:

allora le operazioni sui file potrebbero aiutarti, ecco un esempio dalla documentazione sulla ricerca dei file


  }

....

Se non funziona, non puoi entrare nella cartella degli indicatori, prova ad aprirla tramite win api se non funziona

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

...