Главная Quikprofit twiiter Quikprofit Rss

Торговый робот. Шаг за шагом. Шаг 9. Переходим на FORTS (ФОРТС)

Январь 20, 2011 | Нет комментариев

Описанный в предыдущих статьях торговый робот рассчитан для работы на фондовом рынке ММВБ. В данной статье переделаем торговый робот EMAvsAC под срочный рынок FORTS.

Главным отличием фондового (спот) рынка от срочного рынка являются торгуемые на них инструменты: ценные бумаги и фьючерсные контракты соответственно.

В торговом терминале Quik состояние портфеля отражается:

  • для ценных бумаг — в таблице «Купить/продать»,
  • для фьючерсных контрактов (фьючерсов) «Позиции по клиентским счетам (фьючерсы)».

При торговле через терминал Quik данное различие является ключевым, в том числе при разработке торговых роботов.

Что делать?
- Дорабатывать!

За состояние позиции в торговом роботе EMAvsAC отвечает строка:

1
ToolQuantity = DEPO_CURRENT_BALANCE("ClientCode", "FirmId", "SBER03", "Account") +0

В данной строке переменной ToolQuantity присваивается размер отрытой позиции в пересчете на ценные бумаги.
Функция DEPO_CURRENT_BALANCE доступна лишь для таблицы «Клиентский портфель» и «купить/продать».

Для получения данных из таблицы «Позиции по клиентским счетам (фьючерсы)» потребуется встроенная функция GET_ITEM. Но нельзя просто заменить DEPO_CURRENT_BALANCE на GET_ITEM. А как?

Функция GET_ITEM позволяет получить данные по одной строке практически из любой таблицы. При этом создается массив, в который записываются значения строки. Логично предположить, что чтобы воспользоваться функцией GET_ITEM нам нужно знать название таблицы и номер строки. Именно номер (!) строки, а не код инструмента как в DEPO_CURRENT_BALANCE.

То есть сперва робот должен найти строку в таблице «Позиции по клиентским счетам (фьючерсы)» (или «FUTURES_CLIENT_HOLDINGS») с описанием нужного нам фьючерса и уже затем «достать» из нее данные. Единственный способ найти нужную строку — перебрать все строки в таблице. Это можно сделать с помощью цикла:

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

Значение1 это 1, а вот со значение2 придется повозиться.
Робот ведь не знает сколько строк имеет таблица по фьючерсам на данный момент времени. И чтобы не гадать на кофейной гуще, перед использованием цикла добавим функцию, которая «выясняет» сколько же строк в таблице:

1
GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS")

Более того, можно добавить функцию GET_NUMBER_OF в шапку цикла:

1
2
3
FOR переменная FROM 1 TO GET_NUMBER_OF ("FUTURES_CLIENT_HOLDINGS")
      последовательность инструкций
END FOR

Итак, шапка оператора FOR (цикла) ясна. Что дальше?
Дальше добавим оператор IF (условие), чтобы определить подходит ли нам данная строка или нет. Если код инструмента в строке совпадает с требуемым, то робот получает из данной строки все необходимые данные.

1
2
3
4
5
FOR I FROM 0 TO GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS") ' цикл по таблице "Позиции по клиентским счетам"
	IF (GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "SECCODE")=="RSH1") ' просматриваем каждую строку в поиске строки с фьючерсом РТС RSH1
                ToolQuantity= GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "TOTAL_NET")+0 ' берем значение поля "текущая чистая позиция"
	END IF
END FOR

В итоге у нас также имеется переменная Tool_Quantity со значением равным размеру открытой позиции по заданному инструменту.
Вкратце инструкция выглядит следующим образом:
строку

1
ToolQuantity = DEPO_CURRENT_BALANCE("ClientCode", "FirmId", "SBER03", "Account") +0

заменяем на

1
2
3
4
5
6
ToolQuantity = 0
FOR I FROM 0 TO GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS") ' цикл по таблице "Позиции по клиентским счетам"
	IF (GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "SECCODE")=="RSH1") ' просматриваем каждую строку в поиске строки с фьючерсом РТС RSH1
                ToolQuantity= GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "TOTAL_NET")+0 ' берем значение поля "текущая чистая позиция"
	END IF
END FOR

Доработанный код для фьючерса РТС можно СКАЧАТЬ

Понравилось? Следите за обновлениями по RSS! Также можете следить за обновлениями в Twitter.
* * * * * 5 проголосовавших

Комментарии

Оставить комментарий





Поля помеченные (*) обязательны к заполнению

Страница 1 из 11
  • Меню

  • Облако тегов

  • Рубрики

  • Для пользователя