Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
советник я создавал в мастере. И в mql плохо разбираюсь. Вы бы не могли мне наглядно пояснить на примере envelopes что мне делать?
В классе CSignalEnvelopes не заложена такая рыночная модель.
Вывод: Нужно дорабатывать класс (или писать свой).
2011.10.06 23:00:34 Solaris executor EURUSDm,M1: cannot call function 'InfoOfTrading' from dll 'Solaris.dll' (error 127)
Чем отличается вызов функций из dll в MT4 от MT5? Компилирую dll, в MT5 замечательно работает, а в MT4 выдает ошибку:
2011.10.06 23:00:34 Solaris executor EURUSDm,M1: cannot call function 'InfoOfTrading' from dll 'Solaris.dll' (error 127)
Приведите описание прототипа функций, пожалуйста. Скорее всего для MT5 Вы использовали _stdcall оформление.
У MT5 более гибкий механизм связывания имен DLL функций - он автоматически поддерживает как _stdcall (более продвинутый с декорированием имени), так и _cdecl (старый классический метод). МетаТрейдер 4 поддерживает только вызовы _cdecl.
Прочтите статью "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - там детально рассказывается об вызовах DLL функций.
Приведите описание прототипа функций, пожалуйста. Скорее всего для MT5 Вы использовали _stdcall оформление.
У MT5 более гибкий механизм связывания имен DLL функций - он автоматически поддерживает как _stdcall (более продвинутый с декорированием имени), так и _cdecl (старый классический метод). МетаТрейдер 4 поддерживает только вызовы _cdecl.
Прочтите статью "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - там детально рассказывается об вызовах DLL функций.
Попробовал так объявлять:
и так:
вместо прежней:
но теперь другая ошибка:
2011.10.07 01:35:05 Solaris executor EURUSDm,M1: function 'InfoOfTrading' call from dll 'Solaris.dll' critical errorСтатью я читал.
В настройках проекта явно указал способ вызова:
А в MT5 по прежнему работает без ошибок.
Вообще в справке сигналы описываются именно так, как Вам нужно. Вот здесь можно увидеть. А на рисунке у Вас видны настройки ещё от индикатора CCI. То есть скорее всего у Вас собран эксперт не только по сигналам индикатора Envelopes. Есть ещё CCI.
Ну да, извините. Не ту картинку выложил. Но это не меняет дело. Вот картинка от советника только на envelopes.
Что мне делать? как это исправить?
К стати, в примере сурса из стандартной поставки МТ4 вызов через __stdcall:
и работает нормально.
К стати, в примере сурса из стандартной поставки МТ4 вызов через __stdcall:
и работает нормально.
В МТ4 примере:
MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)
и имена экспортируемых функций явно описываются через *.def файл:
LIBRARY ExpertSample
EXPORTS GetIntValue
GetDoubleValue
GetStringValue
GetArrayItemValue
SetArrayItemValue
GetRatesItemValue
SortStringArray
ProcessStringArray
stdcall оказывается поддерживается. Не уверен, что правильно описывать передачу параметров через & для четверки.
В МТ4 примере:
MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)
и имена экспортируемых функций явно описываются через *.def файл:
LIBRARY ExpertSample
EXPORTS GetIntValue
GetDoubleValue
GetStringValue
GetArrayItemValue
SetArrayItemValue
GetRatesItemValue
SortStringArray
ProcessStringArray
stdcall оказывается поддерживается. Не уверен, что правильно описывать передачу параметров через & для четверки.
Напрочь я разучился за 2 года работать с 4-кой. :)
1. Оказывается, в переменную, переданную по ссылке, нельзя писать в dll. Для этого нужно использовать массив.
2. И в обязательном порядке нужно использовать *.def файл.
Вот, собственно, 2 отличия работы с dll 4-ки и 5-ки, которые я обнаружил, возможно есть ещё.