Найти тему
Код торгового робота

Проверка остатков денежных средств средствами QLUA

Всем привет!

Сегодня поговорим о встроенной команде QLUA, которая позволяет проверять остатки денежных средств. Эти данные необходимы для функционирования любого торгового скрипта.

Встроенная команда с помощью которой можно получить остатки денежных средств – getMoneyEx().

Это встроенная команда QLUA и о ней можно прочитать подробную справку (см. файл «QLUA.chm» в папке с установленной программой QUIK).

Рассмотрим что в этой справке написано:

getMoneyEx(STRING firmid, STRING client_code, STRING tag, STRING currcode, NUMBER limit_kind).

Как можно понять, для Вызова данной функции требуются данные, указанные в скобках.

И это следующий данные:

firmid – ID Фирмы в строковом формате;

client_code – код клиента в строковом формате;

tag – код позиции в строковом формате;

currcode – код валюты в строковом формате;

limit_kind – число, отражающее режим остатка (0 соответствует сроку расчета Т0, 1 - Т1, 2 - Т2 и т.д.).

Давайте разбираться с этими данными.

По переменным firmid, client_code, tag – нажимаем на иконку «Создать новое окно» с зеленым кругляком и плюсом в центре. В открывшемся окне выбираем «Позиции по деньгам».

Форма "Создание нового окна" в программе QUIK
Форма "Создание нового окна" в программе QUIK

Откроется такое окно:

Таблица "Позиции по деньгам" в программе QUIK.
Таблица "Позиции по деньгам" в программе QUIK.

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

Итак, переменная firmid находится в колонке «Фирма». В моем случае это – NC0011100000

Код клиента – переменная client_code находится в колонке «Код клиента». В моем случае – 10646.

Переменная tag находится в колонке «Код позиции». Честно сказать, я не знаю к чему тут этот код. Я встречался только с одним значением - "EQTV". Как и в примере на картинке выше.

Осталось разобраться с currcode – кодом валюты.

Тут могут быть следующие значения:

«SUR» - российский рубль;

«EUR» - евро;

«USD» - американский доллар;

«GBP» - английский фунт стерлингов;

«CNY» - китайский юань.

Может быть может быть и еще что-то. Но, я в системе вижу только такие валюты.

Ну, и по поводу переменной limit_kind. Я очень надеюсь, что те, кто меня читает, разбираются в режимах торгов «Т0», «Т1», «Т2».

Я все же кратко изложу свое понимание этих цифр.

У разных инструментов на бирже есть разный режим торгов. В основном по акциям – «Т2», по облигациям – «Т1». Более точно эту информацию можно посмотреть на сайте брокера по конкретному инструменту.

-4

Вот пример информация по акциям Сбербанка. Тут видно, что указано – режим торгов – Т2.

Так вот, если у Вас были акции и Вы их продали на 100 тыс. рублей. То, эти деньги попадут на Ваш счет со сроком расчета «Т2». Со сроком расчета «Т0» - у Вас денег не прибавится. Если Вы захотите вывести деньги, то Вам или нужно будет ждать два дня, пока деньги перейдут на расчет «Т0» или брокер Вам им как бы выдаст в кредит на два дня. Но, купить на эти деньги другие акции Вы сможете.

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

Если на все смотреть с точки зрения торгов, то нас интересует режим «Т2». Так как на эти деньги прямо сейчас можно совершать сделки.

Ну, что же - с входными данными разобрались. Теперь что выдает рассматриваемая функция getMoneyEx? «Помощь» нам сообщает: «Функция возвращает таблицу Lua с параметрами таблицы «Позиции по деньгам».»

А вот эта таблица «Позиции по деньгам».

-5

Любую из этих позиций мы можем получить. Но, на самом деле, нас в первую очередь интересует «currentbal» - текущий остаток. Но, в ряде случаев и суммы, заблокированных средств на покупку, нам тоже могут понадобиться.

Теперь мы всё знаем о функции getMoneyEx. Знаем что её нужно передать и что получить из результатов.

function main()
-- Параметры для запроса берутся из таблицы "Лимиты по дененым средствам"
-- client_code = "Код клиента"
-- firmid = "Фирма"
-- tag = "Группа"
-- currcode = "Валюта"
Firm_ID="NC0011100000";
Kod_klienta="10646";
money = getMoneyEx(Firm_ID, Kod_klienta, "EQTV",'SUR', 0)
message("Текущий остаток = "..money.currentbal)
end

Скачать данный код

B данном случае я все таки посмотрел остаток по расчет «Т0», так как у меня в данном случае на демо-счете нет денег с расчетом «Т2» и все расчеты ведутся в режиме «Т0».

Если Вы запускаете скрипт на реальном счете, то можете посмотреть что Вам выдаст программа при расчете «Т2». Повторюсь – в реальном скрипте нужно ориентироваться на расчет «Т2».

На сегодня, пожалуй, всё.

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

Дальше я продолжу разбирать встроенные команды QUIK. Будет интересно. Подписывайтесь на канал, что бы не пропустить новые выпуски.

Всем удачи – всем пока!

⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

📃 Краткое содержание данного канала.

➖➖➖➖➖➖➖➖➖➖➖➖➖

Landingcentr.ru - разработка сайтов для малого и среднего бизнеса.

⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