univer.ua

УНИВЕР – лоцман фондового рынка Украины

задать вопрос
(044) 490-20-55









Раздел 8. Алгоритмический язык QPILE

8.1 Общие положения
8.2 Работа с таблицами QPILE
8.3 Структура файла программы
8.4 Конструкции языка QPILE
8.5 Общие функции
8.6 Математические функции
8.7 Функции для работы с коллекциями объектов (COLLECTION)
8.8 Функции для работы с ассоциативными массивами (MAP)
8.9 Функции для обращения к строкам произвольных таблиц QUIK
8.10 Функции для обращения к спискам доступных параметров
8.11 Функции для работы с программируемой таблицей
8.12 Функции для получения значений Таблицы текущих значений параметров
8.13 Функции для получения значений Окна котировок
8.14 Функции для получения значений Таблицы лимитов по бумагам
8.15 Функции для получения значений Таблицы лимитов по денежным средствам
8.16 Функции расчета маржинальных позиций
8.17 Функции получения значений таблиц «Клиентский портфель» и «Купить/Продать»
8.18 Функции для работы с файлами
8.19 Функции для работы со строками
8.20 Функции для работы с графиками
8.21 Функции для работы с заявками
8.22 Функции для работы с метками
8.23 Сервисные функции
8.24 Отладка программ QPILE
ПРИЛОЖЕНИЕ 1. Синтаксис команд языка QPILE
ПРИЛОЖЕНИЕ 2. Рекомендации к составлению программ на QPILE

Раздел описывает применение алгоритмического языка QPILE, встроенного в Рабочее место системы QUIK. В начале раздела рассматривается базовый функционал клиентского места, предназначенный для работы с программируемыми таблицами. Для пользователей, заинтересованных в разработке собственных программ в документации приводится описание конструкций языка QPILE и встроенных функций языка, а также пример реализации – расчет показателей маржинального кредитования по методике ФСФР.

8.1 Общие положения

8.1.1 Назначение

Язык QPILE (QUIK Programmable Interface and Logic Environment) представляет собой набор команд, интерпретируемых рабочим местом QUIK.
Областью применения QPILE является создание новых таблиц для расчета в режиме реального времени собственных показателей на основе информации из других таблиц.
Данный функционал удобен, прежде всего, для брокера, так как у каждого брокера существует своя собственная стратегия расчета показателей клиентской позиции. Применение встроенного языка позволяет реализовать практически любой алгоритм.

Примеры использования QPILE:
1. Динамический пересчет стоимости активов клиентов на рабочем месте брокера.
2. Динамический пересчет стоимости активов в портфеле клиента и его суммарной стоимости.
3. Вычисление показателей, отсутствующих в системе QUIK либо торговой системе биржи, на основе собственных алгоритмов.
4. Расчет параметров маржинального кредитования в соответствии с принятыми нормативами.
5. Программирование торговой стратегии, генерирующей сигналы на изменение позиций по инструментам.

Основной областью применения языка QPILE является расчет стоимости портфелей ценных бумаг, поэтому в терминологии описания типов таблиц часто используется определение «Портфели».

8.1.2 Как работает QPILE

1. Структура таблицы (назначение столбцов, строк, и формулы для вычисления параметров) описывается в виде программы на языке QPILE. Для вычисления в формулах можно использовать стандартные математические и логические операции, использовать переменные и массивы данных, запрашивать информацию из других таблиц системы QUIK.
2. Код программы может быть получен с сервера QUIK (серверный) или загружен с диска на компьютере пользователя (локальный). Полученный код обрабатывается интерпретатором языка QPILE на рабочем месте QUIK, который производит пересчет значений в формулах с заданной периодичностью. Таким образом формируется внутренний источник данных для отображения полученных значений в таблицах. Несколько таблиц на основе одной и той же программы используют общий источник данных, при этом вычисления не будут дублироваться и снижать производительность системы.
3. На основе программы можно создавать таблицы, обладающие стандартными функциями при работе с таблицами в системе QUIK.
4. Рабочее место QUIK имеет встроенный отладчик кода программ на QPILE, позволяющий вести пошаговую отладку и контролировать текущие значения переменных. Подробнее см. п. 8.24.

8.1.3 Основные возможности

Основные функции языка QPILE:
1. Описание новых таблиц произвольной структуры,
2. Вычисление полей таблиц на основе математических формул и логических выражений,
3. Выделение ячеек таблицы цветом в зависимости от значений какого-либо показателя,
4. Уведомление пользователя звуковым сигналом и текстовыми сообщениями.
Таблица на языке QPILE поддерживает основные действия с таблицами в системе QUIK:
● Редактирование, в том числе выбор параметров для отображения и настройку их очередности,
● Управление «горячими клавишами»,
● Размещение на «экранных закладках»,
● Поиск значения в ячейках таблицы,
● Печать таблицы с предварительным просмотром,
● Копирование данных в Буфер Обмена Windows (Clipboard),
● Экспорт данных в Excel,
● Экспорт данных по ODBC.
В качестве исходных данных для расчетов параметров таблиц может использоваться информация из следующих типов таблиц QUIK, а также из графиков:




8.1.4 Функциональные ограничения

Текущая версия языка QPILE и созданные на его основе таблицы не поддерживают следующих операций:
● Сортировку в таблицах,
● Применение фильтров,
● Использование таблицы в качестве источника данных для построения графиков,
● Сохранение данных из таблицы в текстовый файл через контекстное меню,
● Экспорт данных в системы технического анализа.

