Запуск и настройка агента

Загрузка истории в агент

При первом запуске агент берет ту историю, которая уже накоплена в кешевых данных. Ограничение "ДатаОт" в свойствах скрипта распространяется на агент

В программе установить ограничение "ДатаОт" можно только в настройках скрипта. У нас в планах сделать эту дату доступной в настройках агента.

Специальная загрузка истории в агент не требуется. Однако, бывают ситуации, когда новый инструмент загружен на график (Вид-График) но в агенте история не появилась. Просто перезапустите агент (стоп/старт) в окне Агенты.

Быстрый вызов нужного инструмента, с нужным для агента таймфреймом: Агенты | кнопка График, откроется график инструмента.

При создании агента, а так же по кнопке быстрого доступа в виде списка, открывается окно настроек агента. В данном окне выбирается инструмент. Там же при помощи кнопки "+ Добавить инструмент" можно подгрузить дополнительный инструмент, в котором есть глубокая история, например, свой инструмент из поставщика кешевых данных или поставщика текстовых данных:

Работа с двух машин одном счете

Не рекомендуется осуществлять торговлю с двух компьютеров на одном счете.

Когда выставляется заявка, программа генерирует номер, передаваемый брокеру. Брокер возвращает этот номер вместе с номером заявки.

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

Два субсчета в одном агенте, один инструмент

Два источника. В обоих один и тот же инструмент. Два субсчета. Вы хотите, чтобы агент выставлял заявки по одному инструменту с двух разных субсчетов. Такая конфигурация не поддерживается.

Все заявки в данном случае будут выставляться на один субсчет (по первому источнику), а не на два.

Если у Вас ДВА СУБСЧЕТА, то работа на них ОДНИМ и тем же ИНСТРУМЕНТОМ должна осуществляться из разных агентов.

public class testBalance : IExternalScriptMultiSec
{
    public void Execute(IContext ctx, ISecurity[] securities)
    {
        var secRt0 = securities[0] as ISecurityRt;
        var secRt1 = securities[1] as ISecurityRt;
        ctx.Log(secRt0.EstimatedBalance.ToString());
        ctx.Log(secRt1.EstimatedBalance.ToString());
    }
}

Если агенту на основании этого скрипта указать два одинаковых инструмента, но с разных субсчетов, то он выведет в лог одинаковое значение баланса. Если инструменты будут разные, то баланс по счету покажет верный. То же самое с PortfolioName

Лучше один скрипт или несколько ?

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

Возможны варианты:

  1. Сделать 50 агентов и в каждом агенте отдельная акция/фьючерс.

  2. Сделать агента(скрипт) в котором будет, например, 5 источников (т.е. 5 акций). Агент будет их отслеживать, и для каждого источника свой алгоритм. Таких агентов будет 10, чтобы в сумме следить за 50 акциями

  3. Сделать один агент, в котором будут торговаться все эти инструменты.

Все три варианта имеют право на жизнь.

Вариант №1.

При данном варианте нагрузка сильно ляжет на процессор. Возможно, что утром нужно будет запускать группы агентов вручную, по очереди. Так как мы еще не создали поддержку постепенного включения агентов. Если 50 агентов запустить одновременно, как это сейчас программа делает, то каким-то агентам может не хватить процессорных потоков. Была такая рекомендация, что для одного агента необходимо иметь одно свободное ядро (на самом деле, это утрировано, сейчас почти все процессоры имеют многопоточность(и гипертрейдинг). Рекомендация в документации дана как раз на такой случай, (одновременный запуск десятка и более агентов). Но программа TSLab полностью поддерживает многопоточность и многозадачность. Чем больше потоков у процессора, тем лучше.

Вариант №2,3.

Если рассматривать данный вариант при ограниченных ресурсах, то он более предпочтителен, но у данного варианта есть своя особенность.

Особенность заключается в построении дополнительных баров (фейковые бары) на неликвидных инструментах. Т.е. если в скрипте, например, есть ликвидный инструмент, у которого не бывает пропусков минутных баров и какой-нибудь малоликвидный инструмент, торгующийся раз в день, то программа заполнит на неликвидном инструменте все недостающие минутки фейковыми барами. По этой причине индикаторы могут работать не так, как если бы они работали в скрипте с одним неликвидным инструментом. С точки зрения оперативной памяти, при одинаковой настройке в свойствах МаксБаров и/или МаксДней и/или ДатаОт, оперативная память будет потреблена одинаково.

Порядок исполнения агентов

Каждый агент в своем потоке (ядра процессора имеют потоки).

Порядок пересчета не регламентирован, если ядер много - исполнение идет параллельно.

Проблемы при исполнении сигналов

Агент совершает много не запланированных сделок, очень много пересчетов

Скорее всего, в свойствах скрипта выбран пересчет Сделка или Покупка/Продажа. Агент торгует на не закрытом баре.

В свойствах скрипта необходимо поставить другой Интервал пересчета.

В большинстве случаев желательно использовать Интервал или Интервал+перв.сделка

  • Интервал - пересчет происходит по закрытию бара. Когда пришла пачка тиков, в которой есть тик со временем закрытия бара.

  • Интервал+перв.сделка - пересчет по открытию бара. Где "Сделка" это открытие бара. Когда пришла пачка тиков, в которой есть тик со временем начала текущего бара.

Позиция появляется и исчезает на одном баре

Прочтите статью: Виртуальная позиция Возможные варианты:

  1. В настройках скрипта выбран интервал пересчета - "Сделка", по этому работа идет на не закрытой свече. Соответственно, виртуальная позиция появляется и исчезает. Выберите интервал пересчета "Интервал". При этом необходимо помнить, что тики биржа присылает пачками, размер пачек зависит от времени и инструмента. Например: Фьючерс РТС от 1 тика на вечерке, до 2000 при открытии торгов и выходе новостей.

  2. Не стоят флаги автоматической торговли (Автооткрытие / Автозакрытие) в торговых настройках агента (Главное меню - Торговля - Агенты - значок шестеренки на выбранном агенте). Если флаги стоят, но скрипт все равно не торгует. В окне Менеджер команд появляются команды с отключенным флагом разрешено, то скорее всего скрипт пытается выставить команды "задним числом". Иными словами, команды появляются для прошедших баров, хотя в предыдущем расчете (когда этот бар был последний) команды не было. Ниже приведены случаи, которые уже встречались:

    • Используются неверно сделанные индикаторы, которые меняют свои значения в истории при появлении новых данных.

    • При использовании API функции открытия/закрытия позиции вызываются для i-го бара, а не i+1 (заглядывание в будущее)

    • Использование метода декомпресии 2.

    • При использовании API функции неправильно прописан торговый цикл (не идет расчет для последнего бара). Например, "i < barsCount-1".

Проверка на заглядывание в будущее

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

Если вход на этой свече исчез (она будет последней на графике), значит со скриптом(или индикаторами) что-то не так.

Желательно делать такую проверку до начала торгов.

Опасные индикаторы: ZigZag, Фрактал, тренд рисующие индикаторы, не имеющие историю изменения. И другие индикаторы, при создании которых были допущены ошибки.

Last updated