Я хотел сделать так, чтобы было что-то типа менюшки. Так же как в при выборе переменной bool либо false, либо true. Чтобы пользователь мог нажать только на четко определенные значения параметра. Чтобы он "ошибочно" не вбил ненужные, т.к. в этом случае советник будет работать некорректно.
Пользователь - это даже я сам. Т.к. можно забыть какие там параметры для конкретной переменной должны быть.
Тогда так и сделайте. Внешняя переменная типа Bool . Если == false, переменным присваиваются одни значения, если true -- другие. Если "комплектов" параметров больше двух -- вместо булевской используйте переменную типа int и при 1 -- первый набор, 2 -- второй и.т.д.
Это можно сделать как для каждой внешней переменной, так и для всех разом (первый режим работы советника , второй ...)
Я хотел сделать так, чтобы было что-то типа менюшки. Так же как в при выборе переменной bool либо false, либо true. Чтобы пользователь мог нажать только на четко определенные значения параметра. Чтобы он "ошибочно" не вбил ненужные, т.к. в этом случае советник будет работать некорректно.
Пользователь - это даже я сам. Т.к. можно забыть какие там параметры для конкретной переменной должны быть.
В MQL4 такой возможности нет (а вот в MQL5 есть). Можно в инициализации сделать проверку данного параметра и если он не соответствует определённому значению, то сигнализировать ошибку. Затем в самом начаде старта делать проверку. Я так сделал в своём советнике, напр.:
Все лишнее удалил т.к. чтение не нужно, просто берем каталог и там создаем файл со значением, которое изначально известно, всё.
Вопросы:
1. Не могу разобраться где указывается значение которое мы пишем в файл?
2. Не могу понять где ошибка?
Заранее спасибо.
//===============================================================================================================================================================// Импортируемые функции.//===============================================================================================================================================================#import "ntdll.dll"int RtlGetLastWin32Error();
int RtlSetLastWin32Error (int dwErrCode);
#import#include <WinKernel32.mqh> // Заголовочный файл библиотеки "kernel32.dll" функций API Windows XP.//===============================================================================================================================================================// Объявленные константы.//===============================================================================================================================================================#define FILE_FULL_CREATE 0// Создать или переписать файл.//===============================================================================================================================================================// Функция открывает или создаёт файл.// Функция открывает/создает файл для ввода и/или вывода. Если при открытии для записи файла нет, то он будет создан. Для создания директории// используется функция "CreateDirectory()". Функция возвращает: handle - файловый описатель, если функция выполнилась без ошибки;// -1 - возникла системная ошибка;// -2 - ошибка при перемещении файлового указателя в конец файла;// -3 - указан недопустимый способ открытия файла.//===============================================================================================================================================================int start(){
int FileOpenFull (string PathName="D:\files\DATA.csv", // Имя файла с абсолютным путём.int ModeCWR=0) // Способ открытия файла: 0 - FILE_FULL_CREATE Открытие файла для записи. Если файл существует, то содержимое файла будет// уничтожено. Если файл с таким именем не существует, то будет создан новый.
{
int Error; // Номер последней ошибки.int Handle; // Файловый описатель.//===============================================================================================================================================================
RtlSetLastWin32Error(0); // Обнуляем ошибку.if (ModeCWR != FILE_FULL_READ) // Если функция вызвана не для чтения, проверяем на наличие файла.
{ // Проверяем на наличие файла. Читаем файл.
Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (RtlGetLastWin32Error() == 2 && Handle == -1) ModeCWR = FILE_FULL_CREATE; // Файла нет. Создаём файл.else
{
if (!CloseHandle (Handle))
{
Error = RtlGetLastWin32Error();
Print ("Ошибка в функции \"FileOpenFull()\". Файл с путём \"", PathName, "\" не закрыт при проверки на наличие. Последняя ошибка: \"", Error, "\". ", StringError (Error));
return (-1);
}
}
RtlSetLastWin32Error(0); // Обнуляем ошибку.
}
//===============================================================================================================================================================// Переключатель по способам открытия файла.//===============================================================================================================================================================switch (ModeCWR)
{ // Создаём файл.case FILE_FULL_CREATE:
{
Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (Handle == -1)
{
Error = RtlGetLastWin32Error();
Print ("Ошибка в функции \"FileOpenFull()\". Файл с путём \"", PathName, "\" не открыт. Последняя ошибка: \"", Error, "\". ", StringError (Error));
}
return (Handle);
}
//===============================================================================================================================================================// Функция закрытия файла.// Функция закрывает ранее открытый файл. Если файл закрыт успешно, функция возвращает TRUE, иначе возвращает FALSE.//===============================================================================================================================================================bool FileCloseFull (int Handle) // Файловый описатель, возвращаемый функцией "FileOpenFull()".
{
int Error; // Номер последней ошибки.//----
RtlSetLastWin32Error (0);
if (!CloseHandle (Handle))
{
Error = RtlGetLastWin32Error();
Print ("Ошибка в функции \"FileCloseFull()\". Последняя ошибка: \"", Error, "\". ", StringError (Error));
return (false);
}
elsereturn (true);
}
//===============================================================================================================================================================// Функция возвращает код системной ошибки.//===============================================================================================================================================================int SystemError()
{
return (RtlGetLastWin32Error());
}
//===============================================================================================================================================================// Функция возвращает строковое описание кода системной ошибки.//===============================================================================================================================================================string StringError (int ErrorCode) // Код системной ошибки.
{
int i;
string String = "";
//----int Buffer[128];
//----ArrayInitialize (Buffer, 0);
FormatMessageA (0x1000, 0, ErrorCode, 0, Buffer, ArraySize (Buffer), 0);
//----for (i = 0; i < ArraySize (Buffer); i++)
{
String = String + CharToStr (Buffer[i] & 0xFF)
+ CharToStr (Buffer[i] >> 8 & 0xFF)
+ CharToStr (Buffer[i] >> 16 & 0xFF)
+ CharToStr (Buffer[i] >> 24 & 0xFF);
}
return (StringTrimRight (String));
}
//===============================================================================================================================================================// Конец//===============================================================================================================================================================
}
Все лишнее удалил т.к. чтение не нужно, просто берем каталог и там создаем файл со значением, которое изначально известно, всё.
Вопросы:
1. Не могу разобраться где указывается значение которое мы пишем в файл?
2. Не могу понять где ошибка?
Заранее спасибо.
Артём!!! Где написано что с Windows 7 не работает? Почему так невнимательно читаете? Не удивляюсь, что у Вас ничего не выходит.
Посмотрел на Ваш код и понял, что Вы совсем не умеете программировать. Сначала возмите пример из справки. Запустите. Посмотрите, как он работает. Потом переходите к более сложному.
Файл сначала создают или открывают. Потом пишут или читают. Потом закрывают. Вы просто скопировали объявления функций в старт. Вырвали кусок кода из универсальной функции. Теперь он просто висит. Ни к чему не относится. Зачем это? Это работать не будет.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Прошу прощения, не могу найти... подскажите пожалуйста.
КАК СДВИНУТЬ ВСЕ ЭЛЕМЕНТЫ ОДНОМЕРНОГО МАССИВА НА 1 ИНДЕКС?
Есть какая то операция или нужно в цикл заганять?
Прошу прощения, не могу найти... подскажите пожалуйста.
КАК СДВИНУТЬ ВСЕ ЭЛЕМЕНТЫ ОДНОМЕРНОГО МАССИВА НА 1 ИНДЕКС?
Есть какая то операция или нужно в цикл заганять?
Не совсем...
Я хотел сделать так, чтобы было что-то типа менюшки. Так же как в при выборе переменной bool либо false, либо true.
Пользователь - это даже я сам. Т.к. можно забыть какие там параметры для конкретной переменной должны быть.Чтобы пользователь мог нажать только на четко определенные значения параметра. Чтобы он "ошибочно" не вбил ненужные, т.к. в этом случае советник будет работать некорректно.
Тогда так и сделайте. Внешняя переменная типа Bool . Если == false, переменным присваиваются одни значения, если true -- другие. Если "комплектов" параметров больше двух -- вместо булевской используйте переменную типа int и при 1 -- первый набор, 2 -- второй и.т.д.
Это можно сделать как для каждой внешней переменной, так и для всех разом (первый режим работы советника , второй ...)
https://docs.mql4.com/ru/array/ArrayCopy
Прошу прощения, не могу найти... подскажите пожалуйста.
КАК СДВИНУТЬ ВСЕ ЭЛЕМЕНТЫ ОДНОМЕРНОГО МАССИВА НА 1 ИНДЕКС?
Есть какая то операция или нужно в цикл заганять?
https://www.mql5.com/ru/forum/131859/page8#434278
Не совсем...
Я хотел сделать так, чтобы было что-то типа менюшки. Так же как в при выборе переменной bool либо false, либо true.
Пользователь - это даже я сам. Т.к. можно забыть какие там параметры для конкретной переменной должны быть.Чтобы пользователь мог нажать только на четко определенные значения параметра. Чтобы он "ошибочно" не вбил ненужные, т.к. в этом случае советник будет работать некорректно.
В MQL4 такой возможности нет (а вот в MQL5 есть). Можно в инициализации сделать проверку данного параметра и если он не соответствует определённому значению, то сигнализировать ошибку. Затем в самом начаде старта делать проверку. Я так сделал в своём советнике, напр.:
Всем привет. Пытаюсь написать функцию, которая записывает файл в каталог указан пользователем (работаем вне песочницы).
Написал код с помощью библиотеки "ZI_File_Functions_Full_Lib" https://www.mql5.com/ru/code/8577
Функция " PathFunctions.dll." https://www.mql5.com/ru/code/10873 не подходит т.к. работает с Vista, у меня Windows 7.
Все лишнее удалил т.к. чтение не нужно, просто берем каталог и там создаем файл со значением, которое изначально известно, всё.
Вопросы:
1. Не могу разобраться где указывается значение которое мы пишем в файл?
2. Не могу понять где ошибка?
Заранее спасибо.
Всем привет. Пытаюсь написать функцию, которая записывает файл в каталог указан пользователем (работаем вне песочницы).
Написал код с помощью библиотеки "ZI_File_Functions_Full_Lib" https://www.mql5.com/ru/code/8577
Функция " PathFunctions.dll." https://www.mql5.com/ru/code/10873 не подходит т.к. работает с Vista, у меня Windows 7.
Все лишнее удалил т.к. чтение не нужно, просто берем каталог и там создаем файл со значением, которое изначально известно, всё.
Вопросы:
1. Не могу разобраться где указывается значение которое мы пишем в файл?
2. Не могу понять где ошибка?
Заранее спасибо.
Артём!!! Где написано что с Windows 7 не работает? Почему так невнимательно читаете? Не удивляюсь, что у Вас ничего не выходит.
Посмотрел на Ваш код и понял, что Вы совсем не умеете программировать. Сначала возмите пример из справки. Запустите. Посмотрите, как он работает. Потом переходите к более сложному.
Файл сначала создают или открывают. Потом пишут или читают. Потом закрывают. Вы просто скопировали объявления функций в старт. Вырвали кусок кода из универсальной функции. Теперь он просто висит. Ни к чему не относится. Зачем это? Это работать не будет.
Добрый день! Подскажите, пожалуйста, как закрыть тестер стратегий, что нужно нажать?