Sergey Parkin: Советников нет, из индикаторов только объёмы стандартные из терминала
Т.е. открыли график, нанесли горизонтальную линию, закрыли терминал, открыли терминал, график (открытый для нанесения линии) на месте, а самой линии нет?
Alexey Kozitsyn: Т.е. открыли график, нанесли горизонтальную линию, закрыли терминал, открыли терминал, график (открытый для нанесения линии) на месте, а самой линии нет?
Приветствую! Подскажите, пожалуйста, как можно программно проверить наличие или отсутствие определенного пользовательского индикатора в папке MQL4\Indicators по его имени ?
То есть это нужно мне для проверки, что функция iCustom нашла индикатор и работает с ним.
Проверяем есть ли индикатор с таким именем ( не знаю как )
if( !=Indicatorname)// Ну или другой "сигнал", что индикатора с таким именем нет, типа -1, false ...
{тут я чего-нибудь прописываю :)}
else // Получаем значение с индкатора
{
iCustom(....Indicatorname....);
}
Подозреваю, что тема лежит в плоскости "Файловые операции без ограничений" ( может ошибаюсь), но с системными библиотеками, которые обычно используют в "этой теме" никогда не сталкивался...
В общем, нужен совет..., может уже и что-то готовое есть.., или хотя бы - куда "копать"
Приветствую! Подскажите, пожалуйста, как можно программно проверить наличие или отсутствие определенного пользовательского индикатора в папке MQL4\Indicators по его имени ?
То есть это нужно мне для проверки, что функция iCustom нашла индикатор и работает с ним.
Проверяем есть ли индикатор с таким именем ( не знаю как )
if( !=Indicatorname)// Ну или другой "сигнал", что индикатора с таким именем нет, типа -1, false ...
{тут я чего-нибудь прописываю :)}
else // Получаем значение с индкатора
{
iCustom(....Indicatorname....);
}
Подозреваю, что тема лежит в плоскости "Файловые операции без ограничений" ( может ошибаюсь), но с системными библиотеками, которые обычно используют в "этой теме" никогда не сталкивался...
В общем, нужен совет..., может уже и что-то готовое есть.., или хотя бы - куда "копать"
Спасибо
лучше подключите индикатор как ресурс, тогда не нужно будет его искать, он будет всегда рядом
Sergey Gritsay: лучше подключите индикатор как ресурс, тогда не нужно будет его искать, он будет всегда рядом
Индикаторы будет подключать пользователь, потому и нужна проверка, что если пользователь ошибся в имени индикатора, то iCustom возвращает просто нули в качестве информации, не разбираясь, что индюка просто нет
Индикаторы будет подключать пользователь, потому и нужна проверка, что если пользователь ошибся в имени индикатора, то iCustom возвращает просто нули в качестве информации, не разбираясь, что индюка просто нет
тогда вам в файловые операции может помогут, вот пример из документации поиска файла
//--- покажем окно входных параметров при запуске скрипта #property script_show_inputs //--- дата для старых файлов inputdatetime InpFilesDate=D'2013.01.01 00:00'; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart() { 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 //--- дата для старых файлов inputdatetime InpFilesDate=D'2013.01.01 00:00'; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart() { 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 не входит в неё же.
тогда вам в файловые операции может помогут, вот пример из документации поиска файла
}
....
а нет штатными средствами вы не залезете наверно в папку с индикаторами, попробуйте еще это пример разобрать, если не поможет, то только через вин апи
//--- покажем окно входных параметров при запуске скрипта #property script_show_inputs //--- фильтр inputstring InpFilter="Dir1\\*"; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart() { 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!"); }
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Индикаторы/советники есть на графиках?
Советников нет, из индикаторов только объёмы стандартные из терминала
Т.е. открыли график, нанесли горизонтальную линию, закрыли терминал, открыли терминал, график (открытый для нанесения линии) на месте, а самой линии нет?
именно так
Мистика, такого быть не должно...
Приветствую! Подскажите, пожалуйста, как можно программно проверить наличие или отсутствие определенного пользовательского индикатора в папке 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!");
}
...