新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 128

 
Alexey Kozitsyn:
图表上是否有任何指标/顾问?
没有顾问,只有来自终端的标准指标
 
Sergey Parkin:
没有专家顾问,只有终端的标准指标
即:打开图表,绘制了一条水平线,关闭终端,打开终端,图表(为绘制水平线而打开)已经到位,但水平线本身却不存在?
 
Alexey Kozitsyn:
即:你打开图表,画了一条水平线,关闭终端,打开终端,图表(为画线而打开)在原位,但线本身却不见了?
正是如此
 
Sergey Parkin:
它是。

它是神秘的,它不应该是...

 

你好,请你告诉我,我如何通过程序化的方式来检查某个自定义指标 的名称在MQL4/Indicators文件夹中是否存在或不存在?

我需要它来检查iCustom函数是否已经找到并与一个指标一起工作。

检查这个名字的指标是否存在(我不知道怎么做)。

if( !=Indicatorname)//Well,或另一个 "信号 "表明没有这个名称的指标,如-1,false ...

{我在这里写点东西 :)}

否则 //从指标中接收数值

{

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

}

我怀疑这个主题位于 "无约束的文件操作 "的平面(我可能是错的),但我从来没有遇到过 "这个主题 "中通常使用的系统库...

总之,需要一些建议......,也许已经有现成的东西,或者至少--在哪里 "挖"。

谢谢

 
Ilya Melamed:

你好,请你告诉我,我如何通过程序化的方式来检查某个自定义指标 的名称在MQL4/Indicators文件夹中是否存在或不存在?

我需要它来检查iCustom函数是否已经找到并与一个指标一起工作。

检查这个名字的指标是否存在(我不知道怎么做)。

if( !=Indicatorname)//Well,或另一个 "信号 "表明没有这个名称的指标,如-1,false ...

{我在这里写点东西 :)}

否则 //从指标中接收数值

{

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

}

我怀疑这个主题位于 "无约束的文件操作 "的平面(我可能是错的),但我从来没有遇到过系统库,这通常在 "这个主题 "中使用...

总之,需要一些建议......,也许已经有现成的东西,或者至少--在哪里 "挖"。

谢谢

最好将指标作为一种资源连接起来,那么你就不需要去寻找它,它总是在那里。
 
Sergey Gritsay:
你最好把指标作为一种资源连接起来,那么你就不需要去寻找它,它将永远存在。
指标将由用户连接。 这就是为什么我们需要一个检查,如果用户在指标名称中犯了一个错误,iCustom将只返回0作为信息,而不知道该指标根本不存在。
 
Ilya Melamed:
指标将由用户连接。 这就是为什么我们需要一个检查,如果用户在指标名称上犯了错误,iCustom将只返回0作为信息,而不理解该指标根本不存在。

文件操作可能对你有帮助,这里是文件搜索文档中的一个例子

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

....

文件不能在文件沙盒之外。指标文件夹也不是它的一部分。
 
Sergey Gritsay:

那么文件操作可能对你有帮助,这里是文件搜索文档中的一个例子


  }

....

如果不工作,你不能进入指标文件夹,如果不工作,尝试通过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!");
  }

...