Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 128
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Индикаторы/советники есть на графиках?
Советников нет, из индикаторов только объёмы стандартные из терминала
Т.е. открыли график, нанесли горизонтальную линию, закрыли терминал, открыли терминал, график (открытый для нанесения линии) на месте, а самой линии нет?
именно так
Мистика, такого быть не должно...
Приветствую! Подскажите, пожалуйста, как можно программно проверить наличие или отсутствие определенного пользовательского индикатора в папке MQL4\Indicators по его имени ?
То есть это нужно мне для проверки, что функция iCustom нашла индикатор и работает с ним.
Проверяем есть ли индикатор с таким именем ( не знаю как )
if( !=Indicatorname)// Ну или другой "сигнал", что индикатора с таким именем нет, типа -1, false ...
{тут я чего-нибудь прописываю :)}
else // Получаем значение с индкатора
{
iCustom(....Indicatorname....);
}
Подозреваю, что тема лежит в плоскости "Файловые операции без ограничений" ( может ошибаюсь), но с системными библиотеками, которые обычно используют в "этой теме" никогда не сталкивался...
В общем, нужен совет..., может уже и что-то готовое есть.., или хотя бы - куда "копать"
Спасибо
Приветствую! Подскажите, пожалуйста, как можно программно проверить наличие или отсутствие определенного пользовательского индикатора в папке MQL4\Indicators по его имени ?
То есть это нужно мне для проверки, что функция iCustom нашла индикатор и работает с ним.
Проверяем есть ли индикатор с таким именем ( не знаю как )
if( !=Indicatorname)// Ну или другой "сигнал", что индикатора с таким именем нет, типа -1, false ...
{тут я чего-нибудь прописываю :)}
else // Получаем значение с индкатора
{
iCustom(....Indicatorname....);
}
Подозреваю, что тема лежит в плоскости "Файловые операции без ограничений" ( может ошибаюсь), но с системными библиотеками, которые обычно используют в "этой теме" никогда не сталкивался...
В общем, нужен совет..., может уже и что-то готовое есть.., или хотя бы - куда "копать"
Спасибо
лучше подключите индикатор как ресурс, тогда не нужно будет его искать, он будет всегда рядом
тогда вам в файловые операции может помогут, вот пример из документации поиска файла
#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]);
}
}
....
тогда вам в файловые операции может помогут, вот пример из документации поиска файла
#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]);
}
}
....
тогда вам в файловые операции может помогут, вот пример из документации поиска файла
}
....
а нет штатными средствами вы не залезете наверно в папку с индикаторами, попробуйте еще это пример разобрать, если не поможет, то только через вин апи
#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!");
}
...