Ошибки, баги, вопросы - страница 3079

 
Maxim Kuznetsov #:

ВСЁ во всех функциях интерфейсных DLL завернуть в try catch, поймать что там за "unhandled exception" и записать в журнал..

это вообще хороший тон - вылавливать все исключения, оборачивать в try все вызовы плюсов. Даже в документации MQL прямо написано - DLL-ки не должны кидать исключений, не C++ 

в частности в статье conn.Close и new SqlConnection не попадают под "вылов исключений" и потенциально могут его кинуть

Спасибо! Проверил, ошибка доступа к общим переменным. Автор тоже об этом писал

Надо отметить, что демо-проект имеет очень существенное ограничение: позволяет запускать только одного эксперта, работающего с БД, в одном терминале MetaTrader. Дело в том, что все эксперты используют один экземпляр загруженной DLL. Поскольку наш класс сделан статическим, то он будет один для всех запущенных экспертов. Переменные тоже будут общими. Если запустить нескольких экспертов, то все они будут использовать одно и то же подключение и один объект команды на всех.  Если к этим объектам попытаются одновременно обращаться сразу несколько экспертов — могут возникнуть проблемы.


Вопрос: Как можно реализовать многопоточный доступ к dll (отдельный экземпляр для каждого вызова функции и переменные локальные для каждого вызова)?

 
2020.08.17 01:22:44   9842:0.8953065>0.92137
2020.08.17 01:22:44   9843:0.8953065>0.92106
2020.08.17 01:22:44   9844:0.8953065>0.92075
2020.08.17 01:22:44   9845:0.8953065>0.92045
2020.08.17 01:22:44   9846:0.8953065>0.92014
2020.08.17 01:22:44   9847:0.8953065>0.91983
        

2020.08.17 01:22:48   9842:0.8953065>0.92137
2020.08.17 01:22:48   9843:0.8953065>0.92106
2020.08.17 01:22:48   9844:1.7189865>0.92075
2020.08.17 01:22:48   Create GlobalVariables for SELL 1.7189865>0.92075
2020.08.17 01:22:48   9845:0.8953065>0.92045
2020.08.17 01:22:48   9846:0.8953065>0.92014
2020.08.17 01:22:48   9847:0.8953065>0.91983

Проблему наблюдаю в MT5 тестере.

Работая с несколькими валютами, переодически происходит подмена данных с другой валюты. Проверьте тестер. Поправте, пожалуйста.

Первое значение это SymbolInfoDouble(symbol,SYMBOL_BID);

2020.08.17 01:11:38   9877(EURGBP):0.8952471000000001>0.91079
2020.08.17 01:11:38   9878(EURGBP):0.8952471000000001>0.91048
2020.08.17 01:11:38   9879(EURGBP):0.8952471000000001>0.91017
2020.08.17 01:11:38   9880(EURGBP):1.7184123>0.90987
2020.08.17 01:11:38   Create GlobalVariables for SELL 1.7184123>0.90987
2020.08.17 01:11:38   9881(EURGBP):0.8952471000000001>0.90956
2020.08.17 01:11:38   9882(EURGBP):0.8952471000000001>0.90925
2020.08.17 01:11:38   9883(EURGBP):0.8952471000000001>0.90894
2020.08.17 01:11:38   9884(EURGBP):0.8952471000000001>0.90864

Как будто в моменте он не может получить цены SymbolInfoDouble(EURGBP,SYMBOL_BID); и берет значение с другой пары которая в работе. Есть способ проверки на коректность котировки?

 
SEM #:

Спасибо! Проверил, ошибка доступа к общим переменным. Автор тоже об этом писал

Надо отметить, что демо-проект имеет очень существенное ограничение: позволяет запускать только одного эксперта, работающего с БД, в одном терминале MetaTrader. Дело в том, что все эксперты используют один экземпляр загруженной DLL. Поскольку наш класс сделан статическим, то он будет один для всех запущенных экспертов. Переменные тоже будут общими. Если запустить нескольких экспертов, то все они будут использовать одно и то же подключение и один объект команды на всех.  Если к этим объектам попытаются одновременно обращаться сразу несколько экспертов — могут возникнуть проблемы.


Вопрос: Как можно реализовать многопоточный доступ к dll (отдельный экземпляр для каждого вызова функции и переменные локальные для каждого вызова)?

В .NET почти никак. Класс сделан статическим не потому что автор статьи злой, а потому что классы шарпа так импортируются.

На мой взгляд путей два: 1) (писать долго, работает быстро) переписать на С++ и больше не трогать .NET  2) (довольно механично, но скорость упадёт и могут быть сайд-эффекты) вдумчиво оборачивать вызовы в Critical Section чтобы две нити одновременно не обращались

если шарп принципиален, то ещё вариант - переписать чтобы на уровне DLL контролировать пулы подключений, чтобы запоминать связку советник<->connection_id и каждый советник работал со своим подключением;
Тут за .net не подскажу - можно ли получать и хранить ссылку на объект шарпа в какой-либо структуре или скаляре MQL и передавать её туда-сюда. То есть оперировать как с обычным указателем С++. Если можно, то всё упрощается. 

 
Добавьте пожалуйста сервер LiteForex-ECN.com, а то не получается создать сигнал
 
Здравствуйте. У меня такая проблема, что я не могу добавить более одного скриншота к продукту. Раньше всё получалось. В чём может быть дело? Перетаскиванием и просто добавление пытался и никак больше 1 скрина не добавляется...
 

Добрый день. Скажите можно ли увеличить количество профилей со 100, до хотя бы 200. Я использую для ММВБ для каждого тикера свой профиль. Компаний нормальных все больше и стало не хватать. Я думаю для МТ5 не особо принципиально сколько иметь профилей в паке.

Спасибо

 

Сегодня появилось и не исчезает - 99.

Не смог понять, что это. Кроме того, что это разность квадратов.

 
Yury Lemeshev #:

Проблему наблюдаю в MT5 тестере.

Работая с несколькими валютами, переодически происходит подмена данных с другой валюты. Проверьте тестер. Поправте, пожалуйста.

Первое значение это SymbolInfoDouble(symbol,SYMBOL_BID);

Как будто в моменте он не может получить цены SymbolInfoDouble(EURGBP,SYMBOL_BID); и берет значение с другой пары которая в работе. Есть способ проверки на коректность котировки?

Спасибо за сообщение.

Предоставьте пожалуйста пример для воспроизведения описанного поведения.

 
Ilyas #:

Спасибо за сообщение.

Предоставьте пожалуйста пример для воспроизведения описанного поведения.

Спасибо за реагирование. В течении пары дней напишу подготовлю код.

 
fxsaber #:

Сегодня появилось и не исчезает - 99.

Не смог понять, что это. Кроме того, что это разность квадратов.

Это количество неудовлетворенных заявок в "друзья", думаю...