Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Правильно понимаю, что память терминала складывается и памяти программ терминала мкл, тикс и других.
Нет. Просто CopyTicks хранит кеш запрошенных тиков в течение 10-ти секунд. Например, запросили 3 Гб памяти, Терминал будет эти 3 Гб хранить еще в кеше. Итого Терминал будет потреблять 6 Гб. Если Вы сделаете ArrayFree и запросите 3 Гб по другому символу, то Терминал будет потреблять уже 9Гб. И так далее.
Правильно понимаю, что память терминала складывается и памяти программ терминала мкл, тикс и других.
Казалось бы, для решения этой задачи с головой должно хватить 100 МБ ОЗУ даже для миллиарда тиков. Но в MT5 решить эту задачу через CopyTicks не получится.
Делается такой костыль:
Да, это жуткий костыль, но других вариантов нет. Т.е. нельзя работать с CopyTicks напрямую. Нужно обязательно использовать файловые архивы тиков.
Самое огромное потребление ОЗУ будет в п.1. даже с условием ожидания освобождения кеша после каждого вызова. При этом п.2. будет выполняться бесплатно!
Идёт торговля сразу на 8 парах, на каждой по несколько советников. И хотя в общем по ресурсам выглядит неплохо, памяти занято не больше 25%, процессор больше 10% не грузится, заметны как лаги на глаз, типа новый график открывается по несколько секунд, так и в целом по торговле. Может есть какие best practices, хотя бы тезисно, как это всё можно упаковать, чтобы работало пошустрее? Знаю, что Вы виртуалите несколько советников в один. Какие тут подводные камни? Как сделана отсылка торговых приказов? На что обратить внимание?
P.S. Сам использую синхронизацию через Virtual и торговлю через MT4Orders, по 1 советнику на чарт.
Взаимно. Возьмем Ваш VPS. На нем не могут работать скринеры рынка.
ЗЫ Хорошо бы избавить от зависаний, что в течение нескольких месяцев происходят. Запустите этот скрипт на машине с бесконечной ОЗУ. Например, я не могу закачать тики с 1-го июня всего по одному символу. Просто висит CopyTicks с нулевым потреблением ресурсов.
Снимите дамп терминала при "зависании". Посмотрим в чем причина.
Идёт торговля сразу на 8 парах, на каждой по несколько советников. И хотя в общем по ресурсам выглядит неплохо, памяти занято не больше 25%, процессор больше 10% не грузится, заметны как лаги на глаз, типа новый график открывается по несколько секунд, так и в целом по торговле. Может есть какие best practices, хотя бы тезисно, как это всё можно упаковать, чтобы работало пошустрее?
Знаю, что Вы виртуалите несколько советников в один. Какие тут подводные камни? Как сделана отсылка торговых приказов? На что обратить внимание?
Делаю все через синхронный OrderSend, но при этом отключаю проверки MT5.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2020.09.29 08:45
Такой строкой
можно все это отключить. Может быть полезно в случае, если тормозит MT5-история торгов, т.к. MT4Orders проверяет корректность (и даже корректирует) MT5-OrderSend иногда через обращение к этой истории.
Не рекомендую этого делать.
Каждому сету (набор входных параметров) дается свой Виртуал. Синхронизатор перебирает все Виртуалы и для каждого делает синхронизацию. Нужно это делать закольцованно, а не с первого Виртуала.
После вызова любого OrderSend (внутри синхронизатора) обязательно делается снепшот и добрасываются свежие тики (во все Виртуалы), что пришли за время выполнения OrderSend. Т.е. после любой гипотетической паузы - делаем все свежим.
Свежие тики берутся только через CopyTicks каждый раз. Никакого SymbolInfoTick для проброса. При этом обязательно контролируется, если CopyTicks_LastTick.time_msc < SymbolInfoTick.time_msc (бывает часто, даже если вызовы один за другим (в любой последовательности)), то синхронизатор не включается. Иначе можно напороться, что в реале лимитник исполнился, а в виртуале - нет. И будут проблемы при синхронизации.
Снепшоты делаю через VIRTUAL::Snapshot. Помимо очевидной скорости это еще позволяет отделить свой символ от остальных - попадает туда только свой символ. Это дает еще доп. скорость. Плюс в снепшоте отключена не только история,
но и поля (помечены ниже), заполнение которых требует обращения к истории.
Делал раньше проверки еще на то, чтобы LastDeal.time_msc не был больше LastTick.time_msc. В случаев невыполнение этого условия отказывался от синхронизации по понятным причинам. Но такая проверка выжирает очень сильно ресурсы (работает с историей), поэтому отказался.
Торговая On-функция - OnTick.
Наверное, основное перечислил.
Синхронный, я так понимаю, не только OrderSend, но и все торговые приказы, включая модификацию, удаление и тд?
SymbolInfoTick не пробрасывается, потому что порядок тиков может испортить? А CopyTicks идут точно все в нужном порядке.
Получается, что SymbolInfoTick нужен только для проверки времени и всё? Вся торговля и тд идут только по CopyTicks?
Есть ли смысл несколько советников пытаться упаковать в 1 на 1 чарте? Ничего невозможного, но пытаюсь понять, стоит ли возиться и переписывать или профит будет минимальный?
Есть ли смысл несколько советников пытаться упаковать в 1 на 1 чарте? Ничего невозможного, но пытаюсь понять, стоит ли возиться и переписывать или профит будет минимальный?
А откуда может быть профит? Все будут ждать при торговой операции любого из них.
Ну и просто меньше распараллеливания.
Разве что один кэш ордеров можно держать на всех, но выгода сомнительная..
Снимите дамп терминала при "зависании". Посмотрим в чем причина.
Вам мало кода, воспроизводящего проблему? Или у вас не воспроизводится?
Синхронный, я так понимаю, не только OrderSend, но и все торговые приказы, включая модификацию, удаление и тд?
Имел в виду MT5-OrderSend.
SymbolInfoTick не пробрасывается, потому что порядок тиков может испортить? А CopyTicks идут точно все в нужном порядке.
Потому что дыры будут.
Получается, что SymbolInfoTick нужен только для проверки времени и всё?
Да.
Вся торговля и тд идут только по CopyTicks?
Только.
Есть ли смысл несколько советников пытаться упаковать в 1 на 1 чарте? Ничего невозможного, но пытаюсь понять, стоит ли возиться и переписывать или профит будет минимальный?
Для меня это огромное подспорье.
Каждый одиночный проход (в режиме одиночного тестирования) в конце записывает свои инпуты в один и тот же файл. Поэтому после просмотра некоторых проходов после Оптимизации получаю файл с данными этих проходов. Далее в этом файле их фильтрую, оставляя только то, что приглянулось. И просто выбираю через FileSelectDialog этот файл при старте боевого робота. Тем самым он торгует портфель.
Получается, что Оптимизация занимает 20 минут. Просмотр проходов - 3 минуты. Их фильтр - 3 минуты. Запуск в боевую работу - секунды. Робот компилировать не нужно. Следить за версиями и чартами - аналогично.
При запуске вижу Репорт каждого сета. В любой момент могу видеть состояние соответствующего виртуала и его тезки с реала , а по горячей клавише подробный HTML-Report и для виртуала и для реала. Как одиночного сета, так и всего портфеля.
Поскольку торговая статистика Виртуалов написана специально быстро, то имеется возможность находу (с клавиатуры) быстро сравнивать между собой сеты.