8.2 Работа с таблицами QPILE

8.2.1 Загрузка программы

Этот этап добавляет описания собственных таблиц в список доступных типов. Если предполагается работа с описаниями таблиц на сервере, его можно пропустить.
Загрузка кода программы выполняется выбором пункта меню программы Таблицы/Портфели/ Задать портфель, или нажатие клавиш «Ctrl»+«F10».
1. Нажмите кнопку «Прочитать из файла» и выберите файл, загружаемый с диска. Файлы имеют стандартные расширения «.QPL». Название таблицы появится в списке «Доступные портфели».
2. При чтении файла осуществляется проверка правильности программы. Если программа содержит ошибки, система уведомит об этом в «Окне сообщений». В сообщении указывается имя файла и номер строки, в которой обнаружена ошибка.
3. Если файл прочитан успешно, то в полях отобразятся соответствующие параметры:


4. Для загрузки прочитанной из файла таблицы нажмите кнопку «Загрузить локально».
5. Кнопка «Загрузить на сервер» позволяет загрузить программу на сервер, которая станет доступна всем его пользователям. Право загрузки программ на сервер назначается администратором системы QUIK.



При локальной загрузке код исполняется на текущем рабочем месте и просмотр таблицы на его основе доступен тоже только на этом месте.

РЕКОМЕНДАЦИИ: Первую загрузку каждого нового описания настоятельно рекомендуется производить локально, а уже после просмотра и проверки корректности его работы и расчета параметров – загружать на сервер.

8.2.2 Настройка параметров программы

Этот этап определяет список обрабатываемых программ и определяет периодичность вычислений. Если программы были загружены локально, то они автоматически помечаются выбранными.
Выбор доступных программ с описаниями типов таблиц выполняется выбором пункта меню программы Таблицы/Портфели/Доступные портфели, или нажатием клавиш «Ctrl»+«F11».
1. В списке «Доступные портфели» приведены все программы, доступные пользователю для создания таблиц, как загруженные локально, так и серверные. Выберите программу из числа доступных, установив на ней флажок. В полях диалога отобразятся параметры, относящиеся к структуре программируемой таблицы.
2. Установите период расчета значений таблицы. Для исполнения программ с большим количеством вычислений период расчета значений рекомендуется устанавливать не менее 5-10 секунд.
3. Нажмите кнопку «Сохранить» для сохранения настроек.
4. Нажатие кнопки «Удалить» приводит к удалению из списка выбранной строки. Серверные типы таблиц удалить нельзя.
5. Нажатием кнопки «Формула» открывается окно с исходным кодом программы и описанием таблицы (справочно).
6. Чтобы закрыть окно с сохранением настроек, нажмите кнопку «Применить». Нажатие кнопки «Отмена» закрывает окно без сохранения изменений.



РЕКОМЕНДАЦИИ: Настройки данного этапа распространяются и на ранее созданные программируемые таблицы. Этот этап можно использовать для включения/отклю¬чения вычислений в таблицах, а также для регулирования частоты обновления данных в них.

Применение настроек к существующим таблицам:
● Как отключить пересчет значений в таблице?
1. Выберите пункт контекстного меню «Приостановить расчет» либо нажмите «Ctrl»+ «F11» и снимите флажок с требуемого типа таблицы. При этом в таблице будут отображены последние вычисленные значения.
2. Если по одной программе было сформировано несколько таблиц, то расчет приостановится во всех этих таблицах.
3. Для отключения пересчета во всех таблицах нужно нажать «Ctrl»+«F11» и снять все флажки.
● Как изменить период расчета в существующей таблице?
Выберите пункт контекстного меню «Параметры портфеля» или нажмите «Ctrl»+«F11», затем измените значение параметра «Период расчета (сек)» и нажмите кнопку «Применить».

8.2.3 Создание таблицы

Этот этап формирует таблицу на основании программы. На базе одной программы можно создать несколько таблиц для удобства их расположения на экране.
Создание программируемой таблицы выполняется выбором пункта меню программы Таблицы/ Портфели/Просмотр портфеля, или нажатием клавиш «Ctrl»+«F12».



1. Выберите программу в списке «Доступные портфели». В полях раздела «Текущий портфель» отобразятся данные по структуре таблицы.
2. Если необходимо, ограничьте количество отображаемых строк в таблице с помощью фильтра «Фильтр клиентов».
3. Сформируйте список столбцов таблицы из числа доступных параметров и последовательность их отображения в таблице. В поле «Описание параметра» справочно приводится расширенное описание выделенного параметра.
4. Нажатием кнопки «Да» создается таблица.

ПРИМЕЧАНИЕ: Полученная таблица имеет такие же функции управления, как и другие таблицы системы QUIK. Например, для редактирования таблицы можно нажать кнопку на панели инструментов, или клавиши «Ctrl»+«E».

РЕКОМЕНДАЦИИ: Расчет параметров таблицы ведется, в том числе на основе Таблицы текущих значений параметров. Убедитесь, что необходимые для расчета параметров данные принимаются с сервера (не отключены фильтром в списке принимаемых параметров и бумаг).

8.2.4 Функции, доступные в таблице

