В предыдущем примере торгового робота мы рассматривали выставление двух отдельных стоп-заявок типа стоп-лимит и тейк-профит для фьючерса РТС в терминале QUIK данные заявки можно объединить в одну. Существует такой тип стоп-заявки как «Тейк-профит и стоп-лимит». Далее рассмотрим выставление заявки данного типа, для фьючерса на обыкновенные акции ПАО «Сбербанк».

Условие работы скрипта будут следующие. Будет выставлена заявка на продажу фьючерса, если цена последней сделки меньше минимальной цены предыдущей минуты. Для этого нам понадобится минутный график цены фьючерса. После исполнения заявки, выставится стоп-заявка типа Тейк-профит и Стоп-лимит. Стоп-цена для Стоп-лимита будет на 0,1% выше цены входа в позицию, при исполнении Стоп-лимита будет выставлена рыночная заявка на покупку. Стоп-цена для Тэйк-профита, после которой начнется расчет отступа цены от минимума будет на 0,1% ниже цены входа в позицию, отступ от минимума будет равен 0,1%, после того как цена пройдет от минимума 0,1% будет выставлена рыночная заявка на покупку.

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

В качестве инструмента будем использовать ближайший фьючерс на обыкновенные акции ПАО «Сбербанк». На данный момент это SRH8.

Создадим новый файл скрипта для торгового робота и назовем его «019 Стоп-заявка типа Тэйк-профит и Стоп-лимит.lua».

Запишем строки скрипта, отвечающие за остановку торгового робота.

Далее по аналогии с предыдущим торговым роботом добавим переменные, которые понадобиться в скрипте.

Строка кода 6. Идентификатор для выставления заявки на продажу. Кодировка идентификатора изменится, поскольку мы поменяли инструмент и направление сделки. Первое число «11» будет означать фьючерс на акции «Сбербанка», далее идет число «2» означающий операцию продажи и «0001» – порядковый номер транзакции.
Строка кода 7. Идентификатор для выставления стоп-заявки типа Тейк-профит и стоп-лимит.
Строка кода 8. Переменная для статуса транзакции заявки на продажу.
Строка кода 9. Переменная для статуса транзакции стоп-заявки Тейк-профит и Стоп-лимит.
Строка кода 10. Переменная для информационного сообщения транзакции заявки на продажу.
Строка кода 11. Переменная для информационного сообщения транзакции стоп-заявки Тэйк-профит и Стоп-лимит.
Строка кода 12. Переменная для номера заявки на продажу. Используя номер заявки, будет определяться ее состояние.
Строка кода 13. Переменная для номера стоп-заявки Тэйк-профит и Стоп-лимит.
Строка кода 14. Переменная для цены сделки. Цена сделки будет использоваться при расчетах цен Тэйк-профит и Стоп-лимит.
Строка кода 15. Переменная, в которую запишется состояние заявки на продажу. После того как состояние заявки изменится на «Исполнена», скрипт отправит транзакцию на выставление стоп-заявки Тэйк-профит и Стоп-лимит.

Далее, также как и в предыдущем торговом роботе, потребуется функция обратного вызова OnTransReply(), которая вызывается терминалом QUIK при поступлении новой транзакции, в теле функции транзакция идентифицируется, и в соответствующие переменные записываются необходимые значения.

Добавим функцию OnTransReply() в наш скрипт. Функция OnTransReply() является функцией интерпретатора QLua.

Далее нам понадобится функция обратного вызова OnOrder() которая вызывается терминалом QUIK при поступлении новой заявки или изменении состояния существующей. В этой функции в переменную State_S_Order будет записано строковое значение «Исполнена» в случае исполнения заявки на продажу при входе в позицию.

Это ознакомительная часть курса, что бы просмотреть полный курс, пожалуйста оплатите подписку, подписка действует 2 года. Помимо доступа к полному тексту курса, предоставляются все коды скриптов и вспомогательные файлы. Первые три раздела предоставляются бесплатно в полном объеме. Всем кто ранее покупал коды скриптов доступ будет предоставлен бесплатно, пожалуйста пришлите запрос с Email на который Вам были направлены коды.