MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 128

 
Alexey Kozitsyn:
チャートにインジケーターやアドバイザーを表示することはできますか?
アドバイザーなし、端末からの標準インジケータのみ
 
Sergey Parkin:
Expert Advisorはなく、ターミナルからの標準的なインジケータのみ
すなわち、チャートを開き、水平線を プロットし、ターミナルを閉じ、ターミナルを開くと、チャート(線をプロットするために開いた)はあるが、線そのものがないのでは?
 
Alexey Kozitsyn:
すなわち、チャートを開き、水平線を 引き、ターミナルを閉じ、ターミナルを開くと、チャート(線を引くために開いた)はあるが、線そのものが消えているのでは?
その通り
 
Sergey Parkin:
そうなんです。

神秘的で、あってはならないことだが......。

 

こんにちは、MQL4Indicatorsフォルダーにあるカスタムインジケータが 存在するかしないかを、その名前でプログラム的に確認する方法を教えていただけないでしょうか。

iCustom関数がインジケータを発見して動作しているかどうかをチェックする必要があります。

この名前のインジケータが存在するか確認する(方法がわからない)

if( !=Indicatorname)//Well, or another "signal" that is no indicator with this name, like -1, false ....

{ここに何か書く :)

else //インジケータから値を受け取る

{

iCustom(...インジケータ名...)

}

この話題は「制約のないファイル操作」という平面にあるのではないかと思うのですが(間違っているかも)、「この話題」で普通に使われているシステムライブラリには出会ったことがありません...。

とにかく、何かアドバイスが欲しいのですが、もしかしたら、すでに出来上がったものがあるかもしれませんし、少なくとも、どこを "掘れば "いいのかもわかりません。

感謝

 
Ilya Melamed:

こんにちは、MQL4Indicatorsフォルダーにあるカスタムインジケータが 存在するかしないかを、その名前でプログラム的に確認する方法を教えていただけないでしょうか。

iCustom関数がインジケータを発見して動作しているかどうかをチェックする必要があります。

この名前のインジケータが存在するか確認する(方法がわからない)

if( !=Indicatorname)//Well, or another "signal" that is no indicator with this name, like -1, false ....

{ここに何か書く :)

else //インジケータから値を受け取る

{

iCustom(...インジケータ名...)

}

このトピックは「制約のないファイル操作」の平面にあるのではないかと思うのですが(間違っているかも)、「このトピック」で通常使われるシステムライブラリに出会ったことがありません...。

とにかく、何かアドバイスが欲しいのですが、もしかしたら、すでに出来上がったものがあるかもしれませんし、少なくとも、どこを "掘れば "いいのかもわかりません。

感謝

インジケータをリソースとして接続すれば、探す必要はなく、常にそこにある。
 
Sergey Gritsay:
インジケータをリソースとして接続すれば、探す必要がなく、常にそこにあります。
インディケータはユーザーによって接続されます。 そのため、ユーザーがインディケータ名を間違えた場合、iCustomは情報としてゼロだけを返し、そのインディケータが単に存在しないことを知らないというチェックが必要です。
 
Ilya Melamed:
インジケータはユーザによって接続されます。 そのため、ユーザがインジケータ名を間違えた場合、iCustomはそのインジケータが単に存在しないことを理解せずに、情報としてゼロだけを返すというチェック機能が必要です。

ファイル操作に役立つかもしれません。以下は、ファイル検索ドキュメントからの例です。

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

の場合、ファイル操作が役に立つかもしれません。以下は、ファイル検索ドキュメントの例です。

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

....

ファイルは、ファイルサンドボックスの外には出せない。Indicators フォルダも含まれません。
 
Sergey Gritsay:

の場合、ファイル操作が役に立つかもしれません。以下は、ファイル検索ドキュメントの例です。


  }

....

うまくいかない場合は、indicatorsフォルダに入れないので、うまくいかない場合はwin apiで開いてみてください

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

...