Данные таблицы доступны для копирования, экспорта в Excel, экспорта через ODBC.
Функции, доступные из контекстного меню таблицы:
● «Приостановить расчет» – остановить вычисление параметров таблицы (при этом в таблице отображаются последние вычисленные данные),
● «Начать расчет заново» – сбросить все значения и начать расчет заново,
● «Начать расчет в режиме отладки» – сбрасывает все значения, запускает окно отладки и начинает расчет заново,
● «Сохранить описание в файл» – сохранить в текстовый файл программу, описывающую данную таблицу,
● «Посмотреть формулу» – показать в окне код программы данной таблицы,
● «Параметры портфеля» – открыть окно с параметрами программы, в том числе период расчета в секундах.

ПРИМЕР: Локальная загрузка файла программы с расчетом показателей маржинального кредитования по методике ФСФР.
Пример находится в одном архиве с этим Руководством пользователя, в папке «qpile».

ЗАМЕЧАНИЕ: Перед загрузкой файла, приведенного в примере, измените код участника торгов в строках 4 и 60 на код фирмы Вашего брокера.

1. Нажатием клавиш «Ctrl»+«F10» открывается окно, в котором выбираем требуемый файл на диске (в примере это fkcb.qpl) и нажимаем кнопку «Открыть».
2. Нажимаем кнопку «Загрузить локально». В окне сообщений появляется уведомление о прочтении файла. Нажимаем кнопку «Выход».
3. Следующий этап пропускаем, потому что загруженные локально описания таблиц автоматически отмечаются доступными для создания таблиц.
4. Нажатием клавиш «Ctrl»+«F12» открывается окно создания таблицы. Формируем список «Заголовки столбцов» выбором параметров из числа доступных.
5. Нажатием кнопки «Да» создается таблица, в строках которой перечислены доступные счета клиентов, со следующими параметрами в столбцах:



8.3 Структура файла программы

Файл с кодом программы представляет собой текстовый файл в кодировке CP-1251 (Windows). Один файл служит для описания одного типа таблицы. Используются стандартные расширения имени файлов «.QPL».
Описание состоит из трех частей:
1. «Заголовок» – наименование таблицы и определение основных параметров,
2. «Тело программы» – собственно код программы,
3. «Описание столбцов таблицы» – определение названий столбцов и формата соответствующих им ячеек таблицы,
Все разделы являются обязательными и должны следовать строго друг за другом. Файл всегда начинается с заголовка и заканчивается строкой «END_PORTFOLIO» (в новой версии языка должно применяться «END_PORTFOLIO_EX»).
Примеры файлов см. в папке QPILE, которая поставляется вместе с Руководством пользователя.

8.3.1 Заголовок файла

Заголовок файла содержит основные параметры таблицы:


* – параметр предыдущей версии языка, в текущей версии является необязательным.

Каждый параметр должен быть описан на отдельной строке и заканчиваться символом «;».

Пример заголовка:

PORTFOLIO AVAILABLE_MONEY;
DESCRIPTION Доступные деньги клиента;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST MC0012300000;


Данная таблица будет отображаться в списке доступных с именем «AVAILABLE_MONEY». При выборе доступных описаний таблиц в поле «Текущий портфель» отобразится «Доступные деньги клиента». Это же наименование будет являться заголовком таблицы, принимаемым по умолчанию. Расчет параметров осуществляется по всем счетам клиентов, доступных пользователю в таблицах лимитов и имеющих код фирмы «MC0012300000».

8.3.2 Тело программы

Раздел содержит код программы для расчета значений в ячейках таблицы. Начало раздела обозначается строкой «PROGRAM», окончание – строкой «END_PROGRAM». Для выхода из тела программы используется оператор «RETURN».

Замечания:
1. Регистр символов (верхний или нижний) в командах по умолчанию игнорируется интерпретатором. Все строковые константы переводятся автоматически в верхний регистр. Но в случае необходимости можно отменить автоматический перевод сим¬волов в верхний регистр. Для этого необходимо между заголовком и телом програм¬мы добавить следующую строку:

USE_CASE_SENSITIVE_CONSTANTS

При добавлении указанного ключа имена строковых констант не будут переводиться в верхний регистр, а будут оставаться такими, какие они есть.
2. Множественные пробелы игнорируются интерпретатором, за исключением пробелов внутри строковых переменных.
3. Для переноса длинных строк используется комбинация «<пробел>_» в конце строки. Например:

CLIENTS_LIST 0001, 0002, 0003, 0004, 0005, 0006, 0007, 0008, 0009, 0010, _
0011, 0012, 0013, 0014, 0015;


4. Символ «’» является комментарием. Комментарий распространяется до конца строки.
5. Разделителем операторов служит перевод строки, т.е. каждый оператор описывается отдельной строкой.
Пример программы:

PROGRAM
FirmCode = "MC0012300000"
CurrentBalance = MONEY_CURRENT_BALANCE(ROWNAME, FirmCode, "EQTV", "SUR")
CurrentLimit = MONEY_CURRENT_LIMIT(ROWNAME, FirmCode, "EQTV", "SUR")
Locked = MONEY_LIMIT_LOCKED(ROWNAME, FirmCode, "EQTV", "SUR")
AvailableMoney = MoneyCurrentBalance + MoneyCurrentLimit – MoneyLocked
If AvailableMoney > 0
Status = "Заявки доступны"
Else
Status = "Заявки недоступны"
SET_ROW_COLOR(ROWNAME, "RGB(255,138,138)", "DEFAULT_COLOR")
End If
END_PROGRAM

Пример относится к формированию таблицы «Доступные деньги клиента». Создаваемая таблица будет частично дублировать поля Таблицы лимитов по денежным средствам, а также содержать два вычисляемых поля.

