- Котировки
- Акции
- Облигации
- Брокеры
- Другие +2
Ленты
Котировки
Акции
- Российские акции — Московская Биржа
- Американские акции — СПб Биржа
- Валютный рынок — Московская Биржа
- Корпоративные облигации — Московская Биржа
- ОФЗ — Московская Биржа
- Фьючерсы
- Фондовые индексы, сырьевые рынки, FOREX
- Американские акции — Биржи США
- Мировые акции — Иностранные Биржи
- Биржевые ПИФы и ETF — Московская Биржа
- Американские акции — Московская Биржа
- ПИФы — Московская Биржа
- Еврооблигации — Московская Биржа
- Индексы Российских Акций
- РЕПО с ЦК
- Индексы РЕПО
- Индексы облигаций
Блог им. vladislav99980
Торговые роботы. Ошибка в ТСлаб
- 19 февраля 2019, 08:13
- |
- VLTorgovie
-
Нашел в пятницу ошибку в ТСлаб, в кубике трейл стоп, который стандартный идет от ТСлаба, написал в поддержку, ответили только вчера, сказали да ошибка, будут исправлять. сейчас, надо перепроверять все роботы, как они отрабатывают. сделаю свою логику трейл стопа, и буду проверять.
★1
- хорошо
-
11
Получить доступ к настройкам агента можно в окне Агенты. Окно Агенты можно открыть, выбрав пункт Главного меню: Торговля — Агенты.
Выполнить настройку агента можно как во время, так и после его создания.
Для настройки уже созданного агента воспользуйтесь кнопками быстрого доступа
-
Кнопка с изображением списка открывает вкладку общих настроек агента
-
Кнопка с изображением шестеренки открывает торговые настройки агента
После создания агента открыть данное меню можно нажав на значок списка в колонке Агент
В меню Общие можно выбрать нужный скрипт из списка для подключения к агенту, указать источник торговых данных, а так же указать тип управления лимитами.
Для того, чтобы внести изменения в общие настройки агента необходимо остановить работу самого агента. Убедитесь, что кнопка в столбце Состояние находится в отключеном (сером) состоянии
Колонки |
Описание |
---|---|
Скрипт |
Выбор скрипта из списка для создания агента. |
Торговое имя (необязательное поле) |
Вы можете дать дополнительное имя агенту для удобства отслеживания процессов. Данное поле не является обязательным. Изменение или присвоение торгового имени приведет к потере торговой статистики агента, если агент уже совершал сделки или выставлял заявки. |
Тип управления лимитами |
Выбор способа управления средствами, доступными агенту. Возможные значения: «Управляется агентом», «В денежном выражении», «В лотах», «В процентах от портфеля», «Макс. процент от портфеля» |
Значение лимита |
Значение лимита средств, выставляемое в соответствии со способом определения лимита в поле «Тип управления лимитами». |
Источники |
Открывает окно выбора инструментов. |
Расчет количества лотов в заявке:
-
В лотах. Число в поле «Значение лимита» умножается на число в блоке открытия позиции;
-
Управляется агентом. Число в блоке открытия позиции является количество лотов в заявке. Поле «Значение лимита» игнорируется;
-
В денежном выражении. Число в поле «Значение лимита» делится на текущую цену инструмента и умножается на число в блоке открытия позиции;
-
В процентах от портфеля. Число в поле «Значение лимита» умножается на количество денег на счету и делится на текущую цену инструмента и умножается на число в блоке открытия позиции;
-
Макс. процент от портфеля. При подаче заявки определяется объем свободных денег и заявка идет без превышения этой суммы.
(«Макс. процент от портфеля», отличается тем, что если свободных денег в портфеле не хватает, то будет куплено бумаг на меньшую сумму.)
При нажатии на значок кошелька в строке Источники можно открыть меню смены поставщика в источниках. Данная опция может быть полезна, если вы используете несколько источников в вашем скрипте и вам нужно сменить счет в одном из них.
Кнопка «+ Добавить инструмент» позволяет добавить ещё один источник данных в агенте. Один из вариантов использования кнопки:
Если ваш поставщик ограничивает объем загружаемых данных, например несколькими месяцами, вы можете скачать тики за больший период времени в виде текстового файла и добавить эти данные в виде второго источника.
Торговые настройки Агента
Торговые настройки агента так же как и основные настройки доступны при создании нового агента, а так же окно Торговых настроек можно открыть нажав на значок шестеренки в колонке Агент
Настройки |
Описание |
---|---|
Исполнять входы сразу |
Параметр определяющий возможность автоматического входа в позицию без ручного подтверждения. Команда входа будет выполнена только если сигнал входа был сформирован на последнем закрытом баре. |
Исполнять выходы сразу |
Параметр определяющий возможность автоматического выхода из позиции без ручного подтверждения. Команда выхода будет выполнена двумя способами в зависимости от настройки автозакрытия. В случае если параметр автозакрытия равен нулю, команда будет выполнена с формированием цены по последнему закрытому бару, в противном случае команда будет выполняться по рынку в соответствии с настройками автозакрытия. |
Автооткрытие (баров) |
Количество баров, в течение которого пропущенный вход будет выполнен автоматически по рынку, если выбран параметр «Исполнять входы сразу». Далее будет выдано сообщение о пропущенном входе и необходимости ручного вмешательства. Внимание! «Изменить По …». Для блоков изменения позиции автооткрытие не работает! |
Блок. «по рынку» с фикс. ценой для автооткрытия |
Блокирует опцию «по рынку» с фиксированной ценой для автооткрытия и распространяется на Менеджер команд. |
Автозакрытие (баров) |
Количество баров, в течение которого пропущенный выход будет закрыт автоматически по рынку, если выбран параметр «Исполнять выходы сразу». Далее, если не хватило установленного кол-ва баров, будет выдано сообщение о пропущенном выходе и необходимости ручного вмешательства. Внимание! «Изменить По». Для блоков изменения позиции автозакрытие не работает ! Автозакрытие при использовании «Изменить По» срабатывает только если была попытка закрыть позицию в 0 и не получилось. |
Блок. «по рынку» с фикс. ценой для автозакрытия |
Блокирует опцию «по рынку» с фиксированной ценой для автозакрытия и распространяется на Менеджер команд. |
Игнорировать позиции вне истории |
Игнорирует (не учитывает) позиции, которые были закрыты вне запрошенных исторических данных. |
Увед. о проп. входах |
Уведомляет о пропущенных входах в позицию. |
Не открывать, если есть пропуск выхода |
Не открывает новые позиции, если существует ошибка «пропущен выход из позиции». |
Не уведом. пересчет |
Не уведомляет о пересчете скрипта. |
Виртуальная позиция макс. баров |
Определяет, в течение какого периода времени информировать о пропущенной позиции, прежде чем она исчезнет (0 — бесконечно, любое другое положительное значение равно количеству свечей). |
Игнорировать сигнал выхода не на посл. баре |
Игнорирует сигнал выхода из позиции, созданный агентом не на последнем (текущем) баре. |
Ждать исполнения выхода |
Количество свечей, в течение которых программа будет ждать исполнения лимитной заявки выхода из позиции. Затем заявка будет отменена. Настройка работает для активной заявки(цена инструмента касалась цены заявки, но не была исполнена из-за недостатка ликвидности) |
Ждать исполнения входа |
Количество свечей, в течение которых программа будет ждать исполнения лимитной заявки входа в позицию. Затем заявка будет отменена. Настройка работает для активной заявки(цена инструмента касалась цены заявки, но не была исполнена из-за недостатка ликвидности) |
Учитывать комиссию |
Учитывать комиссию из заявок в расчете профита. Если брокер присылает комиссию в сделках, то комиссия будет учитываться в результатах торговли агента. |
Исполнение агента. Дополнительная информация
Исполнять входы/выходы сразу
Запускает автоматическую торговлю. Если данная опция отключена сигналы будут поступать только в Менеджер команд для ручного исполнения.
Автооткрытие/автозакрытие
Выполняет автоматическое исполнение по рынку, если за указанное количество баров в пункте меню Ждать исполнение (активируется при касании цены) заявка не исполнилась или если был сбой в интернет соединении. Собственно, можно ставить и большее значение, чем 2 и 3, главное, чтобы оно было не больше, чем загруженных в скрипт баров. Посмотреть можно в окне «Лог» агента или скрипта. При компиляции или пересчете пишется количество баров.
Игнорировать позиции вне истории
При торговле, в отсутствии загруженной истории, заявки в агент рисуются на первом баре агента. Флаг запрещает рисование этих сделок. Настраивайте свойства скрипта таким образом, чтобы как минимум агент видел последние вход и выход из позиции. Если агент «не смотрит» историю своих сделок для выставления новых заявок (не считает например среднюю цену входа всех сделок), то флаг можно поставить. Если нужна история, то ее лучше загрузить больше. Ограничив в свойствах скрипта параметром МаксБаров.
Уведомлять о пропущенных входах
Если стоит флаг, то при пропуске сигнала входа в позицию, будет отправлено оповещение в сообщениях или на почте (если настроен менеджер уведомлений).
Не открывать, если есть пропуск выхода
Флаг запрещает открытие новых позиций, если был пропущен сигнал на выход из позиции.
Флаг запрещает вывод информации в сообщения и почту, при пересчете агента. Как правило, используется для очень быстрых скриптов, где не исполнение заявок обусловлено ликвидностью на рынке. Это очень важный флаг для службы поддержки. Если его поставить, то пересчеты агента не записываются в лог. Ставя этот флаг, Вы понимаете, что бессмысленно разбирать заявки агента, который их выставляет сотнями в день. Какие из них сработали, а какие нет, он посчитает сам, выставит недостающее.
Виртуальная позиция, макс бар
Регулирует количество баров, сколько действует последний насчитанный сигнал в истории. Например, если поставить 10, а последний сигнал был 11 баров назад, сигнал пропадет с графика и в Менеджере команд (даже при пропуске входа), и агент будет насчитывать более «свежий» сигнал.
Игнорировать сигнал выхода не на последнем баре
Флаг действует подобно настройке «Виртуальная позиция, макс. бар» но работает только для выхода из позиции и только на один бар. Т.е. поставив этот флаг, Вы ожидаете, что агент будет ставить каждую заявку на выход из позиции только на один бар. На следующем баре, если сигнал из скрипта продолжается, заявка будет продолжать стоять. Если изменится цена в заявке, заявка изменится. Но как только в агенте пропадет сигнал на выставление, заявка будет снята, даже если была активной («Активная» — значит цена на рынке коснулась заявки, но не хватило ликвидности для исполнения). Как правило, флаг используется для скриптов, выставляющих на выход только тейкпрофиты, но может использоваться и для других целей, главное понять механизм. Т.е. при данном флаге ни о каком Автозакрытии или Ожидания исполнения не может быть и речи.
Ждать исполнения входа/выхода
Работает только с условными и лимитными заявками. Включается в том случае, если текущая цена коснулась цены заявки, но не исполнилась. Количество баров, в течении которых заявка будет продолжать стоять в очереди заявок. По истечении количества баров, заявка просто снимется. Настраивать данный параметр необходимо совместно с «Автозакрытием/открытием». Если автооткрытие/автозакрытие больше, чем Ждать исполнения, то после снятия неисполненной заявки, пойдет замещающая заявка «по рынку». Если «авто» меньше, чем «ждать», то заявка просто снимется и агент будет насчитывать следующий сигнал. Флаг распространяется и на заявки, на которые действует флаг «по рынку с фикс ценой».
Учитывать ли комиссию, приходящую от брокера (не все брокеры присылают комиссию в сделках). Не все инструменты можно пересчитать (например, для фьючерсного рынка Moex размер лота всегда равен 1) поэтому комиссия может быть сильно завышена, по отношению к графику дохода. Когда Вы видите, что комиссия завышена, флаг не ставить, это исключит комиссию из расчета дохода. Приходит ли комиссия в сделках от брокера, можно посмотреть в таблице «Свои сделки«.
Настройки |
Описание |
---|---|
Проскальз. в шагах |
Размер проскальзывания в шагах цены инструмента, которое будет передаваться в заявку, создаваемую агентом. Заявка типа «По рынку» не учитывает настройки проскальзывания и выполняется по первой предложенной цене. |
Проскальз. в % |
Размер проскальзывания в процентах, которое будет передаваться в заявку, создаваемую агентом. |
Take-profit без проскальзывания |
Заявка тейк-профит создается не условной, а лимитной (но без проскальзывания). |
Открытие лимитными заявками |
Для открытия позиции программа создает лимитные заявки без проскальзывания. |
«По рынку» с фикс. ценой |
Заявка по рынку создается не по текущей цене, а по цене открытия бара (как при расчетах) +/- проскальзывание если выбран «Интервал+сделка». Eсли выбран режим пересчета «Интервал», то берется цена закрытия последней свечи. |
«Плохие» заявки по рынку |
Условные заявки закрытия позиции с ценой хуже рынка выставляются как рыночные. В случае появления сообщения: «Условная заявка по сигналу ‘{0}’ может не сработать, т.к. текущая цена на рынке {1} (Цена условия {2})! заявка уходит как рыночная, а не как условная. |
Экспирация заявок, дни |
Позволяет передать брокеру в условной заявке время экспирации в днях. По умолчанию программа условные заявки выставляет на два дня. Рекомендуется использовать при работе с большими таймфреймами.(не касается криптовалютных рынков) |
Выставление заявок. Дополнительная информация
Работает только для условных заявок! Для остальных типов заявок проскальзывание не нужно. В торговых настройках проскальзывание задается для всего скрипта, оба проскальзывания складываются.
Если поставить и в процентах и в шагах цены, оба проскальзывания суммируются.
Данное проскальзывание имеет меньший приоритет, чем проскальзывание непосредственно в блоке входа и/или выхода из позиции (устанавливается в абсолютных значениях).
Если в определенном блоке входа стоит 5 пунктов, а в общем проскальзывании стоит 1%, то для заявок этого блока входа будет браться 5 пунктов, а для всего остального скрипта 1%.
Тейк профит без проскальзывания
По умолчанию блок «Тейк-профит» выставляет условную заявку!
Данный флаг, меняет тип заявки на «Лимитную». Следует помнить, что для тех поставщиков данных, у которых есть «связанные заявки» флаг их выключает. И между стопом и профитом на каждом пересчете программой будет выбираться только одна заявка, цена которой в данный момент ближе к текущей цене.
Открытие лимитными заявками
Флаг специально для блоков входа в позицию «Если больше/если меньше«. По умолчанию данные блоки для выставления условных заявок. Если стоит флаг, то тип заявок меняется на «Лимитные». Советуем использовать «Открытие позиции лимитной ценой» для реальной торговли.
Флаг специально создан для блоков «По рынку«, меняет тип заявок с «По рынку« на «Лимитную«, скорее «условно лимитную». Заявка будет выставляться с ценой закрытия прошлого бара с учетом проскальзывания. Флаг действует на все сигналы агента, включая Автооткрытие и Автозакрытие, сигналы в менеджере команд. Здесь есть один момент. Если в лаборатории стоит пересчет «Интервал + сделка«, то заявка будет выставляться с ценой Открытия текущего бара.
Не используйте с поставщиком данных Smartcom!, в данном поставщике отсутствует такая возможность, заявки будут выставляться с неверными ценами.
Работает для условных заявок закрытия позиции. Выставляет рыночные заявки, вместо лимитных заявок. Также работает для «Тейк-профит без проскальзывания«, так как сначала проверяется, что цена плохая, только потом работает флаг «Тейк-профит без проскальзывания». См.
Алгоритм исполнения сигналов
.
Пояснение на примере заявки стоп-лосс:
Стоп-лосс это условная заявка. Когда цена коснется цены условия она преобразуется в лимитную заявку с ценой условия «+- проскальзывание». Так как стоп-лосс меняется ступенчато, на очередном пересчете цена условия может оказаться сильно хуже рынка сразу же на открытии свечи.
Это и есть «плохая» заявка. То есть, у вас длинная позиция, цена сейчас 100, а вы подаете заявку закрыть если будет меньше 120. Или у вас короткая позиция, цена 100, а вы хотите закрыть позицию, если цена будет больше 80. Такая заявка не исполнится пока цена не вернется к цене условия «+- проскальзывание».
Если включена опция плохие заявки по рынку, то вместо лимитной заявки выставится рыночная. Для стоп-лосс короткой позиции соответственно рыночная заявка на покупку, а для стоп-лосс длинной позиции рыночная заявка на продажу.
Следовательно, сделки произойдут по лучшим предложениям покупки и продажи, которые будут в очереди заявок на момент пересчета. Как правило, у брокеров данный механизм работает автоматически, но у некоторых брокеров (например Финам) его нет, в данном случае рекомендуется ставить флаг.
Под событиями понимаются операции брокера или биржи с заявкой при исполнении транзакции или общие события относящиеся к программе.
Наименование события |
Описание |
---|---|
Заявка отклонена |
Брокер (или биржа) отклонил заявку |
Заявка выполнена полностью |
На рынке произошли сделки, удовлетворяющие весь запрошенный объем в заявке |
Заявка отменена |
На пересчете агента, скрипт рассчитал, что сигнала нет, заявку необходимо отменить. Программа подает брокеру команду. Данное событие является результатом ответа от брокера «Заявка отменена». |
Изменение количества в заявке |
В Агенте на основном пересчете скрипт рассчитал изменение количества лотов, которое отличается от предыдущего. |
Открытие позиции |
Сигнал исполнен, программа получила номера: Транзакция, Заявка, Сделки. Все номера привязаны к сигналу агента через портфельный номер. |
Закрытие позиции |
Сигнал на закрытие позиции исполнен. Портфельный номер открытия позиции имеет исполненный портфельный номер закрытия позиции. |
Торговля начата |
Пришел статус с биржи, что торги открыты. Чаще всего в программе используется первая сделка рынка. Начало торговли определяется первой котировкой текущего дня, |
Торговля остановлена |
Пришел статус с биржи, что торги остановлены. |
Бар закрылся, но нет сделок |
Бар закрылся по серверному времени, но новых сделок нет |
Ограничение претрейда |
Сработал один из фильтров Управления рисками. Торговля-Управление рисками. |
Некоторые вопросы и ответы
В случае если активирован параметр «Ждать исполнения выхода», то дозакрытие позиции происходит в течение количества свечей, указанном в данном параметре. Затем происходит дозакрытие позиции по рынку в течение количества свечей, указанном в параметре «Автозакрытие (баров)».
Количество баров в «Автозакрытие (баров)» должно быть больше, чем в «Ждать исполнения выхода». Если значение в параметре «Автозакрытие (баров)» меньше, чем в «Ждать исполнения выхода» или равно ему, то автозакрытие не срабатывает.
В случае если активирован параметр «Ждать исполнения входа«, то добор позиции происходит в течение количества свечей, указанном в данном параметре. Затем происходит добор позиции по рынку в течение количества свечей указанном в параметре «Автооткрытие (баров)», кроме случая использования блоков «Изменить По».
Количество баров в «Автоооткрытие (баров)» должно быть больше, чем в «Ждать исполнения входа». Если значение в параметре «Автоооткрытие (баров)» меньше, чем в «Ждать исполнения входа» или равно ему, то автооткрытие не срабатывает.
Донабор позиции или закрытие позиции
Если на закрытие позиции стоит 2 лота в лимитной заявке. При первом пересчете закрылся только 1 лот. Будет ли далее при наличии сигнала оставаться или перевыставляться заявка на оставшийся 1 лот?
Будет оставаться заявка на той же цене, пока действует Ждать исполнения выхода из позиции.
Для реализации перестановки лимитной заявки на закрытие позиции, можно использовать блоки Количество и Обновляемое значение, вместе с настройкой «Игнорировать сигнал выхода не на последнем баре«.
Если стоит Автозакрытие, закрытие остатка позиции произойдет автоматически по рынку.
Если ждать исполнения выхода меньше Автозакрытия — как только закончится Ждать исполнения.
Все то же самое касается и «донабора» лотов в позицию, в соответствии с наименованиями настроек. Для Открытия позиции действует настройка «Виртуальная позиция макс.баров».
Вопрос:
Если НЕ выставлено Ждать исполнения и НЕ выставлено Автооткрытие и параметр Виртуальная позиция = 0.
Выставили лимитную заявку на 10 лотов, исполнили 5. Сигнал на один бар.
Как поведет себя программа?
Программа снимет остаток и без сообщений, будет вести 5 лотов, алгоритм продолжит исполняться с набранным количеством лотов.
«Игнорировать позиции вне истории»
«Игнорировать позиции вне истории»
«Как быть в случае, если у меня моя точка входа ушла за пределы истории. Т.е. история загружается за последние два дня, а вход был 4 дня назад. Как в этом случае себя поведет скрипт или агент? Будет ли эта сделка закрыта по условию, описанному в скрипте или расчет будет вестись некорректно и таких сделок быть не должно? «
Если нет бара входа, то могут и часто неизвестны данные этого бара. Нужно поставить такое количество баров, чтобы в истории всегда был виден последний вход в позицию.
Расчет МОЖЕТ вестись некорректно.
«Ситуация 2: скрипт делает несколько последовательных входов, часть из которых уходит за пределы истории. Как в этом случае будут закрываться ушедшие за пределы истории позиции? Спасибо заранее»
МОГУТ закрываться некорректно. Могут быть вызваны сигналы, которых не могло быть при загрузке всей истории. Больше зависит от расчетных величин, рассчитывающих выход из позиции и настроек. Например, если стоит в торговых настройках «Игнорировать позиции вне истории«
Рекомендация: Поставить такое количество баров, чтобы не закрытые входа в позицию были на своих барах и не сдвигались на первый бар загруженной истории.
В этом посте я собрал особенности настройки TSLab для торговли на боевом сервере. Эти настройки помогут вам избежать многих проблем, с которыми почти все сталкиваются в начале карьеры алготрейдера. Статья будет пополняться новыми советами. Если у вас возникли сложности или дополнения, пишите в комментарии или мне в Skype.
Оптимизация памяти
Если вы смотрели видео уроки на сайте TSLab, то знаете как сократить размер кэша агента чтобы освободить оперативную память и ускорить пересчет. В настройке вашего скрипта перед запуском агента нужно выставить Максимум баров – ограничитель. Я ставлю не более 2000, в зависимости от тайм фрейма. Можно также ограничить количество дней “Макс. дней”. Главное, чтобы цифра была больше чем нужно самому медленному индикатору. Проверьте чтобы до и после ограничения ваши сделки совпадали. 10 агентов у меня занимают 1.2 Гб памяти. Также имейте ввиду что со временем TSLab увеличивает потребление памяти и к вечеру уже может занимать 3 Гб, особенно если открывать роботов в лабе на рабочей программе.
Настройка связки TSLab + QUIK
Защита от смены сервера
Настоятельно рекомендую всем установить галочку в QUIK для того чтобы он не менял сервера и не дублировались стоп-заявки.
Не доступен сервер QUIK
Если сервер вашего брокера недоступен (такое иногда бывает), то нужно в списке соединений выбрать другой сервер и попробовать подключиться к нему. Если получилось, то у вас могла остаться стоп-заявки на недоступном сервере. Они там и будут оставаться, пока вы их не отмените. Для этого нужно на каждой заявке в окне QUIK нажать правой кнопкой и выбрать “Сделать своей”, после чего она будет перенесена на текущий сервер. После этого можете ее отменить и дать возможность TSLab выставить их заново перезапуском агентов.
Защита от изменения файла конфигурации QUIK
Одной из самых частых проблем у новичков является нарушение связи DDE из за изменения конфигурации окон QUIK. Для того чтобы ее восстановить нужно взять tslab.wnd из поставки и заменить его в папке QUIK, после чего сделать загрузку файла настроек и указать этот файл. Этот файл следует держать в неизменном виде! Для этого нужно зайти в настройки QUIK, перейти в раздел Программа – Файлы настроек и снять галочку с Сохранять настройки в файл при выходе. Данную настройку нужно сделать в самый первый запуск QUIK.
Автоматический запуск с утра
Для того чтобы TSLab самостоятельно подключался с утра без вашего участия необходимо правильно подобрать настройки поставщика данных. Особенно это касается QUIK.
Необходимо настроить расписание подключения. Можно оставить настройки по-умолчанию 9-50 с пн по пт, но я поставил 9-41 в ТСЛаб и 9-40 в QUIK (настройка в меню Доступные соединения). Важно чтобы QUIK подключался раньше TSLab.
В настройках поставщика галочку с “Перезапускать QUIK” нужно снять. Таким образом он будет запущен всегда. Нужно только 1 раз запустить TSLab, нажать Соединить в меню и он запустит QUIK. Произойдет автоматический ввод логина и пароля, если ничего не трогать. Если не произойдет, что-то настроили неправильно. Загружаем настройку tslab.wnd, которая дефолтная или скачанная у брокера, сворачиваем QUIK и больше вообще его не трогаем. Можно только переключать вкладки, не меняя их. С этого момента все будет включаться – отключаться автоматически: в 9-40 QUIK подключается к брокеру, в 9-41 TSLab подключается к QUIK и выставляет заявки. В конце сессии отключается. Раз в неделю перезапускаем все вручную чтобы очистить память.
Ошибка “Превышено время ожидания”
Возникает когда ТсЛаб не может получить подтверждения о выставлении заявки. Проблема в связи между ними, либо в настройках системы. Первое лечится загрузкой tslab.wnd, второе установкой русского лэнгвидж пака в Windows и родного отображения даты/времени в системе. Также нужно поставить пакет обновлений Windows, который отключает переход на зимнее-летнее время. Все это нужно проделать в первую очередь когда впервые запускаете удаленный сервер.
Профилактика
Ежедневно перед торгами или вечером после торгов открываем в QUIK вкладку позиций и сверяем их с агентами. Вкладки там не двигаем и не закрываем.
Еженедельно перезапускаем TSlab и QUIK, выполняем соединение снова. Это для очистки памяти.
Не выставляются заявки, не обновляются котировки и тд
Проверьте связь между терминалами, загрузите tslab.wnd. Этот файл всегда должен лежать у вас на рабочем столе в своём первозданном виде. При необходимости кидайте его в папку QUIK с перезаписью.
Не обновляются котировки, пропали графики
Такое часто случается при сбое и вылете ТСЛаб. Нарушается работа кэша котировок. После того как запущен ТСЛаб нужно дать минут 5-10 чтобы они загрузились сами. Если этого не произошло, то рядом с агентом нажать кнопку Гр, подождать пока загрузится график, нажать на нем правой кнопкой и выбрать Перезагрузить данные. Это обновит кэш. Если котировки после этого не скачались за какой-то промежуток времени и вы работаете через QUIK, то нужно в QUIK в меню выбрать Перезаказать архив графиков, перед этим отключив ТСЛаб от поставщика. QUIK перезапустится, подключайтесь, проверяйте.
Какой выбрать удаленный сервер VPS/VDS для TSLab?
Выбирайте по отзывам и цене в этом отличном обзоре на Хабре. Лично я использовал Агаву, 1Gb, был недоволен, перешел на UltraVDS его использовал пол-года и был доволен, пока не начались лаги и сбои QUIK, затем перешел на домашний хостинг и отказался от Квика.
Если вы всё же решили найти надежного VPS провайдера для трейдинга, обратите внимание на ruVDS, с которым сотрудничают крупнейшие брокеры. Пишите мне и получите промо-код на скидку 5% на хостинг!
На скриншоте оптимальная конфигурация сервера для TSLab до 10-12 агентов.
Как установить внешние индикаторы
Скачать дополнительные индикаторы можно на официальном форуме программы TSLab. Скачиваем и разархивируем в папку Handlers. Попасть туда можно нажав в меню TSLab Инструменты – Папка с логами и перейти на уровень выше. Перезапустить программу. Индикаторы могут быть 32-битными, 64-битными и универсальными. Для разработки рекомендуется работать в 64-битной версии TSLab, а на рабочем сервере с той, которую поддерживает торговый терминал или коннектор. Например, QUIK сможет работать только с 32-битной версией, а Plaza2 и терминал брокера АЛОР может работать и с 64-битной. Соответственно, индикаторы должны соответствовать версии TSLab. Прошу также принять во внимание что кубик, который работает в тестовом Лабе может не работать в реальном агенте или работать иначе.
Настройка лотов в агенте
При настройке агента вы должны указать портфель, инструмент, а также лотность. Размер позиции будет зависеть от настроек, указанных в блоке открытия позиции скрипта. Вы можете выбрать Управляется алгоритмом, тогда настройку лотов нужно производить в самом скрипте, каждый раз открывая его меняя количество в блоке открытия, когда это необходимо. Можно выбрать вариант В лотах, тогда вы указываете количество лотов уже в агенте, но при этом данное количество будет умножаться на количество, указанное в блоке открытия в скрипте. Это важный момент! Вариант В процентах от портфеля теоретически должен высчитывать количество, исходя из суммы на счете и цены актива или ГО, но на практике с фьючерсами работает не корректно, не рекомендую использовать.
Как настроить менеджер уведомлений
TSLab позволяет настроить рассылку уведомлений о различных событиях на электронную почту. Это удобно чтобы быстро получить сообщение о проблеме с подключением к поставщику данных или о возникновении ошибок в агентах. Нужно зайти в Инструменты – Менеджер уведомлений и создать тип e-mail. Настраивается он не тривиально, настройки работают такие:
Если не работает 25 порт, то попробуйте 587. На Яндексе должно быть аналогично.
Через некоторое время использования Мэйл.ру заблокировал мне отправку сообщений через POP3, потому что программа превысила лимит, перешел на Gmail.
Gmail использует порт 587, сервер smtp.gmail.com. В настройках аккаунта Goolge создайте пароль приложения чтобы не палить свой пароль от ящика, либо создайте отдельный профиль Google.
Кроме настройки типа уведомлений и данных авторизации нужно также добавить фильтры по типу событий и не забыть активировать созданные уведомления галочкой. Подробней можно посмотреть в видео-уроке на сайте tslab.ru. Фильтры обрабатываются по порядку с условием “и”. То есть создать в одной настройке два разных типа или категории уведомлений не удастся. Для этого нужно сделать 2 настройки типа email с разными фильтрами. Например, одну настройку для событий категории “Поставщик данных”, другую для сообщений типа “Ошибки”. Можно также выбрать фильтр “Коды” и перечислить коды сообщений из списка (раздел 2.3.12).
После перезапуска агентов теряется история и статистика
Что делать? Избежать этого никак нельзя. Для ведения статистики нужно заполнять свой торговый журнал. Я делаю это еженедельно. Хочу поделиться журналом для роботов в Excel. В нем вы можете вести свою статистику, смотреть графики вашего депозита и дополнять любыми нужными вам цифрами. Скачать Журнал доходности портфеля.
Где скачать котировки для TSLab и склейка фьючерсов
Скачать архив минутных графиков для TSLab и других торговых систем можно бесплатно через сайт Финам или MFD. Сделать это можно вручную, выгружая файлы частями и склеивая их в блокноте в один файл по порядку. Также есть специальные программы, которые скачают и склеят данные за вас, но программы эти в основном не поддерживаются разработчиками и работают не всегда адекватно. Из рабочих программ могу отметить Cognitum Updater, который обновляет котировки по расписанию с Финам. Если вам понадобятся тиковые данные, то Финам позволяет их скачивать только после 18:00, то есть в нерабочее время и тоже частями. Есть также программа от StockSharp под названием Hydra, которая может экспортировать данные сначала в свой формат, а затем в .txt. Скачать можно на официальном сайте S#.
Для того чтобы загрузить исторические данные в текстовом формате или csv нужно создать текстовый поставщик данных. Инструменты – Менеджер поставщиков данных – Добавить … и выбрать Исторические данные – Текстовые файлы. В окне настроек указать папку где будут храниться склейки, задать валюту “п” – пункт.
Сменить тип отображения графика: свечи, бары, стакан
Если вам привычней видеть на графике агента TSLab бары, то нужно в скрипте кликнуть на связь между Источником и Панелью графика и найти там нужную настройку. Здесь же можно скрыть отображение имени позиции, стопа, тэйка и другие настройки графика.
Какую установить комиссию
Какую брать комиссию, если вы торгуете фьючерсы? С 2017 года Мосбиржа установила относительные комиссии на рынке Фортс. Это значит, что комиссия считается также, как и на акциях — в процентах от стоимости контракта. Это относится к фьючерсам и опционам. Узнать актуальный размер комиссии на сайте Мосбиржи (раздел Группы срочных контрактов и базовые ставки за заключение фьючерсов).
Не стоит забывать что это лишь комиссия биржи. К ней нужно прибавить комиссию вашего брокера. Также рекомендуется умножить полученную комиссию на 2, чтобы проводить стресс-тестирование алгоритма и учесть проскальзывание в алгоритме.
Например: фьючерс рубль-доллар SI относится к группе курс иностранной валюты к российскому рублю.
- Базовая ставка 0,0014%
- Комиссия брокера = комиссии биржи, то есть 0,0014%
- Итоговая комиссия 0,0014*2*2 = 0,0056%, что при курсе 63000 где-то 3,52 руб
Для учёта комиссии в TSLab берём кубик Относительная комиссия. Стоимость денег нам не нужна. Если вам понятней комиссия в рублях, то можно брать Абсолютная комиссия и ставить фиксировано 5, а то и 10 руб комиссии на SI – с запасом.
TSLab 2.1 скачать
Последняя версия доступна на официальном сайте. Отвечу на основные вопросы:
- Ключ от версии 1.2 и 2.0 подходит.
- Поддержку можно получить через тикеты поддержки и официальном канале в Telegram.
- Через QUIK работать можно, связь через LUA.
- Опционы работают в Transaq и Алор трейд точно.
- Алгоритмы со стандартными кубиками из 1.2 открываются и работают без проблем. Обратная совместимость c TSLab 2.0 и 1.2 отсутствует.
Обучение TSLab
Рекомендации и отзывы по продуктам школы только положительные!
- М Е Н Ю
- 1. Введение
- 2. Работа с программой
- 2.1. Установка, активация и первый запуск программы. Обновление программы. Настройки.
- 2.1.1. Установка программы
- 2.1.2. Настройки программы
- 2.1.3. Установка программы для пользователей терминала QUIK
- 2.1.4. Установка и настройка программы для работы с брокером БКС
- 2.1.5. Настройка программы для прямого подключения к бирже
- 2.1.6. Настройка программы для работы с брокером Interactive Brokers
- 2.1.7. Первый запуск и активация программы, обновление программы
- 2.2. Общий интерфейс
- 2.2.1. Главное меню
- 2.2.2. Панель инструментов
- 2.2.3. Строка состояния
- 2.2.4. Листы
- 2.2.5. Рабочая область
- 2.3. Окна программы
- 2.3.1. Менеджер поставщиков данных
- 2.3.1.1. Алор (Брокер «Алор»)
- 2.3.1.2. RTS Plaza2 (Брокер «Алор»)
- 2.3.1.3. SmartCOM (Брокер «ITinvest»)
- 2.3.1.4. RTS Plaza2 (Брокеры «ITinvest» и «Открытие»)
- 2.3.1.5. NetInvestor (Брокер ИФК «Солид»)
- 2.3.1.6. Риком-Траст (Брокер «Риком-Траст»)
- 2.3.1.7. Transaq NEW, Transaq HFT NEW, TSLab Transaq+ (Брокер «Финам»)
- 2.3.1.8. БКС (QUIK)
- 2.3.1.9. QUIK (брокер «Открытие»)
- 2.3.1.10. RTS Plaza2
- 2.3.1.11. QUIK (брокер «Церих»)
- 2.3.1.12. QUIK (любой брокер)
- 2.3.1.13. Interactive Brokers (Брокеры «Interactive Brokers» и «Церих»)
- 2.3.1.14. BTC-E (BitCoin)
- 2.3.1.15. WhoTrades (Transaq)
- 2.3.1.16. Exante
- 2.3.1.17. Настройки оффлайновых поставщиков данных
- 2.3.2. График
- 2.3.3. Очередь заявок
- 2.3.4. Котировки
- 2.3.5. Сделки по инструментам
- 2.3.6. Позиции
- 2.3.7. Свои сделки
- 2.3.8. Свои заявки
- 2.3.9. Менеджер команд
- 2.3.10. Управление агентами
- 2.3.11. Резервное копирование и восстановление данных
- 2.3.12. Менеджер уведомлений
- 2.3.13. Менеджер заявок
- 2.4. Базовые Функции
- 2.4.1. Управление портфелями
- 2.4.2. Совершение сделок
- 2.5. Построение графиков и создание скриптов
- 2.5.1. Управление скриптами
- 2.5.1.1. Особенности работы с контейнерами скриптов
- 2.5.2. Панель управления редактора
- 2.5.3. Соединители
- 2.5.4. Панели и шкалы
- 2.5.5. Модуль предторговых ограничений и управления рисками
- 2.6. Использование API
- 2.6.1. Описание
- 2.6.2. Работа с API
- 2.7. Горячие клавиши
- 2.8. Фильтры
- 3. Примеры решения задач
- 3.1. Настройка рабочей области
- 3.2. Создание графика
- 3.3. Создание и отладка скрипта
- 3.4. Работа агента и особые ситуации
- 3.5. Создание скрипта при помощи API
- 3.6. Создание индикатора при помощи API
- 4. Справочник блоков визуального конструирования
Скрипты служат для создания агентов, которые осуществляют автоматическое выставление и снятие заявок для открытия и закрытия позиций по заранее заложенной в них логике, в соответствии с торговой стратегией, выбранной Пользователем.
Свойства и настройки лаборатории
Вкладка «Очередь заявок»
Информационная вкладка «Очередь заявок» показывает очередь заявок на покупку или продажу выбранного инструмента.
Вкладка «Очередь заявок». Контекстное меню
Свойства/Настройки | Описание | ||
Скрипт | Источники | Выбор источника данных. | |
Параметры | Перечень параметров блоков, примененных в скрипте. | ||
Исполнение агента | Отключить генерацию позиций | Отключает создание позиций по сделкам, т.е. входы и выходы. | |
Имитация портфеля | Начальный депозит | Размер начального депозита для модельных расчетов показателей торговой стратегии. | |
Вид имитации | Способ расчетов финансовых результатов при моделировании:
По умолчанию — используется настройка, определяемая в блоках открытия позиции. Количество лотов/контрактов будет равно параметру «Количество» в блоках открытия позиции. Рассчитывать из суммы — объемы позиций рассчитываются из депозита и цены за один контракт/лот инструмента и и не умножается на параметр «Количество» в блоках открытия позиции. Реинвестирование прибыли не применяется. Рассчитывать изменения — то же что и модель два, но с реинвестированием прибыли и пересчетом размера депозита после закрытия каждой сделки. |
||
Режим торгов | При моделировании определяется возможность совершения только длинных, только коротких или и длинных и коротких сделок. | ||
Режимы обновления | Интервал пересчета | Управление режимом пересчета скрипта и генерации команд в режиме реальной торговли. Доступны четыре режима пересчета: интервал, интервал + первая сделка, сделка, пок/прод, .
Интервал — пересчет происходит только по закрытию бара. Этот режим расчета максимально приближен к расчетам в лаборатории. Вход в позицию и выход из нее на одном баре невозможен. Условные заявки (Стоп приказ) будут выставлены только после закрытия свечи на которой была открыта позиция. Сделка — пересчет происходит после каждого тика (любой рыночной сделки по инструменту). В расчетах учитываются незакрытые бары. Вход в позицию и выход из нее возможен на одном баре, что может давать результаты существенно отличающиеся от моделирования в лаборатории. Применение данного режима рекомендуется только для создания арбитражных алгоритмов. Пок/прод — пересчет происходит после каждого изменения — лучшей покупки либо лучшей продажи. В расчетах учитываются незакрытые бары. Вход в позицию и выход из нее возможен на одном баре, что может давать результаты существенно отличающиеся от моделирования в лаборатории. Применение данного режима рекомендуется для создания арбитражных алгоритмов. Пок/прод без объема — аналогичен предыдущему, но не учитывает изменения объема. Интервал + первая сделка. Пересчет скрипта вызывается по приходу информации о первой сделке интервала. Информация о первой сделке доступна при расчетах. |
|
Обновлять в реал. времени | Включение обновления и пересчета в реальном времени в режиме лаборатории. Данный режим используется для имитации работы скрипта с реальными данными. | ||
Пересчет по каждому источнику | Если стратегия использует несколько источников данных, при включении данной опции пересчет будет происходит при открытии новой свечи для каждого источника. Данная опция не влияет на режимы Сделка и Пок/прод. | ||
Исторические данные | Дата от | Дата начала временного интервала истории котировок используемого в расчетах. | |
Исп. Дату от | Флаг использования начальной даты. Если не включено, используется максимально доступное количество данных, определяемое источником. | ||
Дата к | Дата окончания временного интервала истории котировок используемого в расчетах. | ||
Исп. Дату к | Флаг использования конечной даты. Если не включено, используется максимально доступное количество данных, определяемое источником. | ||
Макс. дней | Позволяет ограничить количество дней запрашиваемых исторических данных (от «Дата от»). Значение «0» — количество без ограничения. Если флаг использования конечной даты не выбран, то последним днем выборки будут считаться текущие сутки до 0 часов следующего дня. |
||
Начало сессии | Устанавливает временные интервалы для сессии. | ||
Конец сессии | Устанавливает временные интервалы для сессии. | ||
Макс. баров | Максимально количество баров используемое для расчета. Данная настройка позволяет ограничить количество баров при работе скрипта в реальном времени для исключения избыточных расчетов. | ||
Интервальный период | Дни, минуты, секунды, тики (для тикового периода параметр Интервал игнорируется) | ||
Интервал | Значение базового интервала (количество интервальных периодов) | ||
Параметры вычислений | Метод декомпрессии | Метод декомпрессии сжатых данных в режиме расчета/оптимизации на исторических данных.
Данный параметр определяет временной сдвиг данных рассчитанных для компрессированных временных интервалов при декомпрессии к оригинальному (базовому) временному интервалу. Внимание! 2-й метод не рекомендуется применять для тестирования стратегий из-за возможного «заглядывания в будущее», т.к. значение компрессированного индикатора доступно до окончания часа! 2-й метод применим исключительно для визуального и графического анализа . |
|
Торговать с (бар) | Параметр управляющий пропуском определенного числа баров, до генерации первого торгового сигнала, необходимого для стабилизации индикаторов. | ||
Параметры графика | Размер бара | Размер отображения бара в пикселях. | |
Отступ | Отступ правого края графика от шкалы в пикселях. | ||
Скрывать шкалы | Включает или отключает отображение шкал на графике. | ||
Внешний вид | Цвет фона | Цвет фона окна. | |
Цвет шрифта | Цвет шрифта окна. | ||
Тип шрифта | Наименование шрифта окна. | ||
Размер шрифта | Размер шрифта окна. | ||
Прозрачность | Прозрачность | Степень прозрачности окна. | |
Прозрачность при фокусе | Степень прозрачности активного окна. | ||
Заголовок окна | Скрывает/Показывает заголовок плавающего окна. | ||
Сохранение компоновки вкладок | Сохранение расстановки вкладок в лаборатории. | ||
Режим агента | Выставление заявок | «Плохие» заявки по рынку | Условные заявки с ценой хуже рынка выставлять как рыночные. В случае появления сообщения: «Условная заявка по сигналу ‘{0}’ может не сработать, т.к. текущая цена на рынке {1} (Цена условия {2})!» заявка уходит как рыночная, а не как условная. |
По рынку с фикс. ценой | Заявка по рынку создается не по текущей цене, а по цене открытия бара (как при расчетах) +- проскальзывание.
Блок «Цена входа (расчетная)» и опция блока «Трейлстоп» и «ТрейлстопАбс» «Использовать расчетную цену» не совместим с «По рынку с фикс.ценой». |
||
Take-profit без проскальзывания | Заявка тейк-профит создается не условной, а лимитной (но без проскальзывания). | ||
Открытие лимитными заявками | В случае когда данный флаг установлен, для открытия позиции программа генерирует лимитные заявки без проскальзывания. | ||
Проскальзывание в % | Размер проскальзывания в процентах, которое будет передаваться в заявку генерируемую агентом. Внимание! Проскальзывание необходимо учитывать при оптимизации (в лабораторном режиме). Достаточно применить блок «Абсолютная комиссия» или «Относительная комиссия» и в нем поставить величину проскальзывания. |
||
Проскальзывание в шагах | Размер проскальзывания в шагах цены инструмента, которое будет передаваться в заявку генерируемую агентом. Заявка типа «По рынку» не учитывает настройки проскальзывания и выполняется по первой предложенной цене. Настройки полей проскальзывания суммируются! Внимание! Проскальзывание необходимо учитывать при оптимизации (в лабораторном режиме). Достаточно применить блок «Абсолютная комиссия» или «Относительная комиссия» и в нем поставить величину проскальзывания. |
||
Исполнение агента | Виртуальная позиция макс. свечей | В течение скольких свечей будет сохраняться виртуальная позиция. | |
Действие автозакрытия (баров) | Количество баров, в течение которого пропущенный выход будет закрыт автоматически по рынку, если выбран «Исполнять выходы сразу». Если установленного количества баров не хватило, будет выдано сообщение о пропущенном выходе и необходимости ручного вмешательства. | ||
Действие автооткрытия (баров) | Количество баров, в течение которого пропущенный вход будет выполнен автоматически по рынку, если выбран «Исполнять входы сразу». Если установленного количества баров не хватило, будет выдано сообщение о пропущенном входе и необходимости ручного вмешательства. Внимание! Вход может быть выполнен автоматически по рынку только если первоначальная заявка не была исполнена совсем. Если первоначальная заявка была исполнена частично, новая не будет выставлена. |
||
Ждать исполнения выхода | Количество свечей, в течение которых программа будет ждать исполнения лимитной заявки выхода из позиции. Затем заявка будет отменена. | ||
Ждать исполнения входа | Количество свечей, в течение которых программа будет ждать исполнения лимитной заявки входа в позицию. Затем заявка будет отменена. | ||
Игнорировать позиции вне истории | Не включает в пересчет позиции, не входящие в выбранную Пользователем историю. | ||
Имит. очередность позиций | Имитирует очередность появления исполненных позиций в расчете агента. Иначе агент видит только последние активные позиции на любом баре. | ||
Исполнять входы сразу | Определяет возможность автоматического входа в позицию без ручного подтверждения. Команда входа будет выполнена только если сигнал входа был сформирован на последнем закрытом баре. | ||
Исполнять выходы сразу | Определяет возможность автоматического выхода из позицию без ручного подтверждения. Команда выхода будет выполнена двумя способами в зависимости от настройки автозакрытия. В случае если параметр автозакрытия равен нулю, команда будет выполнена с формированием цены по последнему закрытому бару, в противном случае программа будет выполняться по рынку в соответствии с настройками автозакрытия. | ||
Не открывать, если есть пропуск выхода | Не открывает позицию, если был зафиксирован пропуск выхода. | ||
Не уведом. пересчет | Исключает создание сообщений о пересчете скрипта в режиме агента. | ||
Увед. о проп. входах | Сообщает о пропущенных входах. |
Вкладки окна редактора скриптов
График
В данной вкладке отображается график работы скрипта.
Редактор
Редактор скриптов и редактор графиков — один и тот же инструмент, с тем отличием что часть функций, обязательных для создания скриптов, не требуется в создании графиков.
Основные команды, доступные во время работы с редактором, содержатся в контекстном меню редактора.
Команда | Описание |
Копировать | Копирует выделенный объект в буфер обмена. |
Вырезать | Копирование выделенного объекта в буфер обмена и удаление. |
Вставить | Вставка объекта из буфера обмена. |
Отменить | Отменяет последнее действие. |
Восстановить | Восстановление отмененного действия. |
Удалить | Удаление выделенного объекта. |
Показать график | Открывает график скрипта. |
Свойства | Открывает свойства лаборатории. |
Развернуть выделенные блоки | Полностью отображает параметры выделенных блоков. |
Свернуть выделенные блоки | Минимизирует отображение выделенных блоков за счет количества выводимых в блоке параметров. |
Показать лабораторию на | Перемещает окно лаборатории на один из существующих листов рабочей области. |
Кнопки управления редактора расположены на панели инструментов под главным меню. В раздел Панель инструментов.
Панель инструментов редактора содержит перечень категорий блоков визуального конструирования. Нажатие левой кнопкой мыши на категории раскрывает перечень блоков, отноcящихся к данной категории. Выберите блок, чтобы увидеть панель базовых свойств блока.
Свойство | Описание |
Имя сборки | Имя сборки. |
Версия | Номер версии. |
Платформа | Указывает, с какой версией программы совместим данный блок: — нейтрально. Блок работает с любой версией программы; — работает с 32-битной версией программы; — работает с 64-битной версией программы. |
Панель свойств блока содержит сведения, характеризующие выбранный блок:
Свойство | Описание | |
Главное | Имя блока | Наименование блока. В случае использования одного и того же блока более одного раза, к наименованию блока добавляется порядковый номер. Наименование блока может быть изменено Пользователем непосредственно в строке, содержащей наименование блока. |
Обработка данных | Указывает на способ обработки данных. — Потоковый способ. Применяется потоковая (единовременная) обработка данных. — Последовательный способ. Применяется последовательная (пошаговая) обработка данных. |
|
Обработчик | Наименование используемого обработчика. Пользователь можеть выбрать другой обработчик, сохранив наименование, заданное в строке «Имя блока». | |
Параметры | Индивидуальные характеристики блока. |
Переход в раздел Справочник блоков визуального конструирования
Результаты
Данная вкладка отображает результаты тестирования на исторических данных.
Параметр | Описание |
Чистый П/У | Чистая прибыль. |
Чистый П/У% | Чистая прибыль в процентах. |
Общий MFE | Максимально возможный доход по всем позициям. |
Доходность в год | Средне-геометрический годовой темп прироста. Расчет доходности в год производится согласно формуле, указанной по данной ссылке — {+}http://www.investopedia.com/terms/c/cagr.asp+. |
Доходность в месяц | Средне-геометрический темп прироста за месяц. Расчет доходности в год производится согласно формуле, указанной по данной ссылке — {+}http://www.investopedia.com/terms/c/cagr.asp+, но степень равна количеству месяцев. |
Доход за бар | Прибыль на бар. |
Количество сделок | Число сделок. |
Средний П/У | Средняя прибыль / убыток. |
Средний П/У % | Средняя прибыль / убыток в процентах. |
Баров на сделку (в среднем) | Среднее число баров удержания позиции. |
Выиграно сделок | Число прибыльных сделок. |
Выиграно % | Процент прибыльных сделок. |
Общая прибыль | Общая прибыль, сгенерированная прибыльными сделками, минус комиссия. |
Средняя прибыль | Средняя прибыль. |
Средняя прибыль % | Средняя прибыль в процентах. |
Баров на сделку (в среднем) | Среднее количество баров в прибыльной сделке. |
Максимум подряд | Максимальное количество последовательных прибыльных сделок. |
Убыточных сделок | Число убыточных сделок. |
Убыточно % | Процент убыточных сделок. |
Общий убыток | Общий убыток, сгенерированный убыточными сделками, плюс комиссия. |
Средний убыток | Средний убыток. |
Средний убыток % | Средний убыток в процентах. |
Баров на сделку (в среднем) | Среднее количество баров в убыточной сделке. |
Максимум подряд | Максимальное количество последовательных убыточных сделок. |
Макс. просадка | Наибольшее (пиковое) проседание линии капитала в абсолютных величинах. |
День макс. просадки | Дата, когда была зафиксирована максимальная просадка в абсолютных величинах. |
Макс. просадка % | Наибольшее (пиковое) проседание линии капитала в процентах, относительно цен закрытия. |
День макс. просадки% | Дата, когда была зафиксирована максимальная просадка в процентах. |
Профит фактор | Показатель прибыльности. Рассчитывается по формуле «Профит Фактор (Profit Factor) = Вся прибыль / Весь убыток». |
Фактор восстановления | Показатель восстановления. Рассчитывается по формуле «Фактор восстановления (Recovery Factor) = П/У / Макс. убыток». |
Коэф. выигрыша | Коэффицент выигрыша. Рассчитывается по формуле «Коэф. выигрыша (Payoff Ratio) = Средняя прибыль / средний убыток». |
Доход
Вкладка, демонстрирующая доходы и расходы для выбранных исторических данных.
Сделки
Вкладка показывает таблицу совершенных сделок.
Колонка | Описание |
Позиция | Позиция. |
Символ | Наименование ценной бумаги. |
Лоты | Количество в сделке. |
Вход | Число и цена входа. |
Выход | Число и цена выхода. |
% изменения | Процент изменения прибыли/убытка за сделку. |
П/У | Прибыль/убыток за сделку. |
Продолж.(баров) | Количество баров между входом и выходом. |
Доход/бар | Прибыль/убыток за один бар. |
Общий П/У | Текущая прибыль/убыток по позиции. |
MAE | Максимальный возможный убыток по сделке. |
MFE | Максимальный возможный доход по сделке. |
Статус | Сигнализирует о наличии или отсутствии ошибок в работе агента: — зеленая галочка — позиция не содержит ошибок; — желтые песочные часы — позиция содержит неисполненные торговые сигналы; — красные песочные часы — позиция выполнена с торговыми ошибками |
Оптимизация
Вкладка запуска и настройки оптимизации скрипта.
Колонка | Описание |
Полное имя | Имя переменной. |
Значение | Текущее значение переменной. |
Mин. | Минимальное значение переменной. |
Maкс. | Максимальное значение переменной. |
Шаг | Размер шага изменения переменной. |
Использовать | Использовать/Не использовать. |
В средней части вкладки расположен механизм управления параметрами оптимизации — таблица сохраненных параметров и кнопки для управления ими. В таблице отображаются комментарии к сохраненным параметрам и дата сохранения. Кнопки служат для следующих действий:
— Сохранение параметров — сохранение текущих параметров оптимизации для последующего использования. При сохранении возможно указать свой комментарий.
— Удаление параметров — удаление выделенного блока параметров.
— Восстановление параметров — замена текущих параметров оптимизации на сохраненные в выделенном блоке.
В нижней части вкладки находится подсказка, содержащая расчетное максимальное количество проходов скрипта, поле для ввода собственного значения количества проходов, кнопка запуска оптимизации и индикатор процесса оптимизации. Максимальное число проходов рассчитывается как произведение количества проходов по каждой из выбранных для оптимизации переменных. Количество проходов для одной переменной определяется шагом оптимизации и выбранным диапазоном значений. Так для примера из 4х параметров в диапазонах 1 — 10 с шагом 1, максимальное число проходов, гарантированно покрывающее все возможные значения, будет 10*10*10*10 = 10 000 проходов.
Лог
Вкладка, показывающая журнал событий скрипта.
Результаты оптимизации
Данная вкладка позволяет Пользователю увидеть результаты оптимизации скрипта.
Колонка | Описание |
Чистый П/У | Чистая прибыль. |
Чистый П/У % | Чистая прибыль %. |
Общий MFE | Суммарный максимально возможный доход по сделке. |
CAGR | Compound Annual Growth Rate/Совокупный среднегодовой темп роста |
Макс. просадка | Наибольшее (пиковое) проседание линии капитала в процентах относительно цен закрытия. |
Количество сделок | Количество сделок. |
Выиграно сделок % | Процент прибыльных сделок. |
Выиграно сделок | Число прибыльных сделок. |
Профит фактор | Показатель прибыльности. |
Фактор восстановления | Показатель восстановления. |
Коэффициент выигрыша | Показатель Payoff Ratio вычисляется как абсолютное значение отношения средней прибыли на сделку (Avg Profit (%)) к среднему убытку на сделку (Avg Loss (%)). |
Двойное нажатие на строке устанавливает в скрипт параметры оптимизации из этой строки.
[Евгений Ерошкин, частный инвестор]
F&O №11, 2011 Скачать коды к Шагу 3
Все когда-либо созданные роботы были предназначены для того, чтобы заменить человека. При этом каждый из них имеет определенные органы воздействия на окружающий мир в зависимости от процесса, для которого они создавались. В нашем случае робот «живет» внутри торгового терминала, с помощью которого выставляет ордера на покупку или продажу. В очередной статье цикла мы оснастим наш автомат органами воздействия, а точнее, функциями для отправки заявок и контроля их исполнения.
Продолжение. Предыдущие материалы в F&О №8–9,10 за 2011 год.
Итак, наш робот уже многое может (смотри F&О №8-9,10 за 2011 год), но для воплощения торговой стратегии в жизнь ему не хватает умения работы с заявками. Определим порядок действий, которые должна воспроизводить механическая торговая система при появлении сигналов на покупку/продажу:
1. Выставляем заявку на покупку/продажу в зависимости от сигнала;
2. Ждем исполнения торгового приказа;
3. Если заявка исполнилась, сразу выставляем новый «стоп-ордер» и снимаем «старый» (если таковой имеется);
4. Если заявка не исполнилась за отведенный промежуток времени, снимаем заявку и ждем нового сигнала.
Для реализации этого алгоритма создадим набор универсальных функций, которые в дальнейшем можно будет использовать в других программах. Для работы с заявками нам понадобятся следующие функции:
1. Функция выставления заявки;
2. Функция выставления «стоп-ордера»;
3. Функция покупки;
4. Функция продажи;
5. Функция снятия заявки;
6. Функция снятия «стоп-ордера»;
7. Функция контроля исполнения заявки;
8. Функция Stop-Loss.
Функции выставления заявок
Процесс отправки обычных и стоп-заявок схож. Отличие заключается лишь в том, что для стопа необходимо указывать две цены: стоп-цену (цена, при которой срабатывает стоп и выставляется обычный ордер) и цену, по которой будет размещен обычный приказ. Рассмотрим эти две функции вместе.
Аргументами для функции отправки обычных заявок являются: направление (покупка или продажа, “B”/”S”), цена, тип (рыночная (“M”) или лимитированная (“L”)), код инструмента и класса. Для функции стоп-заявок необходим дополнительный параметр – стоп-цена. Кроме того, она будет возвращать результат – номер стоп-заявки. Когда стоп сработает, он отправит ордер на покупку или продажу для закрытия текущей позиции по рыночной цене. ID транзакции – уникальный идентификационный номер – будем формировать из текущего времени в каждом цикле программы.
‘ Формируем
идентификатор TransID
SERVER_
TIME=GET_INFO_
PARAM(«SERVERTIME»)
TransID =0+(SUBSTR
(SERVER_TIME,0,2)&
SUBSTR(SERVER_
TIME,3,2)& SUBSTR
(SERVER_TIME,6,7))
Обмен данными между терминалом и программами на Qpile чаще всего происходит через ассоциативные массивы (MAP), в том числе и отправка заявок осуществляется посредством передачи данных в массиве. Поэтому функция отправки торговых приказов, по сути, просто заполняет необходимые элементы массива и передает последний в терминал. Когда биржа получает ордер, она должна идентифицировать клиента, который его выставляет. Для этого указываются уникальный код клиента и его счет (найти их можно в таблице «Ограничения по клиентским счетам»). После успешного принятия ордера торговой площадкой функция устанавливает флаг наличия активной заявки FlagOrder = 1 и запоминает ее номер в глобальной переменной OrderNumber.
Account=»00000000000″
ClientCode =»00000000000″
NEW_GLOBAL
(«FlagOrder»,0) ‘
Глобальная переменная
– флаг наличия активной
заявки
NEW_GLOBAL
(«OrderNumber»,0) ‘
Глобальная переменная –
номер активной заявки
NEW_GLOBAL
(“TransID»,1) ‘
Идентификатор
транзакции
Order_TIMER=»30″ ‘
Длительность периода
ожидания ответа
торговой площадки
Коды функций выставления заявок на языке Qpile приведены в справке.
Покупка и продажа
Функции покупки и продажи по своей логике идентичны, но имеют противоположное значение, поэтому также рассмотрим их вместе. В качестве аргументов будем использовать код инструмента, его класс и количество контрактов (Qty), которое необходимо купить или продать. Эти функции сами рассчитывают цену заявки исходя из лучшей цены спроса/предложения и максимального проскальзывания (Slip). Последнее указывается в единицах минимального шага цены инструмента. Коды функций покупки и продажи на языке Qpile приведены в справке.
Функции снятия и контроля исполнения заявок
Снятие заявок такж происходит через ассоциативный массив. Процессы снятия заявок и стопов практически идентичны, аргументами для них являются номер приказа, код инструмента и код класса. Программный код функций снятия заявок по номеру можно найти в справке.
Когда ордер принят торговой системой, остается ждать его исполнения. Для этого достаточно остановить работу программы до наступления этого момента. Но на исполнение приказа может потребоваться некоторое время, и, если ждать исполнения внутри одного цикла программы, оно может превысить период одного цикла (особенно, если последний составляет несколько секунд). Чтобы избежать этого, исполнение ордера будем проверять в последующих циклах. Факт совершения сделки определим по остатку в текущей активной заявке: если он равен «0», заявка полностью удовлетворена. Если приказ не исполнен за отведенное количество циклов (Cycles), то снимаем его. В приведенном примере количество циклов ожидания равно 20. То есть при периоде расчета 1 секунда максимальное время ожидания составит 20 секунд.
NEW_GLOBAL («Count»,0)
‘ Счетчик циклов
NEW_GLOBAL
(«FlagStopOrder»,0) ‘ Флаг
стоп-ордера
NEW_GLOBAL
(«PriceStopOrder»,0) ‘
Цена последней заявки –
базовая цена для расчета
стоп-ордера
Cycles =20 ‘ Количество
циклов ожидания
исполнения заявки
Код функций контроля исполнения заявок приведен в справке.
Функция Stop-Loss
Данная функция будет выставлять новый стоп-ордер и снимать предыдущий. Аргументами для нее выступят код класса и код инструмента. В начале работы она определяет баланс по текущему инструменту: если он равен «0», просто снимаем все активные стоп-заявки (если они есть). Если баланс отличен от «0», то в зависимости от занимаемой позиции (короткая или длинная) выставляем новый стоп-ордер, а затем снимаем предыдущий активный стоп. Перед отправкой нового стоп-приказа функция рассчитывает цену стопа (StopPrice) исходя из цены последней заявки (PriceStopOrder) и величины стоп-лосса (wStopLoss). Переменная wStopLoss устанавливается в процентном выражении (в представленном варианте — 30%) от ширины основного канала Width (будет рассмотрена в следующей части).
Width = 0.8 ‘ Ширина
канала в %
wStopLoss = Width*0.3 ‘
Ширина стоп-лосса — 30%
от канала
Код функций выставления стоп-заявок представлен в справке.
Мы описали необходимые функции для работы с заявками. Все активные действия будут автоматически фиксироваться в LOG-файле, с помощью которого можно контролировать работу программы. Обращения к функциям BUY и SELL будут происходить из основной программы при наличии сигналов на покупку/продажу. Обращения к ORDER_DONE и STOP_LOSS также осуществляются из тела программы при наличии соответствующих флагов: FlagOrder и FlagStopOrder.
Новый взгляд
Если подробно рассмотреть алгоритм работы с заявками, представленный в начале данной статьи, но с учетом созданных функций, он будет выглядеть следующим образом:
1. При появлении сигнала на покупку/продажу идет обращение к функциям BUY/SELL;
2. BUY/SELL рассчитывают цену заявки и выставляют ее через функцию SEND_ORDER;
3. SEND_ORDER отправляет приказ в торговую систему и в случае его принятия биржей устанавливает флаг наличия активной заявки (FlagOrder=1), номер активной заявки (OrderNumber), после чего осуществляется переход на следующий цикл;
4. Если заявка активна (FlagOrder=1), вызывается функция ORDER_DONE, которая проверяет остаток (Rest) исполненных контрактов в текущей заявке;
5. Если остаток (Rest) больше 0, счетчик циклов (Count) увеличивается на единицу, и затем осуществляется переход на следующий цикл;
6. Если количество циклов ожидания (Count) превысило заданное максимальное число (Cycles), снимается заявка (функция KILL_ORDER), обнуляется флаг ее активности (FlagOrder=0), сбрасывается счетчик прошедших циклов (Count=0), после чего ожидается очередной сигнал торговой системы на покупку или продажу;
7. Если остаток (Rest) равен 0 (заявка исполнилась), то обнуляется флаг ее активности (FlagOrder=0), сбрасывается счетчик прошедших циклов (Count=0), устанавливается флаг стоп-ордера (FlagStopOrder=1), задается цена последней заявки (PriceStopOrder) и осуществляется переход на следующий цикл;
8. На следующем цикле при FlagStopOrder=1 идет обращение к функции STOP_LOSS, которая получает текущий баланс по инструменту;
9. При балансе равном нулю снимается стоп (функция KILL_STOP_ORDER), если имеется активный;
10. Если баланс отличен от нуля, выставляем защитный стоп-ордер (функция SEND_STOP_ORDER) и снимаем предыдущий (функция KILL_STOP_ORDER), если таковой имеется;
11. Снимаем флаг стоп-ордера (FlagStopOrder=0);
12. Ожидаем следующего сигнала.
Как видно из приведенного алгоритма, отправка заявок, контроль исполнения и выставление стоп-ордеров происходит в разных циклах программы. Такая реализация объясняется тем, что между этими событиями должно пройти некоторое время, чтобы данные в терминале успели обновиться. Например, если заявка удовлетворена, это должно найти отражение в количестве контрактов в таблице «Позиции по клиентским счетам». Если проверять баланс по инструменту сразу после сделки, в одном и том же цикле, данные не всегда успевают обновиться, и мы можем получить старое значение количества контрактов, что приведет к повторному (ложному) сигналу на покупку/продажу. Скорость обновления во многом зависит от качества связи между терминалом и сервером, а также от загрузки последнего. Следует обратить внимание на то, что качество канала определяется не только пропускной способностью (например, 10 Мб/с), но и зависит от количества потерянных пакетов и задержки их распространения. Кроме того, скорость выполнения программы может быть существенно меньше времени распространения пакетов данных от терминала до торговой площадки. Поэтому «плохой» канал может свести на нет преимущество быстродействующей системы. Таким образом, разнося процессы отправки заявок, проверки их исполнения и стоп-ордеров во времени (в разных циклах), мы увеличиваем устойчивость системы к задержкам при передаче данных.
В заключительной части данного цикла статей при помощи созданных функций мы реализуем стратегию торговли внутри канала, а сам канал сделаем динамическим с привязкой к скользящей средней.
Скачать коды к Шагу 3
Продолжение — Шаг 4.
Понятия:
Механическая торговая система – набор правил, однозначноопределяющих параметры операцийоткрытия и закрытия позиций побиржевому инструменту.
Стоп-заявка – приказ о покупке/продаже, размещенный выше/ниже уровня текущих цен, который реализуется при достижении определенной ценовой отметки. Чаще всего используется для ограничения потерь.
Ассоциативный массив (MAP) – абстрактный тип данных,который позволяет хранитьпары вида «ключ-значение».Используется в языке Qpile.
Позиции по клиентским счетам – отдельная таблица в терминале Quik, в которой отражены имеющиеся на счетах клиента ценные бумаги и производные инструменты.
- Котировки
- Акции +6
- Облигации +3
- Брокеры
- Другие +2
Ленты
Котировки
Акции
- Российские акции — Московская Биржа
- Американские акции — СПб Биржа
- Валютный рынок — Московская Биржа
- Корпоративные облигации — Московская Биржа
- ОФЗ — Московская Биржа
- Фьючерсы
- Фондовые индексы, сырьевые рынки, FOREX
- Американские акции — Биржи США
- Мировые акции — Иностранные Биржи
- Биржевые ПИФы и ETF — Московская Биржа
- Американские акции — Московская Биржа
- ПИФы — Московская Биржа
- Еврооблигации — Московская Биржа
- Индексы Российских Акций
- РЕПО с ЦК
- Индексы РЕПО
- Индексы облигаций
Блог им. vladislav99980
Торговые роботы. Ошибка в ТСлаб
- 19 февраля 2019, 08:13
- |
- VLTorgovie
-
Нашел в пятницу ошибку в ТСлаб, в кубике трейл стоп, который стандартный идет от ТСлаба, написал в поддержку, ответили только вчера, сказали да ошибка, будут исправлять. сейчас, надо перепроверять все роботы, как они отрабатывают. сделаю свою логику трейл стопа, и буду проверять.
★1
- хорошо
-
11
https://blog.tslab.pro/KB/3-torgovlya-rabota-agentov-robotov-soobshcheniya-pri-torgovle/1-torgovlya-agentami-robotami/2-soobshcheniya-pri-torgovle-i-ispolnenii-agentov/uslovnaya-zayavka-po-signalu-xl-moyoet-ne-srabotat
Пример: «Условная заявка по сигналу ‘ЗакПозПоStoLos1’ может не сработать, т.к. текущая цена на рынке 91570 (Цена условия 91750)!»
Это стандартное сообщение, цена уже 91570, а заявка выставляется по цене 91750 и становится активной на этом баре.
Необходимо переделать скрипт таким образом, чтобы он выставлял заявки по цене, соответствующей рынку.
Или добавить проскальзывания в торговых настройках агента или непосредственно в блоке выхода из позиции.
Или в торговых настройках включить автозакрытие.
Торговые настройки агента
Получить доступ к настройкам агента можно в окне Агенты. Окно Агенты можно открыть, выбрав пункт Главного меню: Торговля — Агенты.
Выполнить настройку агента можно как во время, так и после его создания.
Для настройки уже созданного агента воспользуйтесь кнопками быстрого доступа
-
Кнопка с изображением списка открывает вкладку общих настроек агента
-
Кнопка с изображением шестеренки открывает торговые настройки агента
После создания агента открыть данное меню можно нажав на значок списка в колонке Агент
В меню Общие можно выбрать нужный скрипт из списка для подключения к агенту, указать источник торговых данных, а так же указать тип управления лимитами.
Для того, чтобы внести изменения в общие настройки агента необходимо остановить работу самого агента. Убедитесь, что кнопка в столбце Состояние находится в отключеном (сером) состоянии
Колонки |
Описание |
---|---|
Скрипт |
Выбор скрипта из списка для создания агента. |
Торговое имя (необязательное поле) |
Вы можете дать дополнительное имя агенту для удобства отслеживания процессов. Данное поле не является обязательным. Изменение или присвоение торгового имени приведет к потере торговой статистики агента, если агент уже совершал сделки или выставлял заявки. |
Тип управления лимитами |
Выбор способа управления средствами, доступными агенту. Возможные значения: «Управляется агентом», «В денежном выражении», «В лотах», «В процентах от портфеля», «Макс. процент от портфеля» |
Значение лимита |
Значение лимита средств, выставляемое в соответствии со способом определения лимита в поле «Тип управления лимитами». |
Источники |
Открывает окно выбора инструментов. |
Расчет количества лотов в заявке:
-
В лотах. Число в поле «Значение лимита» умножается на число в блоке открытия позиции;
-
Управляется агентом. Число в блоке открытия позиции является количество лотов в заявке. Поле «Значение лимита» игнорируется;
-
В денежном выражении. Число в поле «Значение лимита» делится на текущую цену инструмента и умножается на число в блоке открытия позиции;
-
В процентах от портфеля. Число в поле «Значение лимита» умножается на количество денег на счету и делится на текущую цену инструмента и умножается на число в блоке открытия позиции;
-
Макс. процент от портфеля. При подаче заявки определяется объем свободных денег и заявка идет без превышения этой суммы.
(«Макс. процент от портфеля», отличается тем, что если свободных денег в портфеле не хватает, то будет куплено бумаг на меньшую сумму.)
При нажатии на значок кошелька в строке Источники можно открыть меню смены поставщика в источниках. Данная опция может быть полезна, если вы используете несколько источников в вашем скрипте и вам нужно сменить счет в одном из них.
Кнопка «+ Добавить инструмент» позволяет добавить ещё один источник данных в агенте. Один из вариантов использования кнопки:
Если ваш поставщик ограничивает объем загружаемых данных, например несколькими месяцами, вы можете скачать тики за больший период времени в виде текстового файла и добавить эти данные в виде второго источника.
Торговые настройки Агента
Торговые настройки Агента
Торговые настройки агента так же как и основные настройки доступны при создании нового агента, а так же окно Торговых настроек можно открыть нажав на значок шестеренки в колонке Агент
Настройки |
Описание |
---|---|
Исполнять входы сразу |
Параметр определяющий возможность автоматического входа в позицию без ручного подтверждения. Команда входа будет выполнена только если сигнал входа был сформирован на последнем закрытом баре. |
Исполнять выходы сразу |
Параметр определяющий возможность автоматического выхода из позиции без ручного подтверждения. Команда выхода будет выполнена двумя способами в зависимости от настройки автозакрытия. В случае если параметр автозакрытия равен нулю, команда будет выполнена с формированием цены по последнему закрытому бару, в противном случае команда будет выполняться по рынку в соответствии с настройками автозакрытия. |
Автооткрытие (баров) |
Количество баров, в течение которого пропущенный вход будет выполнен автоматически по рынку, если выбран параметр «Исполнять входы сразу». Далее будет выдано сообщение о пропущенном входе и необходимости ручного вмешательства. Внимание! «Изменить По …». Для блоков изменения позиции автооткрытие не работает! |
Блок. «по рынку» с фикс. ценой для автооткрытия |
Блокирует опцию «по рынку» с фиксированной ценой для автооткрытия и распространяется на Менеджер команд. |
Автозакрытие (баров) |
Количество баров, в течение которого пропущенный выход будет закрыт автоматически по рынку, если выбран параметр «Исполнять выходы сразу». Далее, если не хватило установленного кол-ва баров, будет выдано сообщение о пропущенном выходе и необходимости ручного вмешательства. Внимание! «Изменить По». Для блоков изменения позиции автозакрытие не работает ! Автозакрытие при использовании «Изменить По» срабатывает только если была попытка закрыть позицию в 0 и не получилось. |
Блок. «по рынку» с фикс. ценой для автозакрытия |
Блокирует опцию «по рынку» с фиксированной ценой для автозакрытия и распространяется на Менеджер команд. |
Игнорировать позиции вне истории |
Игнорирует (не учитывает) позиции, которые были закрыты вне запрошенных исторических данных. |
Увед. о проп. входах |
Уведомляет о пропущенных входах в позицию. |
Не открывать, если есть пропуск выхода |
Не открывает новые позиции, если существует ошибка «пропущен выход из позиции». |
Не уведом. пересчет |
Не уведомляет о пересчете скрипта. |
Виртуальная позиция макс. баров |
Определяет, в течение какого периода времени информировать о пропущенной позиции, прежде чем она исчезнет (0 — бесконечно, любое другое положительное значение равно количеству свечей). |
Игнорировать сигнал выхода не на посл. баре |
Игнорирует сигнал выхода из позиции, созданный агентом не на последнем (текущем) баре. |
Ждать исполнения выхода |
Количество свечей, в течение которых программа будет ждать исполнения лимитной заявки выхода из позиции. Затем заявка будет отменена. Настройка работает для активной заявки(цена инструмента касалась цены заявки, но не была исполнена из-за недостатка ликвидности) |
Ждать исполнения входа |
Количество свечей, в течение которых программа будет ждать исполнения лимитной заявки входа в позицию. Затем заявка будет отменена. Настройка работает для активной заявки(цена инструмента касалась цены заявки, но не была исполнена из-за недостатка ликвидности) |
Учитывать комиссию |
Учитывать комиссию из заявок в расчете профита. Если брокер присылает комиссию в сделках, то комиссия будет учитываться в результатах торговли агента. |
Исполнение агента. Дополнительная информация
Исполнение агента. Дополнительная информация
Исполнять входы/выходы сразу
Исполнять входы/выходы сразу
Запускает автоматическую торговлю. Если данная опция отключена сигналы будут поступать только в Менеджер команд для ручного исполнения.
Автооткрытие/автозакрытие
Автооткрытие/автозакрытие
Выполняет автоматическое исполнение по рынку, если за указанное количество баров в пункте меню Ждать исполнение (активируется при касании цены) заявка не исполнилась или если был сбой в интернет соединении. Собственно, можно ставить и большее значение, чем 2 и 3, главное, чтобы оно было не больше, чем загруженных в скрипт баров. Посмотреть можно в окне «Лог» агента или скрипта. При компиляции или пересчете пишется количество баров.
Игнорировать позиции вне истории
Игнорировать позиции вне истории
При торговле, в отсутствии загруженной истории, заявки в агент рисуются на первом баре агента. Флаг запрещает рисование этих сделок. Настраивайте свойства скрипта таким образом, чтобы как минимум агент видел последние вход и выход из позиции. Если агент «не смотрит» историю своих сделок для выставления новых заявок (не считает например среднюю цену входа всех сделок), то флаг можно поставить. Если нужна история, то ее лучше загрузить больше. Ограничив в свойствах скрипта параметром МаксБаров.
Уведомлять о пропущенных входах
Уведомлять о пропущенных входах
Если стоит флаг, то при пропуске сигнала входа в позицию, будет отправлено оповещение в сообщениях или на почте (если настроен менеджер уведомлений).
Не открывать, если есть пропуск выхода
Не открывать, если есть пропуск выхода
Флаг запрещает открытие новых позиций, если был пропущен сигнал на выход из позиции.
Флаг запрещает вывод информации в сообщения и почту, при пересчете агента. Как правило, используется для очень быстрых скриптов, где не исполнение заявок обусловлено ликвидностью на рынке. Это очень важный флаг для службы поддержки. Если его поставить, то пересчеты агента не записываются в лог. Ставя этот флаг, Вы понимаете, что бессмысленно разбирать заявки агента, который их выставляет сотнями в день. Какие из них сработали, а какие нет, он посчитает сам, выставит недостающее.
Виртуальная позиция, макс бар
Виртуальная позиция, макс бар
Регулирует количество баров, сколько действует последний насчитанный сигнал в истории. Например, если поставить 10, а последний сигнал был 11 баров назад, сигнал пропадет с графика и в Менеджере команд (даже при пропуске входа), и агент будет насчитывать более «свежий» сигнал.
Игнорировать сигнал выхода не на последнем баре
Игнорировать сигнал выхода не на последнем баре
Флаг действует подобно настройке «Виртуальная позиция, макс. бар» но работает только для выхода из позиции и только на один бар. Т.е. поставив этот флаг, Вы ожидаете, что агент будет ставить каждую заявку на выход из позиции только на один бар. На следующем баре, если сигнал из скрипта продолжается, заявка будет продолжать стоять. Если изменится цена в заявке, заявка изменится. Но как только в агенте пропадет сигнал на выставление, заявка будет снята, даже если была активной («Активная» — значит цена на рынке коснулась заявки, но не хватило ликвидности для исполнения). Как правило, флаг используется для скриптов, выставляющих на выход только тейкпрофиты, но может использоваться и для других целей, главное понять механизм. Т.е. при данном флаге ни о каком Автозакрытии или Ожидания исполнения не может быть и речи.
Ждать исполнения входа/выхода
Ждать исполнения входа/выхода
Работает только с условными и лимитными заявками. Включается в том случае, если текущая цена коснулась цены заявки, но не исполнилась. Количество баров, в течении которых заявка будет продолжать стоять в очереди заявок. По истечении количества баров, заявка просто снимется. Настраивать данный параметр необходимо совместно с «Автозакрытием/открытием». Если автооткрытие/автозакрытие больше, чем Ждать исполнения, то после снятия неисполненной заявки, пойдет замещающая заявка «по рынку». Если «авто» меньше, чем «ждать», то заявка просто снимется и агент будет насчитывать следующий сигнал. Флаг распространяется и на заявки, на которые действует флаг «по рынку с фикс ценой».
Учитывать ли комиссию, приходящую от брокера (не все брокеры присылают комиссию в сделках). Не все инструменты можно пересчитать (например, для фьючерсного рынка Moex размер лота всегда равен 1) поэтому комиссия может быть сильно завышена, по отношению к графику дохода. Когда Вы видите, что комиссия завышена, флаг не ставить, это исключит комиссию из расчета дохода. Приходит ли комиссия в сделках от брокера, можно посмотреть в таблице «Свои сделки«.
Настройки |
Описание |
---|---|
Проскальз. в шагах |
Размер проскальзывания в шагах цены инструмента, которое будет передаваться в заявку, создаваемую агентом. Заявка типа «По рынку» не учитывает настройки проскальзывания и выполняется по первой предложенной цене. |
Проскальз. в % |
Размер проскальзывания в процентах, которое будет передаваться в заявку, создаваемую агентом. |
Take-profit без проскальзывания |
Заявка тейк-профит создается не условной, а лимитной (но без проскальзывания). |
Открытие лимитными заявками |
Для открытия позиции программа создает лимитные заявки без проскальзывания. |
«По рынку» с фикс. ценой |
Заявка по рынку создается не по текущей цене, а по цене открытия бара (как при расчетах) +/- проскальзывание если выбран «Интервал+сделка». Eсли выбран режим пересчета «Интервал», то берется цена закрытия последней свечи. |
«Плохие» заявки по рынку |
Условные заявки закрытия позиции с ценой хуже рынка выставляются как рыночные. В случае появления сообщения: «Условная заявка по сигналу ‘{0}’ может не сработать, т.к. текущая цена на рынке {1} (Цена условия {2})! заявка уходит как рыночная, а не как условная. |
Экспирация заявок, дни |
Позволяет передать брокеру в условной заявке время экспирации в днях. По умолчанию программа условные заявки выставляет на два дня. Рекомендуется использовать при работе с большими таймфреймами.(не касается криптовалютных рынков) |
Выставление заявок. Дополнительная информация
Выставление заявок. Дополнительная информация
Работает только для условных заявок! Для остальных типов заявок проскальзывание не нужно. В торговых настройках проскальзывание задается для всего скрипта, оба проскальзывания складываются.
Если поставить и в процентах и в шагах цены, оба проскальзывания суммируются.
Данное проскальзывание имеет меньший приоритет, чем проскальзывание непосредственно в блоке входа и/или выхода из позиции (устанавливается в абсолютных значениях).
Если в определенном блоке входа стоит 5 пунктов, а в общем проскальзывании стоит 1%, то для заявок этого блока входа будет браться 5 пунктов, а для всего остального скрипта 1%.
Тейк профит без проскальзывания
Тейк профит без проскальзывания
По умолчанию блок «Тейк-профит» выставляет условную заявку!
Данный флаг, меняет тип заявки на «Лимитную». Следует помнить, что для тех поставщиков данных, у которых есть «связанные заявки» флаг их выключает. И между стопом и профитом на каждом пересчете программой будет выбираться только одна заявка, цена которой в данный момент ближе к текущей цене.
Открытие лимитными заявками
Открытие лимитными заявками
Флаг специально для блоков входа в позицию «Если больше/если меньше«. По умолчанию данные блоки для выставления условных заявок. Если стоит флаг, то тип заявок меняется на «Лимитные». Советуем использовать «Открытие позиции лимитной ценой» для реальной торговли.
Флаг специально создан для блоков «По рынку«, меняет тип заявок с «По рынку« на «Лимитную«, скорее «условно лимитную». Заявка будет выставляться с ценой закрытия прошлого бара с учетом проскальзывания. Флаг действует на все сигналы агента, включая Автооткрытие и Автозакрытие, сигналы в менеджере команд. Здесь есть один момент. Если в лаборатории стоит пересчет «Интервал + сделка«, то заявка будет выставляться с ценой Открытия текущего бара.
Не используйте с поставщиком данных Smartcom!, в данном поставщике отсутствует такая возможность, заявки будут выставляться с неверными ценами.
Работает для условных заявок закрытия позиции. Выставляет рыночные заявки, вместо лимитных заявок. Также работает для «Тейк-профит без проскальзывания«, так как сначала проверяется, что цена плохая, только потом работает флаг «Тейк-профит без проскальзывания». См.
Алгоритм исполнения сигналов
.
Пояснение на примере заявки стоп-лосс:
Стоп-лосс это условная заявка. Когда цена коснется цены условия она преобразуется в лимитную заявку с ценой условия «+- проскальзывание». Так как стоп-лосс меняется ступенчато, на очередном пересчете цена условия может оказаться сильно хуже рынка сразу же на открытии свечи.
Это и есть «плохая» заявка. То есть, у вас длинная позиция, цена сейчас 100, а вы подаете заявку закрыть если будет меньше 120. Или у вас короткая позиция, цена 100, а вы хотите закрыть позицию, если цена будет больше 80. Такая заявка не исполнится пока цена не вернется к цене условия «+- проскальзывание».
Если включена опция плохие заявки по рынку, то вместо лимитной заявки выставится рыночная. Для стоп-лосс короткой позиции соответственно рыночная заявка на покупку, а для стоп-лосс длинной позиции рыночная заявка на продажу.
Следовательно, сделки произойдут по лучшим предложениям покупки и продажи, которые будут в очереди заявок на момент пересчета. Как правило, у брокеров данный механизм работает автоматически, но у некоторых брокеров (например Финам) его нет, в данном случае рекомендуется ставить флаг.
Под событиями понимаются операции брокера или биржи с заявкой при исполнении транзакции или общие события относящиеся к программе.
Наименование события |
Описание |
---|---|
Заявка отклонена |
Брокер (или биржа) отклонил заявку |
Заявка выполнена полностью |
На рынке произошли сделки, удовлетворяющие весь запрошенный объем в заявке |
Заявка отменена |
На пересчете агента, скрипт рассчитал, что сигнала нет, заявку необходимо отменить. Программа подает брокеру команду. Данное событие является результатом ответа от брокера «Заявка отменена». |
Изменение количества в заявке |
В Агенте на основном пересчете скрипт рассчитал изменение количества лотов, которое отличается от предыдущего. |
Открытие позиции |
Сигнал исполнен, программа получила номера: Транзакция, Заявка, Сделки. Все номера привязаны к сигналу агента через портфельный номер. |
Закрытие позиции |
Сигнал на закрытие позиции исполнен. Портфельный номер открытия позиции имеет исполненный портфельный номер закрытия позиции. |
Торговля начата |
Пришел статус с биржи, что торги открыты. Чаще всего в программе используется первая сделка рынка. Начало торговли определяется первой котировкой текущего дня, |
Торговля остановлена |
Пришел статус с биржи, что торги остановлены. |
Бар закрылся, но нет сделок |
Бар закрылся по серверному времени, но новых сделок нет |
Ограничение претрейда |
Сработал один из фильтров Управления рисками. Торговля-Управление рисками. |
Некоторые вопросы и ответы
Некоторые вопросы и ответы
В случае если активирован параметр «Ждать исполнения выхода», то дозакрытие позиции происходит в течение количества свечей, указанном в данном параметре. Затем происходит дозакрытие позиции по рынку в течение количества свечей, указанном в параметре «Автозакрытие (баров)».
Количество баров в «Автозакрытие (баров)» должно быть больше, чем в «Ждать исполнения выхода». Если значение в параметре «Автозакрытие (баров)» меньше, чем в «Ждать исполнения выхода» или равно ему, то автозакрытие не срабатывает.
В случае если активирован параметр «Ждать исполнения входа«, то добор позиции происходит в течение количества свечей, указанном в данном параметре. Затем происходит добор позиции по рынку в течение количества свечей указанном в параметре «Автооткрытие (баров)», кроме случая использования блоков «Изменить По».
Количество баров в «Автоооткрытие (баров)» должно быть больше, чем в «Ждать исполнения входа». Если значение в параметре «Автоооткрытие (баров)» меньше, чем в «Ждать исполнения входа» или равно ему, то автооткрытие не срабатывает.
Донабор позиции или закрытие позиции
Донабор позиции или закрытие позиции
Если на закрытие позиции стоит 2 лота в лимитной заявке. При первом пересчете закрылся только 1 лот. Будет ли далее при наличии сигнала оставаться или перевыставляться заявка на оставшийся 1 лот?
Будет оставаться заявка на той же цене, пока действует Ждать исполнения выхода из позиции.
Для реализации перестановки лимитной заявки на закрытие позиции, можно использовать блоки Количество и Обновляемое значение, вместе с настройкой «Игнорировать сигнал выхода не на последнем баре«.
Если стоит Автозакрытие, закрытие остатка позиции произойдет автоматически по рынку.
Если ждать исполнения выхода меньше Автозакрытия — как только закончится Ждать исполнения.
Все то же самое касается и «донабора» лотов в позицию, в соответствии с наименованиями настроек. Для Открытия позиции действует настройка «Виртуальная позиция макс.баров».
Вопрос:
Если НЕ выставлено Ждать исполнения и НЕ выставлено Автооткрытие и параметр Виртуальная позиция = 0.
Выставили лимитную заявку на 10 лотов, исполнили 5. Сигнал на один бар.
Как поведет себя программа?
Программа снимет остаток и без сообщений, будет вести 5 лотов, алгоритм продолжит исполняться с набранным количеством лотов.
«Игнорировать позиции вне истории»
«Игнорировать позиции вне истории»
«Как быть в случае, если у меня моя точка входа ушла за пределы истории. Т.е. история загружается за последние два дня, а вход был 4 дня назад. Как в этом случае себя поведет скрипт или агент? Будет ли эта сделка закрыта по условию, описанному в скрипте или расчет будет вестись некорректно и таких сделок быть не должно? «
Если нет бара входа, то могут и часто неизвестны данные этого бара. Нужно поставить такое количество баров, чтобы в истории всегда был виден последний вход в позицию.
Расчет МОЖЕТ вестись некорректно.
«Ситуация 2: скрипт делает несколько последовательных входов, часть из которых уходит за пределы истории. Как в этом случае будут закрываться ушедшие за пределы истории позиции? Спасибо заранее»
МОГУТ закрываться некорректно. Могут быть вызваны сигналы, которых не могло быть при загрузке всей истории. Больше зависит от расчетных величин, рассчитывающих выход из позиции и настроек. Например, если стоит в торговых настройках «Игнорировать позиции вне истории«
Рекомендация: Поставить такое количество баров, чтобы не закрытые входа в позицию были на своих барах и не сдвигались на первый бар загруженной истории.
В очередном видео уроке, постарался обьяснить разницу между различными видами заявок в программе TSLab.
1 Лимитная заявка. Нельзя поставить лимитку в покупку, выше текущей цены и в продажу, ниже текущей цены. Если на маленьком таймфрейме использовать лимитные заявки, то можно получить штраф от биржи за превышение допустимого количества транзакций в день. Лимитная заявка всегда висит в стакане (на бирже).
2 Открытие если выше/ниже (стоп-лосс и тейк-профит в том числе) — условный вид заявки. Данная заявка не висит в стакане, а находится у брокера и при достижении заданной цены, брокер пересылает ее на биржу! Транзакции в данном случае не будут накапливаться. Заявки в покупку или продажу можно разместить где угодно, не зависимо от текущей цены. Сработает данная заявка или нет зависит от проскальзования и заданного алгоритма.
3 Открытие позиции по рынку. В момент наступления сигнала совершается сделка, наиболее простой вид заявки и 100%-е срабатывание.