Логотип Парус Инвестора
Парусник
Цена деления цифровой шкалы
Системы и стратегии

Учебник по языку программирования Easy Language

ГЛАВА 6. EasyLanguage и Другие Языки

EasyLanguage дает возможность Вам использовать функции, постоянно находящиеся в библиотеках динамической связи (написанных или в ваших торговых сигналах, методиках анализа и функциях). Это означает, что в дополнение ко всем зарезервированным словам EasyLanguage и функциям, Вы также имеете в вашем распоряжении любую функцию в DLL, которые написаны в C или с использованием TradeStation Technologies EasyLanguage DLL Extension Kit, который состоит из четырех файлов и детальной документации. Эта глава представляет Вам это комплект и обсуждает использование функций DLL с EasyLanguage.

Это - усложненный раздел, и эта глава предполагает, что Вы знаете C, а также как создать Windows DLL файл.

Определение Функции 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.


Использование Типов данных Указателя

Типы данных указателя предназначены, чтобы передать адреса памяти и пункты данных к функции DLL. Все указатели, используемые в EasyLanguage, обрабатываются как 32-разрядные указатели. Чтобы получить указатель любого элемента данных в EasyLanguage, пользователь должен поставить перед элементом данных амперсанд (&).

Например, чтобы обратиться к адресам открытия и максимума бар назад и значению переменной value1 два бара назад, Вы используете следующие выражения:


&Open Address of the open price of the current bar.


&High[1] Address of the high price of the previous bar.


&Value1[2] Address of the Value 1 variable of two bars ago.


EasyLanguage в настоящее время поддерживает адреса для следующих объектов данных:

Все значения Date, Time, Open, High, Low, Close, Volume, OpenInt.

Все true/false и числовые переменные, включая предопределенные переменные.

Все true/false и числовые массивы.

Текстовые строки передают адрес как значение по умолчанию, когда используется тип параметра LPSTR . Не изменяйте размер переданной строки в пределах вашего DLL, поскольку это может вызвать непредсказуемые результаты.

Следующий пример использует правильный синтаксис для включения типа данных указателя как один из параметров, посланных функции от DLL в инструкции.

DefineDLLFunc: "C:\UserDLL\MyLib.DLL",int,"MyFunc", LPLONG;
If MyFunc(&Close) > 0 Then
    Buy next bar at market;

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

ЗАПРЕЩЕНО: следующий пример запрещен в текущей версии EasyLanguage, поскольку он приводит к непредсказуемому результату, когда на Value1 ссылаются в более позднее время.

Value1 = &Open;

Также, не предполагайте, что есть какие-либо отношения между двумя адресами памяти. Например, не применяйте &Open[1] как равный &Open[0] плюс 4. Вы должны всегда использовать обеспеченные Функции ELKIT32, чтобы исполнить вычисления указателя.

Использование Функций от DLL

Однажды определенную инструкцией DefineDLLFunc функцию DLL можно вызвать от EasyLanguage способом, аналогичным вызову любой другой функции EasyLanguage. Функцию DLL можно вызвать в пределах выражения или как явную инструкцию, если возвращаемое значение не используется. Чтобы вызывать функцию DLL, пользователь должен определить имя функции и включить все параметры в пределах круглых скобок. Если используются множественные параметры, они должны быть отделены запятыми.

Например, чтобы использовать функцию по имени MessageBeep, которая включена в USER32.DLL, может использоваться следующая инструкция:

DefineDLLFunc: "USER32.DLL",bool, "MessageBeep", int;
If Open > Close Then
    MessageBeep (0);

Второй пример:

DefineDLLFunc: "MYLIB.DLL", int, "MyAverageFunc", multiple;
Value1 = MyAverageFunc ("Open = ", (LONG)Open);

Возвращаемое значение функции MyAverageFunc назначено на Value1. Обратите внимание, что спецификатор типа данных (LONG) включается перед значением второго параметра. Этот спецификатор необходим, потому что MyAverageFunc объявляет множественные поля параметра. В этом образце, спецификатор типа данных должен предшествовать каждому параметру. Исключение к этому правилу - когда текстовая строка используется как параметр функции DLL как в Примере 2. С учетом этого исключения мы знаем, что типом данных должен быть LPSTR. Поэтому, никакой спецификатор типа данных не необходим, даже когда используется MULTIPLE . Это - к тому, почему нет никакого спецификатора типа данных перед строкой "Open =".

Дополнительно о EasyLanguage DLL Extension Kit

EasyLanguage DLL Extension Kit состоит из четырех файлов:

ELKIT32.DLL
ELKIT32.H
ELKITVC.LIB (для использования только с VC++)
ELKITBOR.LIB (для использования только с Borland Builder)

Эти файлы расположены в каталоге \Omega Research\Program, а документация для комплекта представлена на компакт-диске программы.

EasyLanguage Toolkit Library (ELKIT32.DLL) - динамически компонуемая библиотека, которая предоставляет полезные функции, которые можно вызвать от любого пользовательского DLL. Обычно используется, чтобы найти адрес смещения EasyLanguage объекта данных изнутри пользовательского DLL.

Чтобы установить документацию, просмотрите компакт-диск программы и найдите папку по имени DEVKIT. Выполните файл setup.exe из этой папкой, чтобы установить документацию.




Содержание (Contents)
ГЛАВА 1: Введение
Что такое EasyLanguage?
Что Вы можете Создать?
Дополнительные Ресурсы
ГЛАВА 2: Основные Элементы EasyLanguage
Как работает EasyLanguage
О Языке
Ссылка на Ценовые Данные
Выражения и Операторы
Ссылка на Предыдущие Значения
Управление Датами и Временем
Использование Переменных
Использование Констант
Управляющие структуры EasyLanguage
Запись Предупреждений
Понятие Массивов
Понятие Функций Пользователя
Методы Вывода
Текстовый Объект на Ценовых Диаграммах
Trendlines на Ценовых Диаграммах
Понятие Полей Данных
Мультимедиа и EasyLanguage
ГЛАВА 3: EasyLanguage для TradeStation
Запись Торговых Сигналов
Механизм Тестирования Торговой Стратегии
Торговые Приказы
Понятие Встроенных Стопов
Запись Индикаторов и Изучений
Запись ShowMe и PaintBar
Запись ProbabilityMap
Запись ActivityBar
ГЛАВА 4: EasyLanguage для RadarScreen
Запись Индикаторов RadarScreen
Запись Индикаторов для Супердиаграмм SE
Определение Доступности Индикаторов
ГЛАВА 5: EasyLanguage для OptionStation
Анализ данных OptionStation
Чтение Данных OptionStation
Запись Индикаторов OptionStation
Запись Индикаторов для Супердиаграмм SE
Запись Поиска Стратегий
Запись Моделей OptionStation
Глобальные переменные OptionStation
ГЛАВА 6: EasyLanguage и Другие Языки
Определение Функции DLL
Использование Функций DLLs
Дополнительно О EasyLanguage DLL Extension Kit
ПРИЛОЖЕНИЕ 1. Синтаксические ошибки EasyLanguage
61 - 223
224 - 307
308 - 569
ПРИЛОЖЕНИЕ 2. Цвета, Размеры и Коды EasyLanguage




На правах рекламы:
пропуск на мкад здесь