8.3.3 Определение столбцов таблицы

Для отображения в таблице вычисленных значений необходимо описать ее столбцы и формат соответствующих им ячеек таблицы. Для этого предназначен данный раздел файла.
Каждый столбец таблицы описывается следующим набором параметров:



Описание каждого параметра завершается строкой «END».
После описания параметров в конце файла обязательно должна быть строка «END_PORTFOLIO» для первой версии языка, либо «END_PORTFOLIO_EX» для его новой версии.

Пример описания:
PARAMETER AvailableMoney;
PARAMETER_TITLE Доступно;
PARAMETER_DESCRIPTION Доступные деньги клиента;
PARAMETER_TYPE NUMERIC(10,2);
END


Значения переменной «AvailableMoney» будут отображаться в столбце таблицы «Доступно». При настройке таблицы в поле «Описание параметра» отображается текст «Доступные деньги клиента». Данные в столбце будут отображаться в виде числа с двумя знаками после запятой. Этот же формат данных рекомендуется указывать при настройке экспорта из таблицы по ODBC.

8.3.4 Подключение дополнительных файлов

Для подключения дополнительных файлов с функциями к программе используется раздел INCLUDE. Данный раздел размещается между заголовком и телом программы и описывается следующим образом:
INCLUDE file1, file2, …, fileN;
где file1, file2, …, fileN – относительные или полные пути файлов с описанием функций (прописываются через запятую).

Пример описания:

INCLUDE C:/Program Files/ADDITION/object_1, C:/Program Files/ADDITION/object_2;

8.4 Конструкции языка QPILE

8.4.1 Типы данных

1. Различаются следующие типы данных:
● «STRING» – строковый,
«Суммарный спрос»

● «DOUBLE» – вещественный, или число с плавающей точкой. Точность – 15 десятичных разрядов, но не более 8 знаков после запятой.
1234567.89

● «COLLECTION» – коллекция,
Коллекция является списком объектов, с индексацией по целочисленному ключу (начиная с 0).



● «MAP» – ассоциативный массив,
Ассоциативный массив (MAP) является последовательностью пар (ключ, значение), которая обеспечивает получение значения по ключу. Каждому ключу соответствует максимум одно значение, иными словами, каждый ключ в ассоциативном массиве уникален. В качестве ключа всегда выступает строковое значение.



2. Типы данных «COLLECTION» и «MAP» являются структурными. Они могут:
● Быть неоднородными, т.е. содержать значения разных типов,
● Содержать в качестве значений элементы любых типов, в том числе и переменные типов «COLLECTION» и «MAP».
3. Область видимости всех переменных, кроме формальных параметров, является глобальной и определяется контекстом исполнения. Если в процессе исполнения переменная была присвоена, то она считается определенной до конца исполнения программы.
Переменные, сохраняющие свои значения между периодами расчета программы, именуются глобальными. Глобальные переменные описываются специальной функцией «NEW_GLOBAL ()» (см. п. 8.5.1).
4. Количество используемых в программе переменных ограничено 1000.

8.4.2 Приведение типов

1. Переменные языка не типизированы и могут изменять тип данных в процессе исполнения программы.
2. Применение операций «+», «-», «*», «/» к строковым переменным приводит их к вещественным значениям. Если такое приведение не возможно, то вещественное значение принимается равным «0.0». Для структурных переменных результат этих операций не определен.
3. Операция сравнения вещественных и строковых переменных допустима только для переменных со значениями одного типа. Для переменных структурных типов «COLLECTION» и «MAP» результат сравнения не определен.
4. Применение операции конкатенации строк «&» к вещественным переменным приводит их значения к строковым.
5. При вызове внешних функций всегда осуществляется приведение типов аргументов.
6. Изменение значений переменных структурных типов и обращение к их полям выполняется специальными функциями описанными в п. 8.7 – 8.8.

8.4.3 Выражения

1. Приоритет выполнения математических операций («+», «-», «*», «/», унарный «-») является стандартным.
2. Логические операции имеют одинаковый приоритет (за исключением «AND» и «OR») и исполняются слева направо. «AND» и «OR» исполняются в последнюю очередь, слева направо.

НАПРИМЕР:
A < B or A = C равносильно (A < B) or (A = C)


3. В выражениях и сравнениях возможно использование скобок.
Допустимые выражения:



ПРИМЕЧАНИЕ: При присвоении значения переменной необходимо использовать приведение типов данных. Например, выражение A=«3E2»+0 даст результат 300, в отличие от А=«5E3», которым переменной будет присвоено строковое выражение «5E3».

8.4.4 Условия

Синтаксис оператора условия:

IF условие
последовательность инструкций
ELSE
последовательность инструкций
END IF


«Условием» является логическое выражение. Вложенность операторов условия не ограничена. В операторе «END IF» допускается только один пробел.

Пример:
IF DealerMoney = 0
Margin = 100
ELSE
Margin=0
END IF

8.4.5 Циклы

Синтаксис оператора цикла:
1. выполняет «последовательность инструкций» для каждого значения «переменной», входящего в «список значений». «Список значений» определяется переменной типа «STRING» со значениями, перечисленными через запятую.

FOR переменная IN список значений
последовательность инструкций
END FOR


2. выполняет последовательность инструкций для каждого значения переменной в диапазоне от «значение1» до «значение2» с шагом 1, в качестве которых могут выступать математические выражения. Если «значение2» < «значение1», цикл не обрабатывается.

