Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2549
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ещё бывает полезна проверка на мин/мах лот.
Ещё бывает полезна проверка на мин/мах лот.
MathRound() округляет по правилам математики. Но задача стоит округлить до меньшего игнорируя правила округления.
В вашем варианте обязательное указание символа. Гораздо полезней поставить символ на второе место параметров и присвоить ему значение по умолчанию. Тогда его указывать будет не обязательно.
Да и в моей версии написано не совсем правильно.
Вот такой вариант будет лучше
Но это было написано много лет взад и править не особо есть желание.
Можно ещё добавить и две функции в одну. Нормализацию цены и нормализацию лота. В общем фантазия безгранична…
Возможно, но она не соответствует поставленному изначально вопросу.
Задача получить меньшее
0.0151 = 0.01
0.0192 = 0.01
0.0201 = 0.02
0.0349 = 0.03
Мой ответ, отвечает на этот вопрос. Ваш нет)))
Возможно не правильно поставил вопрос, или неправильно прочитан
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Vitaly Muzichenko, 2025.02.20 08:25
Как округлить число к ближайшему лоту?
Задача получить меньшее
0.0151 = 0.01
0.0192 = 0.01
0.0201 = 0.02
0.0349 = 0.03
Так не получается
Срезать лишнее после сотых?
Задача:
На каждые 5000 депозита при лоте 0.01, повышать лот на 0.01
Сейчас при росте баланса до 7501, лот получается 0.02, а нужен 0.01, пока баланс не станет 10000
P.S. Наверное как решение, подойдёт
Это работает.
В чём вопрос собственно, так это в тестировании ТС
Имеем баланс 100, при тесте баланс растёт до 1500, но весь тест постоянный лот 0.01
Есть впереди участок, где просадка достигает 105+маржа, соответственно, если запустить на этом участке, то стратегия сливает сразу.
При наборе баланса она этот участок проходит, потому что баланс больше 100.
Решил использовать увеличения лота на каждые N-единиц баланса. Выход так себе - не совсем, потому как при наборе баланса со 100 до 190, лот будет также 0.01 - и участок будет пройден.
Есть замечательная функция для тестера, снимаю ней лишнее при 5% роста
ПРОБЛЕМА:
Оптимизация проходит до конца, оптимизатор выдаёт отличный результат прибыльности, НО, когда запускаешь на этих данных, то где-то по середине стратегия слилась, но до этого успела снять.
Нужно как-то ограничить, если тест до конца не пройден, выдавать результат как "неудачный", хоть и заработано от начального депозита 500%
Возможно не правильно поставил вопрос, или неправильно прочитан
Это работает.
В чём вопрос собственно, так это в тестировании ТС
Имеем баланс 100, при тесте баланс растёт до 1500, но весь тест постоянный лот 0.01
Есть впереди участок, где просадка достигает 105+маржа, соответственно, если запустить на этом участке, то стратегия сливает сразу.
При наборе баланса она этот участок проходит, потому что баланс больше 100.
Решил использовать увеличения лота на каждые N-единиц баланса. Выход так себе - не совсем, потому как при наборе баланса со 100 до 190, лот будет также 0.01 - и участок будет пройден.
Есть замечательная функция для тестера, снимаю ней лишнее при 5% роста
ПРОБЛЕМА:
Оптимизация проходит до конца, оптимизатор выдаёт отличный результат прибыльности, НО, когда запускаешь на этих данных, то где-то по середине стратегия слилась, но до этого успела снять.
Нужно как-то ограничить, если тест до конца не пройден, выдавать результат как "неудачный", хоть и заработано от начального депозита 500%
Понятно. Надо не просто округлить, а посчитать в зависимости от депозита.
Была у меня такая функция, но потерялась когда сдох SSD. Восстановить не сложно, но неохота…
В общем, делишь депозит на размер минимального… Если запланировал 0.01 на каждые 150 зелёных. Вот и делишь на 150. Потом умножаешь 0.01 на полученное значение.
Допустим баланс уже составляет 299 зелёных рублей. (int)299/150 = 1
А 399/150 будет 2… И даже 449/150 тоже будет 2
Как-то так.
Также не тот результат, выдал 0.02
Я ошибся, надо так
Это есть причина всей задачи:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Vitaly Muzichenko, 2025.02.20 16:42
В чём вопрос собственно, так это в тестировании ТС
Имеем баланс 100, при тесте баланс растёт до 1500, но весь тест постоянный лот 0.01
Есть впереди участок, где просадка достигает 105+маржа, соответственно, если запустить на этом участке, то стратегия сливает сразу.
При наборе баланса она этот участок проходит, потому что баланс больше 100.
Решил использовать увеличения лота на каждые N-единиц баланса. Выход так себе - не совсем, потому как при наборе баланса со 100 до 190, лот будет также 0.01 - и участок будет пройден.
Есть замечательная функция для тестера, снимаю ней лишнее при 5% роста
ПРОБЛЕМА:
Оптимизация проходит до конца, оптимизатор выдаёт отличный результат прибыльности, НО, когда запускаешь на этих данных, то где-то по середине стратегия слилась, но до этого успела наснимать.
Нужно как-то ограничить, если тест до конца не пройден, выдавать результат как "неудачный", хоть и заработано/снято от начального депозита 500%
Это есть причина всей задачи:
Можно использовать OnTester() и оптимизировать по пользовательскому критерию.
В OnTester определяете, был слив или нет, если был, то возвращаете отрицательный результат, если не было возвращаете TesterStatistics(STAT_PROFIT)
TesterStatistics
Как прервать проход, если если значение баланса упало на 80% от начального депозита? Это должно ускорить оптимизацию
Как прервать проход, если если значение баланса упало на 80% от начального депозита? Это должно ускорить оптимизацию
У меня как то так сделано
У меня как то так сделано
Проверю, спасибо