Для того чтобы позиции из заявок не формировались вообще (и на это не тратились ресурсы), необходимо включить опцию "Отключить генерацию позиций", в свойствах скрипта. Это позволяет работать с заявками напрямую через АПИ
В программе возможны следующие режимы работы:
заявками управляет TSLab через позиции.
при включенной опции "Отключить генерацию позиций" агент сам выставляет и снимает заявки, но никакого расчета позиций не будет.
Формировать заявки одновременно через ISecurityRt.NewOrder и через встроенный механизм формирования позиций нельзя. Нужно пользоваться либо одним, либо другим.
Если генерация позиций отключена, то позиций нет, следовательно, все управление на Вас. Никакие наши настройки, связанные с позициями не работают. Все торговые настройки агента касаются случая, когда генерация позиций осуществляется программой. При выключенной генерации скрипт будет перебирать все заявки, с момента запуска агента. Однако, в поставщике данных есть настройка кешей, можно затирать старую историю.
Ответ Службы поддержки TSLab на вопрос пользователя:
Добрый день. Есть ли возможность в АПИ вручную указывать период действия (активности) условной и лимитной заявок? ну да, отключив "Позиции" TSLab можно управлять всем процессом самостоятельно Но писать всё, что касается управления позицией нужно самому. Но, не отключая позиции, в не зависимости АПИ это или редактор, такое простое управление, как количество баров кажется простым и для него есть простое решение. Позиция TSLab формирует виртуальный сигнал, пока действует условие выставления заявки. Следовательно, достаточно подать на блок входа условие, соответствующее нужному, а в настройках управления позицией (Торговые настройки) для агента просто поставить "Виртуальная позиция баров" = 1 , таким образом виртуальная позиция будет сбрасываться сразу же, если нет условия на ее выставления из скрипта. Для выхода из позиции, "Игнорировать сигнал выхода не на последней свече".
В окне Свойства лаборатории Вы можете включить отображение порядкового номера блоков, вынесенных в рабочее пространство редактора. Для этого включите опцию Показывать номер блока.
Для начала нужно пояснить, как собирается скрипт из блоков. После того как Ваш алгоритм готов и все используемые в скрипте блоки связаны между собой Вы можете нажать на кнопку Сохранить и выполнить для запуска компиляции скрипта. В результате выполнения процедуры компиляции создается исполняемый файл в формате .cs. У данного файла есть последовательность исполнения, которая определяется последовательностью добавления блоков в редактор.
Например, Вы добавили в редактор сначала блок ОЗ (Обновляемое значение), а потом добавили блок Формула, от которого ОЗ берет значение. Вы компилируете скрипт и не понимаете, почему ОЗ не имеет значения, хотя блок формула при выводе на график значение имеет.
Все дело в ПОСЛЕДОВАТЕЛЬНОСТИ объявления переменных и расчета блока Формулы и ОЗ. При пересчете скрипта блок Формула рассчитался, а ОЗ это значение никак не могло получить, так как блок Формула рассчитался после расчета ОЗ.
Но работа скрипта сложнее работы автомата, выдающего последовательную очередь, и потенциально последовательность исполнения некоторых блоков можно менять, только на результат работы скрипта это не повлияет.
Генерация кода связана с логической последовательностью взаимосвязей кубиков в редакторе.
Не может быть выполнено закрытие позиции раньше, чем открытие этой позиции.
Не может сначала расчитаться вход в позицию, а потом логическая формула, дающая сигнал.
Основной принцип построения скрипта таков:
Сначала рассчитываются входы в позицию, то есть ведутся расчеты формул и индикаторов, от которых зависит данный вход в позицию.
Затем рассчитываются выходы из позиции, то есть формулы и индикаторы от которых зависит выход из позиции.
Таким образом нельзя на баре сначала посчитать выход из позиции, а потом вход, всегда сначала считаются все входы, потом все выходы.
Часто, проблема может решаться обращением к предыдущему бару [i-1] на входе в Обновляемое значение, если решение "удалить кубик / собрать(компилировать) скрипт / добавить кубик / собрать скрипт", не подходит.
Для блока Обновляемое значение добавлена возможность определить очередь расчета. Для этого в свойствах блока выберите вариант настройки параметра Порядок исполнения. Доступны следующие варианты:
Общий порядок;
В конце алгоритма;
После выхода из позиции.
В программе не предусмотрен какой-либо дополнительный интерфейс по замене очереди расчета.
Если в редакторе у некоторых блоков отсутствуют номера, это означает, что алгоритм для этих блоков не заканчивается. Например, нет вывода на график, поэтому эти блоки не участвуют в расчетах.
Что такое пересчет? Это момент расчета всего скрипта и передачи брокеру заявок (если скрипт сформировал Сигнал для программы). В программе предусмотрено несколько разных по своей сути пересчетов и сделано это для того, что бы охватить полный спектр возможных задач.
В Свойствах лаборатории вы можете найти опцию, отвечающую за интервалы пересчета скрипта: Вкладка Скрипт -> Режимы обновления -> Интервал пересчета.
Самый распространенный режим пересчета - Интервал (выбран по умолчанию для нового скрипта). Интервал предназначен для очень широкого спектра задач, где расчет индикаторов и выставление заявок должны проходить, только с определенным интервалом. При выборе режима Интервал Вы даете задачу программе рассчитывать скрипт с определенным интервалом, выбранным в свойствах (Интервальный период + Интервал). "Интервальный период" может быть тиковым, секундным, минутным, дневным, месячным. Так например:
если в строке Интервальный период выбрать Тики и в строке Интервал выставить значение 250, то скрипт будет пересчитываться через каждые 250 сделок, совершенных на рынке.
если в строке Интервальный период выбрать Секунды и в строке Интервал выставить значение 24, то скрипт будет пересчитываться каждые 24 секунды. При этом свечи на графике будут так же соответствовать выбранным параметрам.
ТаймФреймом - принято называть выбранный Интервал в совокупности с Интервальным периодом.
Тик - совершенная на рынке сделка.
Следует учесть, что сервера брокеров отдают историю только для "стандартных" таймфреймов, обычно это:
1 Тик
1 Минута
5 Минут
15 минут
1 час
1 день
Есть сервера, которые отдают только 1 минуту, 5 минут и 15 минут. Есть сервера (например у брокера Алор), где есть секундные данные. Они так же имеют стандарты 1 сек, 5, 15. Все остальные программа считает сама из доступной истории (с сервера брокера и "кеша", сохраненного на компьютере во время работы (накопленной истории)). Например, если нужен таймфрейм 7 минут, программа возьмет тики, накопленные при подключении и построит из них 7 минут. То есть это нестандартный таймфрейм. А если есть пропуск пятиминутного графика, то даже имея тиковый кеш, программа не построит график в офлайне, график будет скачан с сервера при подключении, так как является стандартным.
В TSLab решена проблема с данными для алготрейдинга, которые передают все без исключения брокеры. Это значения предторговой и послеторговой сессий, сбивающие индикаторы. На минутных, секундных и тиковых таймфреймах данные за пределами торговой сессии обрезаются. Из значений 15 минутных баров для некоторых брокеров строит часовые и дневные таймфреймы. Поэтому часто, при первом запуске программы дневные, часовые графики имеют короткую историю
Точкой отсчета является Закрытие бара(свечи). Как только бар выбранного таймфрейма закрывается, происходит пересчет скрипта (расчет индикаторов, логических условий, формул и т.д.) и отправляются данные брокеру (если таковые есть). Таким образом скрипт от одного закрытия бара до следующего (от пересчета до пересчета), ничего не знает о том, что возможно совершились какие-либо условия в этот период. Он узнает о них только на закрытии бара.
Например, скрипт на пересчете насчитал сигнал входа, сгенерировал запрос на транзакцию и отправил брокеру. О том, что заявка исполнена или отклонена он узнает только на закрытии следующего бара выбранного таймфрейма. (Для обхода данной ситуации используйте Сжатие/Разжатие)
"перв.сделка" - первая сделка текущего бара.
"Интервал+ перв.сделка" то же, что и "Интервал". Отличие, что пересчет происходит не по закрытию бара, а по открытию текущего бара.
"Интервал (для событий)" предназначен для работы с Событиями. Не отличается от пересчета Интервал в целом, но сильно отличается работой на текущем баре. Прочитайте статью: Пересчеты по событиям
При данном пересчете свечи/бары будут рисоваться в зависимости от выбранного в свойствах таймфрейма. А пересчет будет проходить при каждой рыночной сделке на выбранном инструменте. Соответственно, этот пересчет отличается от "Интервала с таймфреймом 1 тик" только тем, что есть возможность нарисовать график отличный от 1 тика. "Сделка" предназначен для арбитражных стратегий и стратегий использующих только лимитные заявки. При данном пересчете необходимо учитывать, что в Торговых Настройках, параметры автооткрытия/закрытия, Ожидания и т.д. будут учитывать каждый пересчет, как один бар.
Пример:
Если при Интервале = 1 минута Вы использовали Автооткрытие = 10 минут, то при Интервале пересчета = Сделка нужно ставить Авооткрытие значительно больше. За одну минуту может проходить сотни сделок, соответственно за 10 минут может пройти и 2000 и 3.
Учитывайте, что индикаторы будут пересчитаны внутри бара несколько раз, торговля от лаборатории может отличаться значительно. Проблемы при исполнении сигналов
Пересчет проходит при изменении Лучшего Бид или Аск.
Изменился объем лучшего бид - пересчет, изменилась цена лучшего бид - пересчет, то же, если изменился Аск.
Данный пересчет также предназначен для арбитражных стратегий и для стратегий, только с лимитными заявками. Это самый быстрый пересчет.
Пересчет проходит при изменении цены лучшего Бид или Аск.
Изменилась цена лучшего бид - пересчет, то же, если изменился Аск.
Данный пересчет так же предназначен для стратегий, с четко понимаемым алгоритмом выставления заявок. Есть Цена -> Поставили Лимитку. Без дополнительных условий, индикаторов, которые могут при пересечениях внутри бара давать множественные сигналы, которых при пересчете "Интервал" нет, т.е. которых нет в Лабораторном скрипте! Лабораторный скрипт всегда показывает то, что будет (приблизительно) в агенте при пересчете "Интервал".
В редакторе скрипта используется блок Метроном
Используется Интервал(По событиям)
По вызову метода Recalc в API
В случае, если идет загрузка исторических сделок по инструменту(тики) от поставщика данных. Обычно при подключении к поставщику данных.
При сохранении скрипта на основании которого настроены работающие агенты. То есть как только меняем и сохраняем скрипт, то агенты также рассчитываются и принимают измененный скрипт(к параметрам индикаторов не относится).
Свойства Лаборатории можно открыть с помощью контекстного меню или с помощью кнопки "Свойства", расположенной на панели заголовков окон листа.
Метод декомпрессии
Метод декомпрессии сжатых данных в режиме расчета/оптимизации на исторических данных.
Данный параметр определяет временной сдвиг данных рассчитанных для компрессированных временных интервалов при декомпрессии к оригинальному (базовому) временному интервалу.
Допустим, базовый интервал расчета 1 минута. Для расчета индикаторов использована компрессия в интервал 1 час.
бар 12.00 часовой = 12.00 - 12.59 минуты
при разжатии индикаторов:
1-й метод: значение 12.00 начинает действовать (станет доступно для расчетов внутри скрипта) с минутного бара 12.59
2-й метод: значение 12.00 начинает действовать (станет доступно для расчетов внутри скрипта) с минутного бара 12.00
3-й метод: значение 12.00 начинает действовать (станет доступно для расчетов внутри скрипта) с минутного бара 13.00
Внимание! 2-й метод не рекомендуется применять для тестирования стратегий из-за возможного "заглядывания в будущее", т.к. значение компрессированного индикатора доступно до окончания часа!
Для оптимизации торговых стратегий наиболее оптимален 1-й метод.
2-й метод применим исключительно для визуального и графического анализа.
3-й метод обладает небольшим запаздыванием равным одному базовому интервалу и может применяться для тестирования стратегий опирающихся на короткие (секундные) интервалы для имитации возможных задержек исполнения, медленных каналов связи и т.п.
Торговать с (бар)
Параметр, управляющий пропуском определенного числа баров до генерации первого торгового сигнала, необходимого для стабилизации индикаторов.
Параметр применим только для скриптов, написанных в визуальном редакторе программы. При использовании скриптов, созданных во внешней среде, необходимо проверять номер свечи самостоятельно.
Доход раздельно по инструментам
Если опция включена, то при наличии более одного торгового источника появляется не одно окно Доход, а несколько, в которых показаны раздельные графики дохода по источникам.
Отключить генерацию позиций
Множество сигналов выхода
Множество сигналов выхода включает генерацию более одного (сигнала) команды закрытия позиции условными или лимитными заявками. Например, выставление заявки Стоп-лосс условной заявкой и Тейк-профит лимитной заявкой. Или, например, Открытие позиции 10 лотов и выставление на один бар, частично закрывающие позицию несколькими блоками ИзменитьПо.
Рекомендуется относиться к опции очень осторожно! Если цены заявок слишком близко расположены друг к другу, может возникнуть ситуация двойного выхода из позиции.
Начальный депозит
Размер начального депозита для модельных расчетов показателей торговой стратегии.
Вид имитации
Способ расчетов финансовых результатов при моделировании:
По умолчанию - используется настройка, определяемая в блоках открытия позиции. Количество лотов/контрактов будет равно параметру "Количество" в блоках открытия позиции.
Рассчитывать из суммы - объемы позиций рассчитываются из депозита и цены за один контракт/лот инструмента и не умножается на параметр "Количество" в блоках открытия позиции. Реинвестирование прибыли не применяется.
Рассчитывать изменения - с реинвестированием прибыли и пересчетом размера депозита после закрытия каждой сделки. Дополнительно умножается на количество в блоках открытия позиции.(если на вход количество подается значение, то это коэффициент для умножения. По умолчанию коэф. равен 1)
Режим торгов
При моделировании определяется возможность совершения только длинных, только коротких или и длинных и коротких сделок.
Режим исполнения лимитных заявок
Касание цены
Пересечение цены
Показывать номер блока
Интервал пересчета
Управление режимом пересчета скрипта и генерации команд в режиме реальной торговли. Режимы пересчета:
Интервал - пересчет происходит только по закрытию бара. Этот режим расчета максимально приближен к расчетам в лаборатории. Вход в позицию и выход из нее на одном баре невозможен. Условные заявки (Стоп приказ) будут выставлены только после закрытия свечи на которой была открыта позиция.
Сделка - пересчет происходит после каждого тика (любой рыночной сделки по инструменту). В расчетах учитываются незакрытые бары. Вход в позицию и выход из нее возможен на одном баре, что может давать результаты существенно отличающиеся от моделирования в лаборатории. Применение данного режима рекомендуется только для создания арбитражных алгоритмов.
Пок/прод - пересчет происходит после каждого изменения - лучшей покупки либо лучшей продажи. В расчетах учитываются незакрытые бары. Вход в позицию и выход из нее возможен на одном баре, что может давать результаты существенно отличающиеся от моделирования в лаборатории. Применение данного режима рекомендуется для создания арбитражных алгоритмов.
Пок/прод без объема - аналогичен предыдущему, но не учитывает изменения объема.
Интервал + первая сделка - Пересчет скрипта вызывается по приходу информации о первой сделке интервала. Информация о первой сделке доступна при расчетах.
Обновлять в реал. времени
Включение обновления и пересчета в реальном времени в режиме Лаборатории. Данный режим используется для имитации работы скрипта с реальными данными.
Пересчет по каждому источнику
Если стратегия использует несколько источников данных, при включении данной опции пересчет будет происходит при открытии новой свечи для каждого источника. Данная опция не влияет на режимы Сделка и Пок/прод.
Интервальный период
Величина интервала обновления графика:
Месяцы (временной интервал между соседними свечами составляет один месяц);
Недели (временной интервал между соседними свечами составляет одну неделю);
Дни (временной интервал между соседними свечами составляет один день);
Минуты (временной интервал между соседними свечами составляет одну минуту);
Секунды (временной интервал между соседними свечами составляет одну секунду);
Тики (периодом обновления графика являются колебания цены ценной бумаги).
Внимание! Секунды и Тики строятся на основе информации о сделках.
Интервал
Значение базового интервала (количество интервальных периодов).
При выборе значения поля Интервал Вы даете задачу программе рассчитывать скрипт с определенным интервалом. Например:
если в Интервальном периоде выбрать значение Тиковый и в Интервале поставить 250, то скрипт будет пересчитываться через каждые 250 сделок, совершенных на рынке;
если в Интервальном периоде выбрать значение Секунда и в Интервале поставить 24, то скрипт будет пересчитываться каждые 24 секунды. При этом свечи на графике будут так же соответствовать выбранным параметрам.
Дата от
Дата начала временного интервала истории котировок используемого в расчетах.
Исп. дату от
Флаг использования начальной даты. Если не включено, используется максимально доступное количество данных, определяемое источником.
Дата к
Дата окончания временного интервала истории котировок используемого в расчетах.
Исп. дату к
Флаг использования конечной даты. Если не включено, используется максимально доступное количество данных, определяемое источником.
Макс. дней
Позволяет ограничить количество дней запрашиваемых исторических данных (от "Дата от"). Значение "0" - количество без ограничения.
Если флаг использования конечной даты не выбран, то последним днем выборки будут считаться текущие сутки до 0 часов следующего дня.
Начало сессии
Устанавливает временные интервалы для сессии.
Конец сессии
Устанавливает временные интервалы для сессии.
Макс. баров
Максимально количество баров используемое для расчета. Данная настройка позволяет ограничить количество баров при работе скрипта в реальном времени для исключения избыточных расчетов.
Показывать соединители
Включает/отключает отображение линий, соединяющих блоки в режиме Лаборатории.
Внимание! Выбранные Вами настройки таких свойств как "Цвет фона", "Настройки шрифта", "Цвет сетки", "Цвет шрифта", "Фон линеек", "Цвет шрифта на линейках" могут быть возвращены к дефолтным с помощью кнопки "Выбрать настройки по умолчанию", находящейся справа от выпадающего меню данного свойства. Применение пользовательских настроек отображается с помощью красного индикатора на кнопке "Выбрать настройки по умолчанию".
Размер бара
Параметр задает ширину бара в пикселях на графике.
Отступ
Отступ правого края графика от шкалы в пикселях.
Скрывать шкалы
Включает или отключает отображение шкал на графике.
Прозрачность легенды, %
Прозрачность легенды в %.
Временная шкала
Выбор типа временной шаклы:
Простая. Каждая ячейка сетки заполняется равным количеством свечей, на временной шкале отображается время, соответствующее последней свече ячейки;
Адаптивная. Размер ячейки сетки подстраивается под фактическое количество свечей выбранной единицы измерения времени. Использование адаптивной временной шкалы возможно, если в качестве Интервального периода используются Дни, Минуты или Секунды. в случае использования Объема или Шага цены применяется простая временная шкала.
Группирует сделки на графике при помощи вспомогательных линий
Цвет шрифта легенды
Выбор цвета шрифта легенды.
Цвет фона
Цвет фона.
Цвет шрифта
Цвет шрифта.
Цвет сетки
Цвет сетки.
Фон линеек
Фон линеек.
Цвет шрифта на линейках
Цвет шрифта на линейках.
Поставщик
Выбор поставщика данных.
Тип инструмента
Выбор типа/типов инструмента.
Рынок
Выбор рынка.
Список инструментов
Список доступных для выбора бумаг. Вы можете выполнить поиск необходимой бумаге в Строке поиска. Рядом со строкой поиска есть выпадающее меню, позволяющее выбрать Точное или Неточное соответствие вводимого запроса названию искомой бумаги.
Дополнительные параметры
Не показывать страйки
Исключает страйки из списка инструментов.
Не показывать истекшие
Исключает истекшие из списка инструментов.
Экспирация
Выбор типа экспирации:
после;
до;
точно.
Выбор даты экспирации
Осуществление выбора даты экспирации
Кнопка "+ Добавить инструмент" позволяет добавить ещё один источник данных в агенте. Один из вариантов использования кнопки:
Если ваш поставщик ограничивает объем загружаемых данных, например несколькими месяцами, вы можете скачать тики за больший период времени в виде текстового файла и добавить эти данные в виде второго источника.
Данная вкладка показывает перечень параметров блоков, примененных в скрипте.
Включить автосохранение
Включает режим автоматического сохранения скрипта с заданным интервалом времени
Интервал автосохранения
Интервал автоматического сохранения скрипт в минутах
Макс. время работы
Максимальное время работы скрипта в секундах.
Минимальное значение - 5 сек.
Максимальное значение - 3600 сек. (1 час)
0 - использовать глобальную настройку
По истечении указанного времени текущий расчет будет остановлен.
Настройки шрифта
Тип и размер шрифта для всех объектов в скрипте (блоки, график, таблицы, вкладки)
Цвет выдел. соединителя
Выбор цвета активного соединителя.
Настройки шрифта (график)
Тип и размер шрифта на графике
Количество строк в журнале сообщений
Выбор количества строк в "Журнале сообщений".
Настройки вкладки Режим агента соответствуют Торговым настройкам агента:
Отключает создание позиций по сделкам, т.е. входы и выходы. В скрипте используется ручное управление позициями через API. Подробнее в статье
Срыть/отобразить номер блока в редакторе. При включении опции у каждого блока в скрипте в нижнем правом углу появляется порядковый номер, соответствующий очередности добавления блока в скрипт. Обратите внимание! Последовательность добавления блоков в редакторе может повлиять на очередность исполнения операций в скрипте. Подробнее в статье:
"Интервал (для событий)" Предназначен для работы с событиями. Не отличается от пересчета Интервал в целом, но сильно отличается работой на текущем баре. Прочитайте статью: