Ошибки, баги, вопросы - страница 3079
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ВСЁ во всех функциях интерфейсных DLL завернуть в try catch, поймать что там за "unhandled exception" и записать в журнал..
это вообще хороший тон - вылавливать все исключения, оборачивать в try все вызовы плюсов. Даже в документации MQL прямо написано - DLL-ки не должны кидать исключений, не C++
в частности в статье conn.Close и new SqlConnection не попадают под "вылов исключений" и потенциально могут его кинуть
Спасибо! Проверил, ошибка доступа к общим переменным. Автор тоже об этом писал
Надо отметить, что демо-проект имеет очень существенное ограничение: позволяет запускать только одного эксперта, работающего с БД, в одном терминале MetaTrader. Дело в том, что все эксперты используют один экземпляр загруженной DLL. Поскольку наш класс сделан статическим, то он будет один для всех запущенных экспертов. Переменные тоже будут общими. Если запустить нескольких экспертов, то все они будут использовать одно и то же подключение и один объект команды на всех. Если к этим объектам попытаются одновременно обращаться сразу несколько экспертов — могут возникнуть проблемы.
Вопрос: Как можно реализовать многопоточный доступ к dll (отдельный экземпляр для каждого вызова функции и переменные локальные для каждого вызова)?
Проблему наблюдаю в MT5 тестере.
Работая с несколькими валютами, переодически происходит подмена данных с другой валюты. Проверьте тестер. Поправте, пожалуйста.
Первое значение это SymbolInfoDouble(symbol,SYMBOL_BID);
Как будто в моменте он не может получить цены SymbolInfoDouble(EURGBP,SYMBOL_BID); и берет значение с другой пары которая в работе. Есть способ проверки на коректность котировки?
Спасибо! Проверил, ошибка доступа к общим переменным. Автор тоже об этом писал
Надо отметить, что демо-проект имеет очень существенное ограничение: позволяет запускать только одного эксперта, работающего с БД, в одном терминале MetaTrader. Дело в том, что все эксперты используют один экземпляр загруженной DLL. Поскольку наш класс сделан статическим, то он будет один для всех запущенных экспертов. Переменные тоже будут общими. Если запустить нескольких экспертов, то все они будут использовать одно и то же подключение и один объект команды на всех. Если к этим объектам попытаются одновременно обращаться сразу несколько экспертов — могут возникнуть проблемы.
Вопрос: Как можно реализовать многопоточный доступ к dll (отдельный экземпляр для каждого вызова функции и переменные локальные для каждого вызова)?
В .NET почти никак. Класс сделан статическим не потому что автор статьи злой, а потому что классы шарпа так импортируются.
На мой взгляд путей два: 1) (писать долго, работает быстро) переписать на С++ и больше не трогать .NET 2) (довольно механично, но скорость упадёт и могут быть сайд-эффекты) вдумчиво оборачивать вызовы в Critical Section чтобы две нити одновременно не обращались
если шарп принципиален, то ещё вариант - переписать чтобы на уровне DLL контролировать пулы подключений, чтобы запоминать связку советник<->connection_id и каждый советник работал со своим подключением;
Тут за .net не подскажу - можно ли получать и хранить ссылку на объект шарпа в какой-либо структуре или скаляре MQL и передавать её туда-сюда. То есть оперировать как с обычным указателем С++. Если можно, то всё упрощается.
Добрый день. Скажите можно ли увеличить количество профилей со 100, до хотя бы 200. Я использую для ММВБ для каждого тикера свой профиль. Компаний нормальных все больше и стало не хватать. Я думаю для МТ5 не особо принципиально сколько иметь профилей в паке.
Спасибо
Сегодня появилось и не исчезает - 99.
Не смог понять, что это. Кроме того, что это разность квадратов.
Проблему наблюдаю в MT5 тестере.
Работая с несколькими валютами, переодически происходит подмена данных с другой валюты. Проверьте тестер. Поправте, пожалуйста.
Первое значение это SymbolInfoDouble(symbol,SYMBOL_BID);
Как будто в моменте он не может получить цены SymbolInfoDouble(EURGBP,SYMBOL_BID); и берет значение с другой пары которая в работе. Есть способ проверки на коректность котировки?
Спасибо за сообщение.
Предоставьте пожалуйста пример для воспроизведения описанного поведения.
Спасибо за сообщение.
Предоставьте пожалуйста пример для воспроизведения описанного поведения.
Спасибо за реагирование. В течении пары дней напишу подготовлю код.
Сегодня появилось и не исчезает - 99.
Не смог понять, что это. Кроме того, что это разность квадратов.
Это количество неудовлетворенных заявок в "друзья", думаю...