FOR переменная FROM значение1 TO значение2
последовательность инструкций
END FOR

Вложенность операторов цикла не ограничена. В операторе «END FOR» допускается только один пробел.
Пример:
FkcbSecsList = "HYDR,SBER,MSNG,LKOH,YUKO,RTKM"

FOR Sec IN FkcbSecsList
DCPos = DEPO_CURRENT_BALANCE(ROWNAME, FirmList, Sec, DefDepoAcc)
DCLim = DEPO_CURRENT_LIMIT(ROWNAME, FirmList, Sec, DefDepoAcc)
DOLim = DEPO_OPEN_LIMIT(ROWNAME, FirmList, Sec, DefDepoAcc)
SecPos = DCPos + DCLim – DOLim
SecPos = SecPos * GET_PARAM(ClassCode, Sec, "LAST") * GET_PARAM(ClassCode, Sec, "LOTSIZE")
DepoPos = DepoPos + ignore_negative(SecPos)
DealerMoney = DealerMoney + dealer(SecPos)
END FOR


Данный цикл перебирает все бумаги их списка бумаг «FkcbSecsList» и по каждой бумаге обрабатывает лимит по этой бумаге для текущего рассчитываемого клиента.
Для прерывания цикла до его окончания служит оператор «BREAK». Он прерывает выполнение оператора «FOR» и передает управление следующему за ним оператору.
Для передачи управления на следующую итерацию оператора «FOR» служит оператор «CONTINUE». В операторе «FOR» следующая итерация начинается вычислением выражения цикла оператора «FOR». После вычисления условного выражения в зависимости от его результатов происходит либо прекращение выполнения оператора либо выполнение его тела.

8.4.6 Функции

Общие положения:
1. Описания функций могут находиться в любом месте программы.
2. Все функции должны иметь различные имена – перегрузка по типу параметров и их количеству не осуществляется.
3. Функции могут возвращать значение с помощью переменной с именем «RESULT».
4. Все параметры передаются в функции по значению.
5. Функция может являться процедурой. В этом случае в месте вызова такой функции не используется возвращаемое значение, и присваивание переменной с именем «RESULT» внутри такой функции не обязательно.
6. Для выхода из тела функции может использоваться оператор «RETURN».

ЗАМЕЧАНИЯ:
1. В описании синтаксиса функций, возвращающих или принимающих переменную любого типа, для обозначения применяется тип «ANY».
2. Таблица, создаваемая при расчете программы, обозначается «OWN».
Функции, определенные пользователем, имеют следующий синтаксис:

FUNC функция (список аргументов)
последовательность инструкций
END FUNC

В операторе «END FUNC» допускается только один пробел.

Пример:
FUNC ignore_negative(x)
If x > 0
RESULT = x
Else
RESULT = 0
End If
END FUNC

8.4.7 Функции языка QPILE

Стандартные функции языка QPILE предназначены для работы со структурными типами переменных и получения значений из таблиц QUIK.







* – функции предыдущей версии языка QPILE, сохраненные для совместимости. Значения, возвращаемые этими функциями, также могут быть получены чтением строки таблицы функцией «GET_ITEM» и выборкой из нее значения функцией «GET_VALUE».

Функции предыдущих версий, поддержка которых прекращена:
● MONEY_LIMIT_LOCKED_NONMARGINAL_VALUE

8.5 Общие функции

8.5.1 NEW_GLOBAL

Функция предназначена для инициализации глобальной переменной. Глобальная переменная сохраняет свое значение между итерациями вычислений значений таблицы. Инициализация может быть выполнена переменной любого типа, при этом создается глобальная переменная соответствующего типа.
NEW_GLOBAL (STRING Name, ANY InitValue)

Параметры:



В качестве первого параметра может фигурировать строковая константа, либо же переменная, имеющая строковое значение. В последнем случае создается глобальная переменная с тем же именем, что и значение этой строковой переменной.

Пример:

NEW_GLOBAL("GLOBAL","MyFirstGlobal")
NEW_GLOBAL(Global,1)

После выполнения этих двух строк будут созданы две глобальные переменные. Строковая переменная с именем «GLOBAL» и значением «MyFirstGlobal», а также вещественная переменная с именем «MyFirstGlobal» и значением 1.

8.5.2 MESSAGE

Открывает Окно сообщений с заданным текстом.
MESSAGE (STRING Text, DOUBLE Msg_type)

Параметры:


Пример:

MESSAGE ("Hello!",1)

8.6 Математические функции

8.6.1 ABS

Возвращает модуль числа.
DOUBLE ABS (DOUBLE Value)

8.6.2 ACOS

Возвращает значение арккосинуса аргумента.
DOUBLE ACOS (DOUBLE Value)

8.6.3 ASIN

Возвращает значение арксинуса аргумента.
DOUBLE ASIN (DOUBLE Value)

8.6.4 ATAN

Возвращает значение арктангенса аргумента.
DOUBLE ATAN (DOUBLE Value)

8.6.5 CEIL

Возвращает ближайшее целое число, большее аргумента.
DOUBLE CEIL (DOUBLE Value)

8.6.6 COS

Возвращает значение косинуса аргумента.
DOUBLE COS (DOUBLE Value)

8.6.7 EXP

Вычисление экспонента от аргумента.
DOUBLE EXP (DOUBLE Value)

8.6.8 FLOOR

