![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim);
в этой строке данные типа "TDateTime *tim" Омегой не поддерживаются.
То есть работают пока только функции старта и финиша терминала, те где не задаются параметры. Там где задаются параметры нужно знать какие именно параметры принимает ДЛЛ, неплохо было бы иметь примеры.
Думаю придётся смотреть пример на Дельфи с программистом он сможет сказать что там именно надо, а потом искать средства Омеги для поставки ДЛЛ необходимых параметров. Если бы ВЫ захотели выпустить версию ДЛЛ специально для Омеги то это бы неизмеримо облегчило её быстрое тестирование и использование, думаю пользователей нашлось бы немало именно с Омегой. Заинтересованные уже есть. Прилагаю маленькую вытяжку из Хелпа Омеги:
Важный момент список поддерживаемых типов данных см. ниже.
Определение Функции DLL
Прежде, чем Вы сможете вызвать функцию DLL от EasyLanguage, Вы должны объявить DLL с использованием DLL инструкции Function Declaration.
Синтаксис:
DefineDLLFunc: "DLLNAME.DLL", Return Type, "FunctionName", Parameters;
DLLNAME.DLL - имя DLL, где функция постоянно находится, Return Type - тип выражения, которое функция возвратит, FunctionName - имя функции как определено в DLL, Parameters - список параметров, ожидаемых функцией (каждый параметр, отделенный запятой).
Очень важно помнить, что 32-разрядные DLLs используют экспортируемые объявленные функции с учетом регистра, используя _cdecl, stdcall, или fastcall. Для DLLs, чтобы быть совместимым с EasyLanguage, экспортируемые функции должны быть созданы с использованием прописных букв и должны объявлены как _stdcall. Эти экспортируемые функции должны быть перечислены в пределах раздела EXPORTS .DEF файла DLL. Использование "_declspec (dllexport)" от прототипа функции недостаточно для EasyLanguage, чтобы определить местонахождение экспортируемых функций DLL.
Например, следующая инструкция объявляет функцию по имени MessageBeep, которая постоянно находится в DLL по имени USER32.DLL. Она возвращает булево (истинное/ложное) значение и ожидает один параметр, int.
DefineDLLFunc: "USER32.DLL", bool, "MessageBeep", int;
Data Types
EasyLanguage поддерживает множество типов достоверных данных, которые могут использоваться, чтобы посылать и получать информацию к функциям, содержавшимся в DLLs. Ниже - список типов данных, поддерживаемых EasyLanguage:
Фундаментальные типы данных:
BYTE
1 byte integer data type.
char
1 byte integer data type.
int
4 byte signed integer data type.
WORD
2 byte unsigned integer data type.
long
4 byte signed integer data type.
DWORD
4 byte unsigned integer data type.
float
4 byte floating point data type.
double
8 byte floating point data type.
BOOL
4 byte boolean data type.
Варианты:
UNSIGNED LONG
Same as DWORD.
VOID
Means "No returned value".
Типы указателей:
LPBYTE
Pointer to a BYTE.
LPINT
Pointer to an int.
LPWORD
Pointer to a WORD.
LPLONG
Pointer to a LONG.
LPDWORD
Pointer to a DWORD.
LPFLOAT
Pointer to a float (in float FAR).
LPDOUBLE
Pointer to a double (in double FAR).
LPSTR
Pointer to a char.
Все указатели - 32-разрядные указатели, и EasyLanguage обрабатывает каждого из них тем же самым способом.
Также, очень важно помнить, что все значения в EasyLanguage - плавающие, кроме значений Open, High, Low and Close, которые являются целыми числами. Чтобы управлять этими ценами, Вы должны послать функции ценовой масштаб символа, который составляет график.
Например, если бумага имеет ценовой масштаб 1/1000, а окончательная цена была 105.125, эту цену будут посылать DLL как 105125. Для DLL, чтобы знать, как читать эту цену, Вы должны послать значение в зарезервированном слове PriceScale, которое в этом случае возвращает значение 1 000.
int TikKot(char *kotx, double *bid, double *ask, TDateTime *tim);
в этой строке данные типа "TDateTime *tim" Омегой не поддерживаются.
Теперь все понятно. Для обхода данной проблемы попробуйте указать в Омеге вместо TDateTime тип double - т.е. int TikKot(char, double, double, double);
На самом деле эти типы легко взаимозаменяются и используют по 8 байт памяти. Удачи!
Зчем? Ведь в описании есть:
Pointer to a char.
Это тоже самое. А в документации Омеги есть примеры для этих типов переменных? Нужно там внимательно посмотреть похожие варианты. Удачи!
Вот из хелпа про вызов ДЛЛ:
Note: 32-bit DLLs use case-sensitive exported functions declared using _cdecl, _stdcall , or fastcall. For DLLs to be compatible with EasyLanguage, exported functions should be created using all uppercase letters and be declared as _stdcall. These exported functions must be listed within the EXPORTS section of the DLL's .DEF file. Using "_declspec (dllexport)" from the function's prototype is not sufficient for EasyLanguage to locate a DLL's exported functions.
Значит здесь говорится о том что Омега работает только с теми Функциями которые написаны БОЛЬШИМИ БУКВАМИ. Я проверил как написано в другой ДЛЛ, действительно только БОЛЬШИМИ БУКВАМИ.
Если Вы измените вызов Функций (названия большими Буквами) то тогда можно будет тестировать дальше.
Лично я очень заинтересован в Вашем продукте и моя к Вам просьба подогнать ДЛЛ под Омегу. Надеюсь получится... успехов!
Если Вы не хотите тогда напишите здесь пожалуйста, придётся работать над другим решением автоматизации торговли. Спасибо.
Если Вы измените вызов Функций (названия большими Буквами) то тогда можно будет тестировать дальше.
Лично я очень заинтересован в Вашем продукте и моя к Вам просьба подогнать ДЛЛ под Омегу. Надеюсь получится... успехов!
Я сделал вариант с большими буквами функций и отправил его на Ваш ящик. Удачи!