Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1011
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как лучше написать алгоритм?
Задача:
Один советник запускается на разных графиках.
Нужно чтоб в отдельный файл писалась по минутам информация о счете про Баланс, эквити и т.д.
Сейчас получается, что все советники в один файл пишут всю инфу. В итоге, получается много лишних записей.
Какое можно придумать оригинальное решение, чтоб в файл записи делал только один бот. (А если его например удалили, то записи начинал делать другой бот и т.д.)
Создать графический объект в OnInit() с названием эксперта или любой другой, возможно эксперт уже создаёт объект, то можно использовать его, предположим "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))
В OnTick() где идёт запись в файл проверять на каком первом ID-графика есть эта самая метка = значит это самый первый эксперт который установлен в терминале, дальше нас уже не интересует.
Используем перебор:
Получили первый попавшийся график/символ, на котором установлен эксперт
Далее перед записью в файл сравниваем на то, что это первый эксперт:
Конструкция не лёгкая, но лучше чем дёргать диск записью в глобальную переменную
Возьмите стандартную МА, измените тип данных буфера, скомпилируйте и проверьте в окне данных терминала (Ctrl+D)
В глобальные переменные терминала записывается ChartID() с ошибкой. что за ерунда?
Попробуйте такой код:
Результат выполнения этого кода
Создать графический объект в OnInit() с названием эксперта или любой другой, возможно эксперт уже создаёт объект, то можно использовать его, предположим "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))
В OnTick() где идёт запись в файл проверять на каком первом ID-графика есть эта самая метка = значит это самый первый эксперт который установлен в терминале, дальше нас уже не интересует.
Используем перебор:
Получили первый попавшийся график/символ, на котором установлен эксперт
Далее перед записью в файл сравниваем на то, что это первый эксперт:
Конструкция не лёгкая, но лучше чем дёргать диск записью в глобальную переменную
Да, хорошая идея.
Благодарю.
Вопрос тогда такой: Как быть, если советник был удален (например из-за ошибки) а объект остался. Как быть, если график закрыт целиком, то нужно как-то переназначить "главного" эксперта?
Да, хорошая идея.
Благодарю.
Вопрос тогда такой: Как быть, если советник был удален (например из-за ошибки) а объект остался. Как быть, если график закрыт целиком, то нужно как-то переназначить "главного" эксперта?
Ошибка в едином случае - если эксперт аварийно удалился и остался объект, но такого в мт4 на своей памяти не помню. Во всех остальных случаях главный эксперт будет переназначен, проверка то идёт в ОнТике, и будет всегда поиск актуального графика
P.S. Попробуйте проверить, что выдаст OnDeInit() при ошибке в эксперте и самоудалению с графика. Проверить наверное можно просто, создать переменную и считать тики, на 11 тике разделить 10/0
В OnDeInit() поставить Принт и посмотреть какая будет причина деинициализации, если она будет, то по этой причине/номеру удалять объект "MyEA" с графика
Можете отписать о результате, так как самому проверить нет времени
Создать графический объект в OnInit() с названием эксперта или любой другой, возможно эксперт уже создаёт объект, то можно использовать его, предположим "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))
В OnTick() где идёт запись в файл проверять на каком первом ID-графика есть эта самая метка = значит это самый первый эксперт который установлен в терминале, дальше нас уже не интересует.
Используем перебор:
Получили первый попавшийся график/символ, на котором установлен эксперт
Далее перед записью в файл сравниваем на то, что это первый эксперт:
Конструкция не лёгкая, но лучше чем дёргать диск записью в глобальную переменную
Я думаю вы ошибаетесь. GV не пишутся на диск каждый раз. Иначе не нужна была-бы функция принудительной записи GV на диск.
Да плюс ко всему перебирать все графики в поисках советника и объекта... Виталий, это жесть...Я думаю вы ошибаетесь. GV не пишутся на диск каждый раз. Иначе не нужна была-бы функция принудительной записи GV на диск.
Да плюс ко всему перебирать все графики в поисках советника и объекта... Виталий, это жесть...Ещё как пишутся: GlobalVariableSet("GV",ID);
profiles -> gvariables.dat
Ещё как пишутся: GlobalVariableSet("GV",ID);
profiles -> gvariables.dat
При создании может быть и да, но при перезаписи до отключения приложения которое туда пишет, надо проверять. А мне лениво. Всё-же чисто теоретически, если-бы каждый раз писалось на диск, то вышеуказанная функция просто погремушка.
Так нельзя.
Поищите программу для винды, которая синхронизирует данные в папках. И настройте так, чтоб советник автоматом копировался в новый терминал
Как я понял программы такие есть но они работают только с файлами, но если это текстовый документ то содержимое не копирует и файлы не заменяет, может не нашёл программ нормальных. Плохо что разработчики не учли возможность указывать путь откуда черпать файл робота или эксперта, я думал можно указать путь как это обычно делается да и всё,но как вы указали выше это невозможно.
Как я понял программы такие есть но они работают только с файлами, но если это текстовый документ то содержимое не копирует и файлы не заменяет, может не нашёл программ нормальных. Плохо что разработчики не учли возможность указывать путь откуда черпать файл робота или эксперта, я думал можно указать путь как это обычно делается да и всё,но как вы указали выше это невозможно.
Обратите внимание в этом сообщении на слова "У всех терминалов есть общие папки."
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Так всё же, к чему привязывается продукт из маркета?
Сергей Таболин, 2019.11.23 08:17
Вы серьёзно думаете, что я не знаю как и куда нужно устанавливать? )))
У всех терминалов есть общие папки
Я скачал бесплатный индикатор из маркета. Он привязывается к железу.
Так почему на одном железе он работает в одном терминале, но не работает в другом?
Очевидный вывод - привязывается, по крайней мере, не только к железу...
Поищите информацию о том как это делается и в путь... Это называется линковка папок.