Возвращает ближайшее целое число, меньшее аргумента.
DOUBLE FLOOR (DOUBLE Value)

8.6.9 LOG

Вычисление натурального логарифма от аргумента
DOUBLE LOG (DOUBLE Value)

8.6.10 POW

Возведение аргумента в степень.
DOUBLE POW (DOUBLE Value, DOUBLE Power)

8.6.11 RAND

Возвращает случайное целочисленное значение в диапазоне от 0 до 32767.
DOUBLE RAND ()

8.6.12 RANDOMIZE

Генерация случайных чисел.
DOUBLE RANDOMIZE ()
Функция инициализирует генератор случайных чисел для определения случайной последовательности генерируемых чисел. Функцию RANDOMIZE () необходимо вызвать до того, как будет использоваться функция RAND().

8.6.13 SIN

Возвращает значение синуса аргумента.
DOUBLE SIN (DOUBLE Value)

8.6.14 SQRT

Возвращает значение квадратного корня аргумента.
DOUBLE SQRT (DOUBLE Value)

8.6.15 TAN

Возвращает значение тангенса аргумента.
DOUBLE TAN (DOUBLE Value)

Пример:
'
MESSAGE ("ACOS 0.5 – " & acos(0.5),1)
MESSAGE ("ASIN 0.5 – " & asin(0.5),1)
MESSAGE ("ATAN 2 – " & atan(2),1)
MESSAGE ("CEIL 2.2 – " & ceil(2.2),1)
MESSAGE ("COS 0.5 – " &cos(0.5),1)
MESSAGE ("EXP 2 – " &exp(2),1)
MESSAGE ("FLOOR 4.5 – " &floor(4.5),1)
MESSAGE ("LOG 0.5 – " &log(0.5),1)
MESSAGE ("POW 2,3 – " &pow(2,3),1)
MESSAGE ("RAND – " &rand(),1)
MESSAGE ("SIN 0.5 – " &sin(0.5),1)
MESSAGE ("SQRT 2 – " &sqrt(2),1)
MESSAGE ("TAN 0.5 – " &tan(0.5),1)

'
При выполнении примера на экране будет появляться Окно сообщений с отображением функции и результата вычисления ее значения.

8.7 Функции для работы с коллекциями объектов (COLLECTION)

Функции из этой группы предназначены для оперирования переменными типа COLLECTION.
Коллекция является списком объектов, с индексацией по целочисленному ключу (начиная с 0). Коллекция может содержать элементы любых типов, в том числе и переменные типа COLLECTION. Коллекция может быть неоднородной, т.е. содержать объекты разных типов. В текущей реализации доступ к элементу коллекции по индексу осуществляется за линейное время.

8.7.1 CREATE_COLLECTION

Первая функция создает пустую коллекцию, вторая является конструктором копирования.

COLLECTION CREATE_COLLECTION ()
COLLECTION CREATE_COLLECTION (COLLECTION IntValue)

8.7.2 GET_COLLECTION_COUNT

Функция возвращает количество элементов в коллекции.

DOUBLE GET_COLLECTION_COUNT (COLLECTION Name)

8.7.3 REMOVE_COLLECTION_ITEM

Функция удаляет элемент с индексом «index» из коллекции «Name».

COLLECTION REMOVE_COLLECTION_ITEM (COLLECTION Name, DOUBLE index)

8.7.4 INSERT_COLLECTION_ITEM

Функция вставляет значение «value» в качестве элемента с индексом «index».

COLLECTION INSERT_COLLECTION_ITEM (COLLECTION Name, DOUBLE index, ANY value)
Выполняется вставка в коллекцию элемента с индексом «index», существующий элемент коллекции с индексом «index» сдвигается на единицу в элемент с индексом «index+1», и т.д. для всех существующих элементов, индекс которых равен или больше значения индекса вставки. См. пример к п. 8.7.6.

8.7.5 SET_COLLECTION_ITEM

Функция заменяет значение элемента с индексом «index» на значение «value».
COLLECTION SET_COLLECTION_ITEM (COLLECTION Name, DOUBLE index, ANY value)

8.7.6 GET_COLLECTION_ITEM

Функция возвращает значение элемента с индексом «index».
ANY GET_COLLECTION_ITEM (COLLECTION Name, DOUBLE index)
Параметры:




Пример:

col=CREATE_COLLECTION()
FOR i FROM 0 TO 9
col=INSERT_COLLECTION_ITEM(col,0,0)
col=SET_COLLECTION_ITEM(col,0,i)
END FOR
s = GET_COLLECTION_ITEM(col,5)
len = GET_COLLECTION_COUNT(col)


Создается пустая коллекция. Затем 10 раз в коллекцию вставляется нулевой элемент со значением 0 и тут же его значение меняется на значение переменной цикла. В результате получается коллекция из 10-ти элементов. После выполнения программы «s»=4, «len»=10, а «col» имеет следующий вид:

8.8 Функции для работы с ассоциативными массивами (MAP)

Функции из этой группы предназначены для оперирования переменными типа MAP.
Ассоциативный массив (MAP) является последовательностью пар (ключ, значение), которая обеспечивает получение значения по ключу. Каждому ключу соответствует максимум одно значение. Ассоциативный массив может содержать элементы любых типов, в том числе и переменные структурных типов, разные элементы такого массива могут содержать объекты разных типов в качестве значений. В качестве ключа всегда выступает строковое значение. В текущей реализации доступ к элементу коллекции по ключу осуществляется за линейное время.

