Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 128

 
Alexey Kozitsyn:
Gibt es irgendwelche Indikatoren/Ratgeber auf den Charts?
Keine Berater, nur Standardanzeigen des Terminals
 
Sergey Parkin:
Keine Expert Advisors, nur Standardindikatoren aus dem Terminal
D.h. ich öffne das Diagramm, zeichne eine horizontale Linie, schließe das Terminal, öffne das Terminal, das Diagramm (geöffnet zum Zeichnen der Linie) ist da, aber die Linie selbst ist nicht da?
 
Alexey Kozitsyn:
D.h. Sie öffnen das Diagramm, zeichnen eine horizontale Linie, schließen das Terminal, öffnen das Terminal, das Diagramm (geöffnet zum Zeichnen der Linie) ist da, aber die Linie selbst ist weg?
genau so
 
Sergey Parkin:
Das ist es.

Es ist mystisch, das sollte es nicht sein...

 

Hallo, könnten Sie mir bitte sagen, wie ich programmatisch überprüfen kann, ob ein bestimmter benutzerdefinierter Indikator im Ordner MQL4\Indicators anhand seines Namens existiert oder nicht existiert?

Ich muss prüfen, ob die iCustom-Funktion einen Indikator gefunden hat und mit ihm arbeitet.

Prüfen Sie, ob der Indikator mit diesem Namen existiert (ich weiß nicht, wie)

if( !=Indikatorname)//Nun, oder ein anderes "Signal", dass es keinen Indikator mit diesem Namen gibt, wie -1, false ...

{hier schreibe ich etwas :)}

sonst //Wert vom Indikator empfangen

{

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

}

Ich vermute, dass das Thema im Bereich "Datei-Operationen ohne Einschränkungen" liegt (ich könnte mich irren), aber ich bin noch nie auf die Systembibliotheken gestoßen, die normalerweise in "diesem Thema" verwendet werden...

Wie auch immer, brauchen einige Ratschläge ..., vielleicht gibt es etwas fertige bereits, oder zumindest - wo zu "graben"

Danke

 
Ilya Melamed:

Hallo, könnten Sie mir bitte sagen, wie ich programmatisch überprüfen kann, ob ein bestimmter benutzerdefinierter Indikator im Ordner MQL4\Indicators anhand seines Namens existiert oder nicht existiert?

Ich muss prüfen, ob die iCustom-Funktion einen Indikator gefunden hat und mit ihm arbeitet.

Prüfen Sie, ob der Indikator mit diesem Namen existiert (ich weiß nicht, wie)

if( !=Indikatorname)//Nun, oder ein anderes "Signal", dass es keinen Indikator mit diesem Namen gibt, wie -1, false ...

{hier schreibe ich etwas :)}

sonst //Wert vom Indikator empfangen

{

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

}

Ich vermute, dass das Thema im Bereich "Datei-Operationen ohne Einschränkungen" liegt (ich könnte mich irren), aber ich bin noch nie auf die Systembibliotheken gestoßen, die normalerweise in "diesem Thema" verwendet werden...

Wie auch immer, brauchen einige Ratschläge ..., vielleicht gibt es etwas fertige bereits, oder zumindest - wo zu "graben"

Danke

Verbinden Sie den Indikator besser als Ressource, dann brauchen Sie ihn nicht zu suchen, er ist immer da.
 
Sergey Gritsay:
Sie sollten den Indikator besser als Ressource einbinden, dann brauchen Sie nicht danach zu suchen, er ist immer da.
Indikatoren werden vom Benutzer verknüpft. Deshalb brauchen wir eine Überprüfung, ob der Benutzer einen Fehler im Indikatornamen gemacht hat, iCustom wird nur Nullen als Information zurückgeben, ohne zu wissen, dass der Indikator einfach nicht existiert.
 
Ilya Melamed:
Indikatoren werden vom Benutzer verknüpft. Deshalb brauchen wir eine Kontrolle, dass, wenn der Benutzer einen Fehler im Indikatornamen gemacht hat, iCustom nur Nullen als Information zurückgibt, ohne zu verstehen, dass der Indikator einfach nicht existiert.

Datei-Operationen helfen Ihnen vielleicht weiter, hier ein Beispiel aus der Dokumentation zur Dateisuche

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

dann könnten Datei-Operationen Ihnen helfen, hier ein Beispiel aus der Dokumentation zur Dateisuche

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

....

Dateien können sich nicht außerhalb der Dateisandbox befinden. Auch der Ordner Indikatoren gehört nicht dazu.
 
Sergey Gritsay:

dann könnten Datei-Operationen Ihnen helfen, hier ein Beispiel aus der Dokumentation zur Dateisuche


  }

....

Wenn das nicht funktioniert, können Sie nicht auf den Indikatorenordner zugreifen. Versuchen Sie, ihn über die Win-Api zu öffnen, wenn das nicht funktioniert.

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

...

Grund der Beschwerde: