-
- Функции
Для получения позиций клиента по акциям и облигациям пользователю доступны следующие функции:
Все перечисленные выше функции (кроме getBought и getSold) работают только для акций и облигаций. В качестве клиента, для которого они возвращают позицию, используется выбранный клиент в раскрывающемся меню в панели управления, либо клиент, установленный для данного скрипта функцией setClient().
Обратите внимание, что позицию по конкретной бумаге вы можете отслеживать в поле структуры сделки (поле currentpos).
Механизм отслеживания позиций для рынка ФОРТС реализован с большими отличиями от того, как это реализовано для рынка акций и облигаций. По причине того, что для рынка ФОРТС много данных рассчитывается и изменяется в реальном времени или во время клиринга, клиент Transaq не имеет постоянно актуальной информации по позициям клиента. Для того, чтобы их получить, требуется отправить отдельный запрос на сервер, после чего через доли секунды (при хорошей связи) от сервера приходит информация по текущим позициям FORTS.
Как только позиции получены, их можно прочитать с помощью функции getFORTSPosition() (если интересуют контракты) либо getFORTSMoney (если интересуют деньги).
Перечисленные функции имеют следующие аргументы:
В момент, когда от сервера приходят данные о позициях, они сохраняются в локальном хеше, и при вызове getFORTSPosition или getFORTSMoney считываются из него в хеш. Соответственно вызывать эти функции можно в любой момент, но то что они вернут будет актуально лишь на момент последнего выполненного запроса к серверу.
Хеш, возвращаемый функцией getFORTSMoney имеет следующие поля:
Хеш, возвращаемый функцией getFORTSPosition имеет следующие поля:
Данные поля имеют отношение лишь к тому инструменту, идентификатор которого был передан функции getFORTSPosition в качестве аргумента.
В сам момент получения данных от сервера генерируется Окружение ATF CLIENT_HOLDINGS, по которому можно отследить момент получения свежих данных. Более простыми словами, в момент получения данных от сервера, в ATF срабатывает переопределяемая пользователем функция onEnvEvent(eventname), аргументом для которой передается строка «CLIENT_HOLDINGS»:
function onEnvEvent(var eventname) { if (eventname == "CLIENT_HOLDINGS") { // Здесь мы знаем, что только что // была получена свежая информация // о позициях клиента } }
Дополнительно к этому для ФОРТС доступны функции:
Эти функции рассчитываются за весь день и за предыдущую вечернюю сессию для текущего клиента.
Так же возможно использования поля currentpos в структуре сделки.
Начиная с версии ATF 1.19 доступнен так же запрос лимитов по клиенту. Общая техника работы с лимитами такая же ,как и с позициями FORTS: вначале отправляется запрос на получение лимитов, затем в асинхронном режиме можно получать последние данные, которые прислал сервер Transaq. Само событие прихода лимитов от сервера обозначается событием окружения CLIENT_LIMITS. Следующий пример демонстрирует каким образом можно получить количество свободных денег и вывести их в диалог при нажатии Shift+M:
#samewindow #line 0 nodraw function onEnvEvent(var event) { if (event == "CLIENT_LIMITS") { var limits = getClientLimits(getClient()); signal::outputMultiple(limits["money_free"]); } } function onKeyDown(var key) { if (key == chr2num("M") and isKeyPressed(KEY_LSHIFT)) { requestClientLimits(getClient()); } }
Функции для запроса и получения лимитов:
При получении от сервера лимитов генерируется событие окружения CLIENT_LIMITS.
Хэш, возвращаемый функцией getClientLimits, имеет следующие поля:
Так же позицию по заявкам, сделкам и портфелю можно отслеживать с помощью обычных функций работы с заявками и сделками (основное внимание заслуживает поле currentpos в структуре сделки):