8.8.1 CREATE_MAP

Первая функция создает пустой массив, вторая является конструктором копирования.


MAP CREATE_MAP ()
MAP CREATE_MAP (MAP IntValue)

8.8.2 SET_VALUE

Функция добавляет в массив «Name» элемент со значением «Value» и ключом «Key». Если массив уже содержал элемент с ключом «Key», то значение этого элемента заменяется на «Value». Функция возвращает модифицированный массив.

MAP SET_VALUE(MAP Name, STRING Key, ANY Value)

8.8.3 GET_VALUE

Функция возвращает значение элемента с ключом «Key» из массива «Name». Если элемент не найден, то возвращается пустая строка.

STRING GET_VALUE(MAP Name, STRING Key)
Параметры:


Пример:

map=CREATE_MAP ()
FOR i FROM 0 TO 9
map=SET_VALUE(map, "key" & i, i)
END FOR
s = GET_VALUE(map, "key5")


Создается пустой массив. Затем, в цикле, в массив вставляются элементы со значением равным переменной цикла и ключом вида «"key" & i». После выполнения программы «s»=5.

ЗАМЕЧАНИЕ: Функция возвращает значение типа STRING, если оно не будет явно преобразовано к типу DOUBLE.

Например:

RES=0+GET_VALUE

8.9 Функции для обращения к строкам произвольных таблиц QUIK

Функции из этой группы предназначены для доступа к данным, содержащимся в таблицах Рабочего места QUIK.

8.9.1 GET_ITEM

Функция возвращает ассоциативный массив (MAP), содержащий информацию о данных из строки с номером «Index» из таблицы с именем «TableName».

MAP GET_ITEM(STRING TableName,DOUBLE Index)

Возвращаемый массив, в качестве своих элементов, содержит значения ячеек таблицы клиентского места, ключами элементов являются названия колонок. Возможные значения поля «TableName» и ключей приведены ниже в таблицах. Для программируемой таблицы «OWN» значения ключей соответствуют названиям колонок, указанным в секции описания параметров.

8.9.2 GET_NUMBER_OF

Функция возвращает количество записей в таблице TableName.
DOUBLE GET_NUMBER_OF(STRING TableName)
Параметры:


Пример:

n=GET_NUMBER_OF("ALL_TRADES")
value=0
FOR i FROM 1 to n
trade = GET_ITEM ("ALL_TRADES ", i)
value = value + GET_VALUE (trade, "VALUE")
END FOR


В данном примере сначала запрашивается количество записей в таблице всех сделок, затем в цикле для каждой записи получается соответствующий MAP из которого достается значение по ключу «VALUE». В итоге, переменная «value» содержит суммарный объем всех сделок на данный момент.

8.9.3 Описания таблиц и параметров

1. Таблицы, используемые в функциях «GET_NUMBER_OF» и «GET_ITEM»:



2. Описание параметров Таблицы заявок, возвращаемое функцией «GET_ITEM»:



3. Описание параметров Таблицы сделок, возвращаемое функцией «GET_ITEM»:




4. Описание параметров Таблицы всех сделок, возвращаемое функцией «GET_ITEM»:



5. Описание параметров Таблицы стоп-заявок, возвращаемое функцией «GET_ITEM»:






6. Описание параметров Таблицы лимитов по денежным средствам, возвращаемое функцией «GET_ITEM»:


7. Описание параметров Таблицы лимитов по бумагам, возвращаемое функцией «GET_ITEM»:



8. Описание параметров Таблицы ограничений по клиентским счетам, возвращаемое функцией «GET_ITEM»:



9. Описание параметров Таблицы позиций по клиентским счетам, возвращаемое функцией «GET_ITEM»:



10. Описание параметров Таблицы заявок на внебиржевые сделки, возвращаемое функцией «GET_ITEM»:





11. Описание параметров Таблицы сделок для исполнения, возвращаемое функцией «GET_ITEM»:



12. Описание параметров Таблицы заявок-отчетов на сделки РПС, возвращаемое функцией «GET_ITEM»:



13. Описание параметров Таблицы денежных позиций, возвращаемое функцией «GET_ITEM»:



14. Описание параметров Таблицы текущих позиций по бумагам, возвращаемое функцией «GET_ITEM»:



15. Описание параметров Таблицы текущих позиций по счетам, возвращаемое функцией «GET_ITEM»:



8.10 Функции для обращения к спискам доступных параметров

8.10.1 GET_CLASSES_LIST

Функция предназначена для получения списка кодов классов, полученных с сервера в ходе текущего сеанса связи. Разделителем в списке кодов классов выступает запятая «,».

GET_CLASSES_LIST ()

Пример:

ClassesList = GET_CLASSES_LIST ()


Переменной «ClassesList» присваивается список доступных классов, например «EQBR, EQBS, EQNL, EQOB, EQOS, EQNO».

8.10.2 GET_CLASS_SECURITIES

Функция предназначена для получения списка кодов бумаг для списка классов, заданного списком кодов. Разделителем в списке кодов бумаг выступает запятая «,».

GET_CLASS_SECURITIES (STRING)

Пример:

SecuritiesList = GET_CLASS_SECURITIES ("EQBR,GKO")

Переменной «SecuritiesList» присваивается список кодов всех доступных бумаг для классов «А1-Акции» и «ГКО».

8.10.3 GET_SECURITY_INFO

