Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот Вам код на чтение из файла:
Почему FileReadString() ?
не лучше воспользоваться FileReadArray(), тогда цикл ненадо делать.
Почему FileReadString() ?
не лучше воспользоваться FileReadArray(), тогда цикл ненадо делать.
Rosh:
Пишите значения эквити в файл. Потом стройте индикатор по этим значениям. Но файл данных придется переносить вручную, так как при тестировании файлы пишутся в папку имя_агента/MQL5/Files.
Только теперь понял, насколько все заморочено.
Но вручную - явно не решение этого вопроса, так как речь идет о сотнях тестаций.
И казалось бы: в начале есть доступные данные, но - о, Чудо! -- программа устроена так, что возможность их как-то и где-то сохранить до момента их программного извлечения и использования полностью отсутствует!
Я - не профессиональный программист, но в голове у меня такая ситуация не укладывается.
Огромнейшая документация.., широчайшие возможности в построении, казалось бы, всего и вся.., управление памятью, ООП, а тут, в фундаментально-простом и критически-нужном (что, надеюсь, уже объяснил) - тупик.
...И все-таки... Вопрос!
Неужели отсутствует возможность записи в режиме тестирования в какие-то принудительно-нестираемые программные массивы, которые впоследствии можно было бы использовать для построения индикатора?
В т.ч. есть ли возможность передачи через глобальную переменную указателя на такой массив?
И в чем вообще проблема хранения и переброски данных между этапом тестации и временем основной работы не с точки зрения текущей реализации, а в принципе?
Renat упоминал о сотнях мегабайтах данных, но, во-первых, зачем перебрасывать данные всегда, если можно такую возможность предусмотреть лишь при прямом волеизъявлении программиста, и во-вторых, объем данных в смысле поставленной задачи гораздо меньше, и составляет какую-то несколько тысяч цифр.
Еще раз заявляю, что с позиции пользователя вариант ручной переброски файлов при многократном тестировании (а рынок в силу своей сложности требует многократности) абсолютно неудобен и бесперспективен, в то время, как, готов спорить с кем угодно о том, что динамика показателей состояния счета в непосредственном их соотнесении с динамикой цен на истории тестирования является одной из самых важных вообще.
В чем вопрос расширения области видимости в основном режиме операций открытия файлов в режиме чтения до папки файлов тестера? Какая в этом может быть хотя бы гипотетическая угроза?
И в чем вопрос отсутствия возможности принудительного хранения нужных данных между основным режимом и режимом тестации в оперативной памяти?
Для записи и чтения файлов из произвольно расположенных на диске папок используйте dll. Просто функции записи и чтения файла перенесите в dll и всё.
...И все-таки... Вопрос!
Неужели отсутствует возможность записи в режиме тестирования в какие-то принудительно-нестираемые программные массивы, которые впоследствии можно было бы использовать для построения индикатора?
Попробуйте указывать при открытии файла флаг FILE_COMMON - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Идентификатор
Значение
Описание
FILE_COMMON
4096
Расположение файла в общей папке всех клиентских терминалов. Флаг используется при открытии файлов (FileOpen()), копировании файлов (FileCopy(), FileMove()) и проверке существования файлов (FileIsExist())
Попробуйте указывать при открытии файла флаг FILE_COMMON - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Запустите этот скрипт и посмотрите куда он пишет
joo, Rash, спасибо!
Вариант с общей папкой кажется более... интегрированным.
Единственное, что удивляет, так это то, что при запуске этого кода в рамках индикатора выводится сообщение о неудачной записи, хотя запись сама все-таки производится. Плюс - пока еще открытый вопрос о том, как и когда именно лучше записывать данные (отдельно по каждому тику, но это ресурсоемко, или в самом конце - целый массив, но с записью массивов пока чего-то не совсем и, кроме того, трудно понять, как в таком случае будет действовать OnCalculated по его извлечению - во второй, получается проход уже после тестирования?)
И еще вопрос, несколько не в тему, но по уже затронутому вчера вопросу.
Вставил в OnTick и в OnCalculated:
но после завершения тестирования несмотря на наличие объектов, связанных с открытием и закрытием позиций (стрелки и линии - видны в Терминале: Графики>Обэекты>Список объектов), возвращаемое значение почему-то равно 0.ПисАть в файл лучше как можно реже, поэтому лучше целым массивом. Значения замерять не чаще, чем один раз в минуту, иначе будут проблемы с отображением на чарте (да и неоправданно ресурсоемко это). То есть в конце прогона. Но возможен и такой вариант:
Алгоритм вырисовывается так:
1) Запустили эксперт в тестере.
2) Замерили интересующее значение.
3) Записали в файл это значение.
4) Записали в отдельный файл true, означающее, что записано новое значение
5) Запустили бесконечный цикл, условием выхода из которого является флаг false в файле с флагом.
6) В отдельном чарте скриптом читаем файл с флагом, если появилось новое значение, то рисуем риску на чарте, пишем в файл false.
Примерно так будет выглядеть визуальный режим тестирования в тестере.
Подождите немного, закончится конкурс, возможно будут представлены более изящные и красивые решения.
joo, Rash, спасибо!
Вариант с общей папкой кажется более... интегрированным.
Единственное, что удивляет, так это то, что при запуске этого кода в рамках индикатора выводится сообщение о неудачной записи, хотя запись сама все-таки производится.
У меня ничего такого не выводится. Попробуйте:
У меня ничего такого не выводится. Попробуйте:
Rosh
, не могу понять, в чем именно причина, но в отличии от моих индикаторов, при запуске с Вашим, выдается сообщение:Сделал сейчас на основе Вашего кода аналогичный простейший эксперт, который потиково должен записывать все значения Equity в файл (в коде изменил лишь вывод любого, в т.ч. нулевого количества записанных байтов, переменные сделал глобальными, а открытие файла и запись разнес в OnInit и OnTick), но хотя ошибка записи отсутствует и файл создается, записи и файл пусты.