Функция возвращает информацию по бумаге с кодом «sec_code» из класса с кодом «class_code». Если «class_code» равен «», то ищет по всем классам до первого нахождения.

MAP GET_SECURITY_INFO (STRING class_code, STRING sec_code)

Параметры:


Пример:

SecInfo = GET_SECURITY_INFO("","YUKO")
Lot = GET_VALUE (SecInfo, "LOT_SIZE")


Переменной «SecInfo» присваиваются значения параметров бумаги «YUKO». Переменная «Lot» содержит количество бумаг в одном лоте «YUKO».

8.11 Функции для работы с программируемой таблицей

Следующий набор функций оперирует только с таблицей «OWN», создаваемой при расчете программы. Данная таблица доступна не только для чтения с помощью стандартных функции «GET_ITEM» и «GET_NUMBER_OF», но также и для модификации с помощью следующих функций.

8.11.1 ADD_ITEM

Данная функция вставляет строку с индексом «Index» в таблицу «OWN». Ассоциативный массив «table_string» используется для инициализации колонок таблицы значениями. «Table_string» должен содержать элементы с ключами равными названиям колонок.

ADD_ITEM (DOUBLE Index, MAP table_string)

8.11.2 MODIFY_ITEM

Функция модифицирует уже существующую строку с индексом «Index» с помощью массива «table_string».

MODIFY_ITEM (DOUBLE Index, MAP table_string)

8.11.3 DELETE_ITEM

Функция предназначена для удаления строки с индексом «Index».

DELETE_ITEM (DOUBLE Index)

8.11.4 DELETE_ALL_ITEMS

Функция полностью очищает таблицу «OWN».

DELETE_ALL_ITEMS()

Параметры:


Пример:

st=CREATE_MAP()
st=SET_VALUE(st, "Value",10)
ADD_ITEM(1,st)
st=GET_ITEM ("OWN",1)
value=GET_VALUE(st,"Value")
DELETE_ALL_ITEMS()


Данный пример может работать только с таблицей, содержащей единственную колонку с именем «Value». Сначала создается массив, содержащий элемент со значением «10» и ключом «Value». Затем, в таблице создается строка с индексом «1» и значением колонки «Value» равным «10». В дальнейшем строка с индексом «1» считывается обратно в массив и значение элемента с ключом «Value» попадает в переменную «value». И, наконец, все строки таблицы удаляются вызовом

«DELETE_ALL_ITEMS()».

8.11.5 SET_ROW_COLOR

Функция назначения цвета фона указанной строки таблицы. Данная функция относится к предыдущей версии языка и сохранена для совместимости.

SET_ROW_COLOR (STRING client_code, STRING background_color, STRING selected_background_color)

Параметры:



Цвет фона (подсветки) задается макросом «RGB(, , )». Например, если в качестве параметра цвета передадите в функцию строку «RGB(255, 0, 0)», то цвет подсветки установится в красный. Для использования системного цвета по умолчанию используйте строку «DEFAULT_COLOR».
Пример:

SET_ROW_COLOR (ROWNAME, "RGB(0,255,0)", "DEFAULT_COLOR")

Основной цвет строки таблицы для текущего рассчитываемого клиента здесь устанавливается в зеленый, цвет выделенной строки – по умолчанию.

8.11.6 SET_ROW_COLOR_EX

Функция назначения цвета фона и шрифта указанной строки таблицы.

SET_ROW_COLOR_EX (DOUBLE row_number, STRING background_color, STRING selected_background_color, STRING font_color, STRING selected_font_color)

Параметры:



Цвет фона (подсветки) задается макросом «RGB(, , )». Например, если в качестве параметра цвета передадите в функцию строку «RGB(255, 0, 0)», то цвет подсветки установится в красный. Для использования системного цвета по умолчанию используйте строку «DEFAULT_COLOR».
Пример:

SET_ROW_COLOR_EX (10, "DEFAULT_COLOR", "DEFAULT_COLOR", "RGB(0,255,0)", "RGB(0,0,255)")


Основной цвет шрифта для 10-й строки таблицы устанавливается в зеленый. При выделении её курсором цвет шрифта станет синим.

8.12 Функции для получения значений Таблицы текущих значений параметров

8.12.1 GET_PARAM

Функция предназначена для получения значения параметров биржевой информации. С помощью этой функции можно получить данные из Таблицы текущих значений параметров для заданных кодов класса и бумаги.
GET_PARAM (STRING classcode_list, STRING seccode, STRING param_name)
Параметры:


Пример:

LastPrice = GET_PARAM ("EQBR", "HYDR", "last")

Переменной «LastPrice» присваивается значение цены последней сделки для «РусГидро» из класса «А1-Акции ММВБ».

8.12.2 GET_PARAM_EX

Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих значений параметров. С помощью этой функции можно получить любое из значений Таблицы текущих значений параметров для заданных кодов класса и бумаги.

MAP GET_PARAM_EX (STRING classcode, STRING seccode, STRING param_name)

Функция возвращает результат выполнения операции: «0» – ошибка, «1» – параметр найден. Значения параметров должны быть указаны в верхнем регистре, если в коде программы используется команда USE_SENSITIVE_CONSTANTS (см. п. 8.3.2).
Параметры:



«MAP» имеет структуру:


Пример:

Param=GET_PARAM_EX("EQBR","RTKM","WAPRICE")

Переменной «Param» присваивается значение средневзвешенной цены по обыкновенным акциям «Ростелекома» из класса «А1-Акции ММВБ».