Функционирование TSLab и оптимальная реализация

Автор: Sergey Pavlov

Функционирование TSLab и оптимальная реализация - Wed Nov 09 2016 12:54 PM

Предпослыки тут.

Попробуем начать с пары вопросов.

1. ТСЛАБ2 запущен в боевом режиме уже чуть больше недели на VPS Финам.
Каждый день я его закрываю и запускаю снова (вне торгового времени московской биржи).
Торговля ведется только на MOEX.
С каждым из этих дней я добавлял по одному агенту.
Всего сейчас работает 16 агентов.
В день, когда агентов стало 15, появилась ошибка "Fatal Error" (см. скриншот).
Например, сейчас процесс TSLab это 1458 дескрипторов и 40 потоков.
Я примерно понимаю, из-за чего возникла эта ошибка.
Понимаю, что дело не в тслабе.
Возможно ли настройками тслаба (не ухудшая производительности) сделать так, чтобы такой ошибки больше не возникло?
Запущена 32-х битная версия тслаба.
По ресурсам запущенный тслаб использует около 250 МБ оперативки,
свободной оперативки еще около 600 МБ. Процессор не бывает загружен более, чем на 50% в течение нескольких секунд. В основном 5% загрузка.

2. Если у меня запущены 16 агентов, в каждом из которых неторгуемым источником (1-минутки) являются об.акции Сбербанка, то:
2.1. Программа 16 раз делает запрос gethistory (подключение через HFTransaq) или 1 раз?
2.2. Запрашиваются именно исторические минутки или делается подписка на тики и из них формируются минутки?
2.3. Как определяется, что текущий минутный бар завершен?
2.3.1. По тику, датированному новой минутой?
2.3.2. По новой исторической минуте, которой еще не было?
2.3.3. По локальному времени?
2.3.4. Делается ли синхронизация с временем торгового сервера брокера?
Автор: ViL

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 10 2016 11:11 AM

1. Означает, что очередь в потоке рисования windows забилась.
В данном случае - совет выключить отрисовку нескольких агентов. Т.е. пусть в темную работают, так как vps не справляется. Здесь нужно понимать еще, что рисованием программа занимается в последний момент, после того, как все агенты рассчитаны, собственно они работают кодом, а не отрисованным графиком.
2.1 Программа 2.0 использует один кеш. В 1.2 много запросов
2.2 От брокера Приходят "Сделки по инструментам" из них и строятся бары
2.3. В пачке с тиками приходит тик, время которого соответствует новому бару. Новый бар открывается.
2.3.1 Да
2.3.2 не очень понял вопроса, но видимо да, этой минуты еще нет, пришел тик, бар начал рисоваться
2.3.3 Вообще никак не используется в программе, если есть подключение к серверу брокера. Если нет подключения к брокеру, то да, используется локальное время, но только как просто отображение локального времени. Так как тиков нет, рисовать нечего.
2.3.4 Она не нужна. Время берется из тиков, из поля TIME
Но при этом установленный патч регионов и времени windows от 12 апреля 2016 года обязателен.

Работа с историческими данными:
http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=60522#Post60522
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 10 2016 12:23 PM

ViL, спасибо!

Правильно ли я понимаю, что, если в запущенном тслабе на VPS открыты всего 2 вкладки (менеджер подключений и управление агентами), то подобной фатальной ошибки не будет?

Следующая пара вопросов:

1. Какие отличия по производительности и т.д. между запущенной 32-х и 64-х разрядными версиями тслаба? Сейчас у меня работает 32-х (воспользовался ярлычком по умолчанию). Стоит ли мне всё перенести в 64-битную версию?

2. Сейчас в скриптах у меня стоит ограничение в 3000 макс. баров. Интервал пересчета - 1 минута. Торговать с - стоит 0. В логах после вычисления каждого агента указано "1843 баров" для каждого из 19 агентов (весь день). При этом реально каждому агенту для пересчета при новой минуте требуется кому-то около 500, кому-то 700, а кому-то около 1300 баров.
2.1. Каждую минуту в каждом агенте происходит пересчет 3000 баров?
2.2. Что значит число 1843, отображаемое в логах?
2.3. Как исполняются 19 запущенных агентов? В одном потоке последовательно или параллельно?
2.4. Есть ли приоритет в выполнении агентов? Можно ли его задать?
Автор: ViL

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 10 2016 03:11 PM

Вероятней всего да, если не будет что рисовать, то именно данной ошибки не будет.
1. Если брокер позволяет подключаться в 64 битном режиме, то там переносить ничего не нужно. Вы просто запускаете 64 битную версию и работаете, конфигурация загрузится та же. Если не используете сторонних индикаторов, написанных под 32 битный cpu то и ошибок никаких не будет
2.1 Да, все бары пересчитываются. Но у Вас не 3000 баров, а 1843 и видимо с каждым пересчетом прибавляется один бар. Либо возможно у Вас стоит ограничение МаксДней
2.2 Это то кол-во баров которое реально загружено в агенты
2.3 зависит от кол-ва ядер и поддержки процессором гипертрейдинга.
Очень грубо:
Если потоков у процессора 16 или больше, то все в параллель. Если меньше, то очередь.
2.4 Нет. Живая очередь. У кого пришел первый тик с новым баром, тот и прав.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 10 2016 05:01 PM

Да, вы правы. С каждым пересчетом прибавляется. Прошло около 2 часов и сейчас вместо числа 1843 уже число 1977. Макс дней стоит 0, ограничения от и до сняты. Только макс баров=3000. Торговать с нуля.

Тогда пара уточняющих вопросов по этому поводу:
1. Правильно ли я понимаю, что могу ускорить вычисления своих агентов, грубо говоря, в 1900 раз, если заставить тслаб пересчитывать только новые бары?
2. Чему равно число 1843, а теперь уже 1977? Т.е. не каков смысл этого числа, а как определяется кол-во баров, которое загружено в агенты и по которым каждый раз при новом баре ведется пересчет?
Автор: ViL

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 10 2016 05:15 PM

1. Нет, не верно. Пересчитываться будут все бары, которые загружены в агент. Вы можете поставить 1000 баров, если этого достаточно для расчета индикаторов. Тем самым уменьшите скорость расчета в пару раз.
2. Это кол-во загруженных в агент баров. Определяется наличием истории на сервере брокера и если этой истории нет, то накопленным кешем при работе агента.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 11 2016 07:19 AM

1. Всё-таки непонятно, как это работает.
Под конец дня баров стало снова 1844.
Открыв один из агентов (график), я вижу, что есть минутные свечки за 7 (с 14:00 по 18:39) и за 8,9,10 (с 10:00 по 18:39) ноября. Итого минутных баров не менее 500+600+600+600=2300 на конец вчерашнего дня, а в логах:
"10.11.2016 23:49:00 127 Агент 'bal_sht': Скрипт выполнен успешно за 26мс. (1844 баров, время 10.11.2016 18:39:00)"

2. Теперь по производительности. Если внутри метода Execute я тупо пропущу в цикле for все вычисления баров, номер которых менее source.Bars.Count-1, то, фактически, скорость пересчета агента при каждой новой минутной свече увеличится порядка в 1000 раз?

3. Еще одна "непонятка" с выставлением заявок. У меня во всех скриптах исполнение делается блоками открытия и закрытия позиции по рынку.
В торговых настройках агента я указыванию проскальзывание +3 шага цены и ставлю галочку "По рынку с фикс. ценой". В подсказке указано,
что в этом случае выставляется лимитная заявка по цене открытия бара с сигналом плюс-минус проскальзывание.
3.1. Что такое цена открытия бара?
3.2. Какой бар является баром с сигналом?
3.3. Пример. Вчера один из агентов в 18:28:03 (по квику) выставляет заявку на продажу SRZ6 по цене 15558.
3.3.1. Первый тик этой минуты как по акции, так и по фьючерсу датирован нулевой секундой. В целом с чем я сейчас бьюсь....чтобы тслаб ставил заявку в эту же нулевую секунду.
3.3.2. Но непонятно вот что. Тик закрытия 27 минуты равен 15561, а тик открытия равен 15564. Проверил аналогично по другим заявкам.
Тслаб ставит заявку по фикс цене, привязываясь не к цене открытия, а к цене закрытия завершенного бара, что не совсем желательно.
3.3.3. Какими манипуляциями (в будущем кол-во агентов у меня будет порядка 100) добиться того, чтобы тслаб ставил заявки в ту же секунду, что и первый тик? Сейчас задержки от 1 до 3 секунд. Также, каким образом заставить тслаб ставить эту лимитную заявку именно по открытию свечи плюс-минус проскальзывание, как указано в подсказке в торговых настройках?
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 11 2016 11:34 AM

2) в 1000 раз это вряд ли но ускориться можно.
33.3) он всегда ставит в ту же секунду. Тормоза и ваши задержки очевидно связаны с вдс который тормоз.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 11 2016 12:03 PM

Еще раз. На одной и той же VPS запущены два приложения (самописное и тслаб). Оба реализуют одну и ту же торговую логику. Оба работают через HFTransaq. Самописное не просто ставит заявку в первую секунду, а почти всегда делает open свечи по лучшему биду-аску. Тслаб выставляет заявку спустя 1-2-3 секунды (когда как). Либо Тслаб тормозит (вся эта возня с агентами, пересчеты одного и того же по многу раз), либо я как-то неоптимально реализовал алгоритм.
Автор: jhgjrht

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 11 2016 12:40 PM

Вы хотите чтобы Вас убедили в том что Вы и так знаете? smile
Да, на обе части Вашего вопроса. ТСЛаб не слишком эффективен на малых таймфреймах; реализацию алгоритма, почти наверняка, можно улучшить.
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 11 2016 03:23 PM

Originally Posted By: Sergey Pavlov
Еще раз. На одной и той же VPS запущены два приложения (самописное и тслаб). Оба реализуют одну и ту же торговую логику. Оба работают через HFTransaq. Самописное не просто ставит заявку в первую секунду, а почти всегда делает open свечи по лучшему биду-аску. Тслаб выставляет заявку спустя 1-2-3 секунды (когда как). Либо Тслаб тормозит (вся эта возня с агентами, пересчеты одного и того же по многу раз), либо я как-то неоптимально реализовал алгоритм.

да докажите всем что на вашем впс тслаб тормозит. тут все знают что есть куча впс где тслаб просто умирает. вы не хотите видимо читать это. и умирает он потому что такие впс. поставьте на железо и такого не будет.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 17 2016 01:41 PM

В принципе, Вам уже всё ответили.

Подчеркну пару моментов:
1. Если есть возможность запускать 64-бита -- обязательно запускайте в этом режиме.
2. Все Ваши агенты оживают одновременно на границе минутной свечи. Это очевидно создаёт узкое место. Поэтому чем больше ядер -- тем лучше.
3. Чтобы определить факт того, что начался новый бар ТСЛаб использует новый пришедший трейд. Если трейда нет 5 секунд -- то новый бар начнется на 5 секунд позже ожидаемого.
Возможно, от этого можно уйти поигравшись с настройками скрипта. Например, запускать пересчет не только по трейдам, но и по котировкам.


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

И ещё один вариант оптимизации можно получить, если все агенты используют один и тот же индикатор с одними и теми же параметрами. Тогда этот индикатор можно вычислять отдельно, а в самих торговых агентах использовать готовые значения.
Мы так считаем историческую волатильность для опционов.
Взаимодействие организуется через Глобальный Кеш.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 18 2016 06:56 AM

На общие вопросы я и сам в состоянии дать общие ответы.
На узкие вопросы о нюансах ответов, к сожалению, я не получил,
а таких узких вопросов у меня по тслабу еще 150 штук.
Видимо, придется методом тыка и догадок разбираться.

Кстати, о производительности.
Аналогичные скрипты (один в один без изменений) запустил в пером тслабе.
Итого запущено параллельно на одной и той же машине два тслаба:
1. 32-битный второй тслаб, который шлет заявки через HFTransaq через Finam
2. 32-битный первый тслаб, который шлет заявки через через обычный транзак через Whotrades

Первый тслаб ставит заявки на биржу быстрее второго в среднем на 1 секунду (разница по мкс),
не смотря на то, что второй тслаб это в 10 раз большая частота транзакций и т.д.

Мне это видится странным.
Буду всё оптимизировать и изучать функционирование тслаба, через месяц приму решение, продолжать ли им пользоваться.
Пока всё нравится в целом:)
Чисто пользовательски считаю, что тслаб - классная штука:)
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 18 2016 11:46 AM

Originally Posted By: Sergey Pavlov
Пока всё нравится в целом:)
Чисто пользовательски считаю, что тслаб - классная штука:)


Спасибо! Очень рад. Мне, кстати, тоже нравится.
Глюков бы чуть поменьше... grin crazy


Originally Posted By: Sergey Pavlov
На узкие вопросы о нюансах ответов, к сожалению, я не получил,
а таких узких вопросов у меня по тслабу еще 150 штук.
Видимо, придется методом тыка и догадок разбираться.


Мне показалось, что в предыдущих ответах коллеги Вам достаточно исчерпывающе ответили. Нет?
Давайте ещё один подход сделаем. Пуляйте сюда наболевшее помаленьку (в порядке критичности для Вас).



Originally Posted By: Sergey Pavlov

Кстати, о производительности.
Аналогичные скрипты (один в один без изменений) запустил в первом тслабе.
Итого запущено параллельно на одной и той же машине два тслаба:
1. 32-битный второй тслаб, который шлет заявки через HFTransaq через Finam
2. 32-битный первый тслаб, который шлет заявки через через обычный транзак через Whotrades

Первый тслаб ставит заявки на биржу быстрее второго в среднем на 1 секунду (разница по мкс),
не смотря на то, что второй тслаб это в 10 раз большая частота транзакций и т.д.

Мне это видится странным.


Малость запутался кто у вас кто... Может, скриншот запостите?..
Правильно понял Вас: "Версия 1.2 через WhoTrades сильно быстрее версии 2.0 через HFTTransaq"?


PS Если Вам так критична скорость, то, возможно, имеет смысл подумать о Плазе?..
Например, выставление заявок через обычный Транзак (не HFT) в среднем занимает 200-300 мс. В плохие дни -- 500 мс.
А через Плазу - не более 50 мс. В среднем около 20-25 мс.
(Это полный раунд-трип до получения подтверждения в ТСЛаб.)
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 18 2016 12:31 PM

Да, верно: Версия 1.2 через WhoTrades сильно быстрее версии 2.0 через HFTTransaq.
Мне всё критично, поскольку суммы немаленькие.
На скриншоте видно, что заявки через первый тслаб ставятся порядка на 1 секунду быстрее, чем через второй.
Работает один и тот же скрипт.

Например, сейчас меня беспокоит то, что я не понимаю, как работает тслаб.
Раньше поведение у второго наблюдалось такое: выставлена лимитка, которая живет 5 минут. Через 5 минут исполняется по рынку (проработало на сотнях сделок). Последние несколько дней поведение изменилось (я не менял скрипт и торговые настройки): ставится лимитка...через 5 минут она снимается и перевыставляется лимиткой в то же место, т.е., грубо говоря, теряет место в очереди:).

Еще из наболевших непоняток.
Вчера в первом тслабе "слетела" часть агентов и перестала сопровождать позицию.
Суть проблемки: в скрипте есть два истоника: один акции Сбера, второй - фьючерс на него.
Торги ведутся только по фьючерсу в этих скриптах.
Запустил всего 17 агентов. У каждого агента в левой колонке тикером значится SRZ6... всё работает.. проходит несколько часов.
Заглядываю в тслаб... в случайном порядке у 8 агентов в первой колонке значится SBER и в колонке позиция стоит 0. Сделки не делаются.......
Магия.... Делаю так. Удаляю этих агентов и один в один с этими же именами заново из тех же скриптов запускаю эти 8 агентов.... По текущий момент прошло 2 часа, всё торгуется, так и осталось в левой колонке у всех SRZ6. При этом, когда я запустил их повторно, пересоздав, они вспомнили про свою позицию и продолжили её сопровождать, что приятно. Но неприятно...а вдруг эта "фигня" повторится еще раз?

Поэтому для меня важно понять, как работает ТСЛАБ. Как ведутся расчеты, почему заявки привязываются не к open, а к close и пр и пр.

Вопросы, которые остались пока без ответа:
1. Какие отличия по производительности и т.д. между запущенной 32-х и 64-х разрядными версиями тслаба?
2. По какой формуле определяется кол-во баров, по которым с каждым тактом делаются пересчеты?
3. Какой бар считается баром с сигналом?

Дополнительный вопросик:
Вот у меня есть 17 агентов, запрограммированных по одинаковой логике копипастой. Различия только в базовой статистике, по которой решения принимаются. 15 агентов каждую минуту пересчитываются по 1 разу. 2 агента почему-то каждую минуту по 2 раза пересчитываются. Зачем и с чем это может быть связано?
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Fri Nov 18 2016 04:34 PM

> "1. Какие отличия по производительности и т.д. между запущенной 32-х и 64-х разрядными версиями тслаба?"

По производительности разницы не должно быть.
Выигрыш в максимальном доступном объёме памяти.
Там, где 32-битная начнет испытывать траблы из-за памяти, 64-битная просто будет работать дальше.

Если так критично исполнение -- тогда в перспективе нужна Плаза всё равно.

Остальные вопросы передал коллегам. Надеюсь, присоединятся и всё расскажут грамотно.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 21 2016 10:02 AM

Originally Posted By: Sergey Pavlov
На скриншоте видно, что заявки через первый тслаб ставятся порядка на 1 секунду быстрее, чем через второй.
Работает один и тот же скрипт.


Вы могли бы подключить оба ТСЛаб к одному и тому же серверу?
То есть сравнить в чистом виде производительность ТСЛаб 1.2 с 2.0 когда оба подключены через WhoTrades и когда оба подключены через HFT Transaq?

Нам кажется естественным, что HFT Transaq должен вести себя быстрее или также по сравнению с WhoTrades.
Но если аналогичная разница в скорости на 1 секунду будет наблюдаться именно из-за разницы версий ТСЛаб, то это значит мы где-то потеряли кусочек производительности... По крайней мере, это будет пища для размышлений.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 21 2016 12:05 PM

Насколько я понимаю, это невозможно, поскольку
первый тслаб (whotrades) работает только через обычный финамовский transaq connector и только через него. Второй тслаб работает через высокоскоростной transaq connector, в котором в 10 раз выше скорость отправки транзакций...по этой идее всё должно быть оперативнее именно во втором тслабе.

Однако, вывод о том, что потеряна производительность именно во второй версии в сравнении с первой, делать нельзя, поскольку мне же, например, неизвестно, насколько загружены два этих разных сервера, с которыми идет коннект. Но как феномен я на это не могу не обратить внимание:)

Я буду в ближайшее время оптимизировать скрипты, чтобы в них всё обсчитывалось не более чем за 5 мс. Чтобы фактор расчетов фактически убрать из задержки выставления заявки. Сейчас в среднем каждый скрипт пересчитывается за 50 мс. Потом еще раз буду сравнивать.

Еще раз прикладываю сегодняшние расхождения.
Слева время выставления заявок через первый тслаб (обычный транзак Whotrades), справа - через второй тслаб (HFTransaq финама). Работают одни и те же скрипты. Задержка не в пользу второго тслаба от 1 до 1.5 секунд.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 21 2016 12:41 PM

Originally Posted By: Sergey Pavlov
Насколько я понимаю, это невозможно, поскольку
первый тслаб (whotrades) работает только через обычный финамовский transaq connector и только через него. Второй тслаб работает через высокоскоростной transaq connector, в котором в 10 раз выше скорость отправки транзакций...по этой идее всё должно быть оперативнее именно во втором тслабе.


Технически, вы можете создать второй коннектор внутри ТСЛаб 2.0 для WhoTrades и торговать их одновременно.
Возможно, даже ключ из 1.2 подойдет (не уверен на 100%).


Originally Posted By: Sergey Pavlov
Еще раз прикладываю сегодняшние расхождения.
Слева время выставления заявок через первый тслаб (обычный транзак Whotrades), справа - через второй тслаб (HFTransaq финама). Работают одни и те же скрипты. Задержка не в пользу второго тслаба от 1 до 1.5 секунд.


Чисто теоретически (как рабочая идея), эти два сервера могут быть не синхронизированы по времени?..
Наблюдать эти отличия (если они есть) можно наверное на графике баров в таймфрейме S1...

У меня даже где-то был скрипт, который этим сравнением занимается...
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 21 2016 01:06 PM

Originally Posted By: Option Wizard

Технически, вы можете создать второй коннектор внутри ТСЛаб 2.0 для WhoTrades и торговать их одновременно.
Возможно, даже ключ из 1.2 подойдет (не уверен на 100%).

Так я и хотел сделать изначально, но ключ к Whotrades, который я получил в ЛК при покупке позволил мне активировать подключение лишь в первом тслабе.

Originally Posted By: Option Wizard

Чисто теоретически (как рабочая идея), эти два сервера могут быть не синхронизированы по времени?..

Это может быть запросто, но выше писали, что тслаб никак не ориентируется на время сервера и локальное время, а использует лишь биржевое время, которое идет в поле TIME у тиков. Из опыта самописных программ, которые также работают с транзаком, могу сказать, что расхождение с серверным временем может быть до 13 секунд (бывало и такое!).
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 21 2016 03:56 PM

Originally Posted By: Sergey Pavlov
Так я и хотел сделать изначально, но ключ к Whotrades, который я получил в ЛК при покупке позволил мне активировать подключение лишь в первом тслабе.


Проверьте пожалуйста ещё раз?
Убедитесь, что при вставке логина и потом при вставке ключа по краям не влезает лишний пробел какой-нибудь?

Коллеги совершенно уверенно и однозначно утверждают, что ключ для WhoTrades один и тот же что в 1.2, что в 2.0.

Если это не так, обратитесь, пожалуйста, в нашу тех.поддержку с подробностями (через ЛК).
Файл tslab.log + скриншот настроек провайдера + скриншот окна со вставленным ключом и красной рамкой валидации.
Этого должно быть вполне достаточно, чтобы локализовать проблему и пристрелить её (если она есть)...
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 22 2016 08:09 AM

Коллеги оказались правы!
Попробовал - сейчас ключ подошел, а тогда (через минуту после покупки ключа) во втором тслабе не активировалась кнопка ОК при вводе ключа, а в первом тслабе сразу ключ принялся. Вот я и подумал, что коннектор к Хутрейдс только для первого тслаба работает.

Подскажите, как лучше запустить агентов? Параллельно сделать две установки второго тслаба? Это будет корректно работать? Или внутри одного тслаба продублировать скрипты, чтобы каждый скрипт через разные подключения торговал?
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 22 2016 10:14 AM

Originally Posted By: Sergey Pavlov
Подскажите, как лучше запустить агентов? Параллельно сделать две установки второго тслаба? Это будет корректно работать? Или внутри одного тслаба продублировать скрипты, чтобы каждый скрипт через разные подключения торговал?


Вы можете иметь на машине одновременно ТСЛаб 1.2 + 2.0.
Но нельзя на одной машине в одной учетной записи иметь два ТСЛаб 2.0.
Поэтому Вы запускаете агентов к двум подключениям из одного ТСЛаб 2.0.

Скрипты не нужно дублировать.
На одном скрипте у Вас может быть 100500 агентов.
(Грубо говоря, скрипт -- это класс (в терминах ООП). Агент -- экземпляр этого класса.)
Вы просто при создании агента указываете на каком инструменте он работает.
И как раз в этот момент выполняется привязывание к счету (фактически, к реальному провайдеру).

Единственное, рекомендовал бы Вам давать агентам разумные имена (там есть поле куда можно ручками вписать ласковое имя).
Например, у меня агенты опционные и зависят от серии и базового актива.
Поэтому они называются примерно в таком духе "rt-SRZ6-Dec" == "Real Trading -- Опционы на фьючерс SRZ6 -- Декабрьская серия".
У Вас они могут называться к примеру "wh-Name1-SRZ6", "ht-Name1-SRZ6".
При этом приставка будет сразу показывать через какой коннектор идет вывод заявок в рынок.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 22 2016 12:42 PM

Спасибо! Всё это буду пробовать в ближайшие дни.
А пока какая-то беда приключилась.
Заглядываю на сервер, а там первый тслаб работает, а второго нет.....он "упал".

Несколько цитат из логов:
Quote:
12:17:02.53[162]INFO :Скрипт выполнен успешно за 208мс. (1872 баров, время 22.11.2016 12:16:00)
12:17:02.60[10]DEBUG:RtUpdateWindowsEx: Name='exsort_sht' IsStarted=True IsStateChanging=False
12:17:02.60[10]INFO :127:Info:Script:(Script:exsort_sht):Агент 'exsort_sht': Скрипт выполнен успешно за 284мс. (1872 баров, время 22.11.2016 12:16:00)
12:17:02.60[10]INFO :Скрипт выполнен успешно за 284мс. (1872 баров, время 22.11.2016 12:16:00)
12:17:02.61[64]FATAL:UnhandledException:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TSLab.Controls.Log.LogItemCollection.<>c__DisplayClass12_0.<TryRemoveTail>b__0(LogViewItem t)
в System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
в System.Linq.Enumerable.<SkipIterator>d__30`1.MoveNext()
в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в TSLab.UI.ObservableList`1.RemoveRange(IEnumerable`1 items)
в TSLab.Controls.Log.LogItemCollection.TryRemoveTail(Boolean isLimitChanged)
в TSLab.Controls.Log.LogItemCollection.HandleDefferedRecords()
в TSLab.UI.DefferedObservableCollection`1.<.ctor>b__6_0(Object state)
в System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.TimerQueueTimer.CallCallback()
в System.Threading.TimerQueueTimer.Fire()
в System.Threading.TimerQueue.FireQueuedTimerCompletion(Object state)
в System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
в System.Threading.ThreadPoolWorkQueue.Dispatch()
в System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
12:17:02.72[1]DEBUG:OnAppExited
12:17:02.81[1]DEBUG:Deactivated
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 22 2016 01:58 PM

cry
Плохо.
Вообще по таким падениям надо сразу открывать тикет в наш саппорт через ЛК.

Конкретно в Вашем случае сразу могу сказать, что мы в эту итерацию исправляли несколько багов, связанных с LogItemCollection.

В ближайшее время (следующая неделя, наверное) ожидается выход новой версии.


ПС У нас можно настроить систему уведомлений, чтобы ТСЛаб периодически присылал письмо и сообщал, что он ещё жив.
В данном случае, конечно, было бы лучше иметь вочдог, который бы сообщал что приложение только что умерло...
И, возможно, рсазу запусказ заново?.. (Но это надо аккуратно использовать и имхо уже излишне)

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

Мне лично приглянулся на первый взгляд Kiwi application monitor и Application monitor

Если на одну машину поставить оба, они даже смогут присматривать друг за другом и таким образом в свою очередь гарантировать работоспособность системы мониторинга...

Потом ещё солнечно-ветряной генератор нужен + резервирование провайдера двумя способами...
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 22 2016 02:37 PM

Печально это....
С системой уведомлений подружиться не удалось.
Настроил во втором тслабе отправку сообщений на эл. почту.
Однако, наткнулся на пару странностей:
1. После этой настройки на почту не пришло ни одного сообщения
(нет отправленных с одного и нет входящих в другом ящике).
2. После этой настройки тслаб тупо перестал пересчитывать агенты.
В результате я уведомления по почте удалил и пересчет агентов возобновился. Попробую еще раз. Может, у меня руки кривые:)

С удовольствием написал бы об этом баге в техподдержку в ЛК, но в ЛК не увидел возможности это сделать.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 22 2016 03:31 PM

Originally Posted By: Sergey Pavlov
С удовольствием написал бы об этом баге в техподдержку в ЛК, но в ЛК не увидел возможности это сделать.


Извините, возможно, неправильно выразился.
http://support.tslab.ru/
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Wed Nov 23 2016 12:43 PM

Ситуация непонятная. Сегодня второй тслаб аналогично "упал" снова. По логам опять фатальная ошибка при обращении к несуществующему объекту при переборе каких-то коллекций через MoveNext.....

Хорошо, если это мои скрипты приводят к такому сбою...Хотя скрипты работают без изменений уже порядка месяца...Первые 3 недели без сбоев. А тут последние дни каждый день программа "падает".... Как же быть, если это - результат не моих скриптов?
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Wed Nov 23 2016 04:14 PM

Ещё раз мои соболезнования.
Новый билд дожаривается.
Если речь опять про LogItemCollection - надеюсь новая версия будет свободна от этой болячки.

Чтобы не гадать -- просто отправляйте в наш саппорт скриншот ситуации (если это фатал там обычно мессадж-бокс с подробностями появляется) +
файл tslab.log (в архиве, конечно).
Коллеги проанализируют.
Иногда, если проблему можно быстро исправить, мы делаем быстрый фикс и оперативно выдаём новую сборку лично для Вас.

PS Себе для мониторинга падений и автозапуска поставил Kiwi Application Monitor. Он забавный даже в бесплатной версии.
Сегодня добавлю "Jockersoft Application Monitor".
Сравню.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 24 2016 06:32 AM

Это становится чем-то похожим на спорт:)
Вчера второй тслаб "упал" три раза...каждый раз с одной и той же ошибкой:
Quote:
19:18:01.81[94]FATAL:UnhandledException:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TSLab.Controls.Log.LogItemCollection.<>c__DisplayClass12_0.<TryRemoveTail>b__0(LogViewItem t)
в System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
в System.Linq.Enumerable.<SkipIterator>d__30`1.MoveNext()
в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в TSLab.UI.ObservableList`1.RemoveRange(IEnumerable`1 items)
в TSLab.Controls.Log.LogItemCollection.TryRemoveTail(Boolean isLimitChanged)
в TSLab.Controls.Log.LogItemCollection.HandleDefferedRecords()
в TSLab.UI.DefferedObservableCollection`1.<.ctor>b__6_0(Object state)
в System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.TimerQueueTimer.CallCallback()
в System.Threading.TimerQueueTimer.Fire()
в System.Threading.TimerQueue.FireQueuedTimerCompletion(Object state)
в System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
в System.Threading.ThreadPoolWorkQueue.Dispatch()
в System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
19:18:01.83[160]FATAL:UnhandledException:
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в TSLab.Controls.Log.LogItemCollection.<>c__DisplayClass12_0.<TryRemoveTail>b__0(LogViewItem t)
в System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
в System.Linq.Enumerable.<SkipIterator>d__30`1.MoveNext()
в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в TSLab.UI.ObservableList`1.RemoveRange(IEnumerable`1 items)
в TSLab.Controls.Log.LogItemCollection.TryRemoveTail(Boolean isLimitChanged)
в TSLab.Controls.Log.LogItemCollection.HandleDefferedRecords()
в TSLab.UI.DefferedObservableCollection`1.<.ctor>b__6_0(Object state)
в System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.TimerQueueTimer.CallCallback()
в System.Threading.TimerQueueTimer.Fire()
в System.Threading.TimerQueue.FireQueuedTimerCompletion(Object state)
в System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
в System.Threading.ThreadPoolWorkQueue.Dispatch()
в System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()


Ежели это дело не прекратится...придется расставаться с тслабом:)
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 24 2016 10:02 AM

Originally Posted By: Sergey Pavlov
Это становится чем-то похожим на спорт:)
Вчера второй тслаб "упал" три раза...каждый раз с одной и той же ошибкой


Вы тикеты с этими исключениями в наш саппорт зарегистрировали?
Сообщите мне пожалуйста их номера в личку.

Поскольку в Вашей версии наблюдаются очевидная проблема, до выхода фикса Вам имеет смысл прекратить её использование (для целей серьёзной торговли).

Но без тикетов в саппорт-системе, мы, наверное, не сможем продвинуть вопрос предоставления Вам внеочередной исправленной версии...
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Thu Nov 24 2016 11:58 AM

Тикет регистрировал в саппорте.
Обещают через две недели исправить....мне кажется, это несерьезно.....
В личку вам номер отправил.
Вообще, есть ли возможность использовать предыдущую версию, в которой этого бага не было?
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Sun Nov 27 2016 11:06 AM

Вопрос.
Как во втором тслабе, комбинацией каких кубиков, функций из АПИ и торговых настроек, добиться следующего. Завершился бар, я хочу, чтобы была выставлена лимитная заявка по цене, привязанной либо к цене закрытия этого бара, либо к цене открытия нового бара плюс-минус заданную величину? Далее, если, спустя 3 минуты, эта заявка не была исполнена, она была бы перемещена на текущую цену?
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Sun Nov 27 2016 05:15 PM

Рабочий таймфрейм М1, правильно угадываю?
То есть Вы хотите продержать сигнал 3 бара и затем передвинуть его вслед за рынком?
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 28 2016 03:59 AM

Да. Грубо говоря, как реализовать механизм ухудшения цены неисполненной лимитной заявки?
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 28 2016 11:12 AM

в апи откажитесь от торгового цикла. просто торгуйте последним баром. Тогда не будет криков про пропущенные входы и заявка будет переставляться. Главное использовать изменение позиции чтобы если будет частичное исполнение продолжало доливать позу
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 28 2016 12:45 PM

Можете пояснить, что значит в апи отказаться от торгового цикла? Имеется в виду в методе Execute каждый раз делать пересчет только последнего бара?
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Mon Nov 28 2016 01:46 PM

вроде того. Не ставить сигналы на прошлых барах а только на последнем баре ставьте. пропуски будут только если вы в прошлое сигнал ставите а сделки там нет, тогда будет кричать. А если в прошлое не ставить то и кричать не будет ничего.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 29 2016 07:11 AM

Ясно. Подскажите, а почему есть разница в поведении первого и второго тслаба? Это так задумано или это ошибочка?
При одинаковых настройках первый тслаб после 5 минут, если лимитка (выставлять рыночные заявки лимитками) не была исполнена, то она переставляется по рынку. Во втором тслабе, спустя такие же 5 минут, если лимитка не исполнена, заявка перевыставляется, но на то же место, а не на новую цену и не по рынку.
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Tue Nov 29 2016 05:54 PM

сие не ведаю. если один и тот же код и такая же ситуация, то без понятия.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Sat Dec 03 2016 02:44 PM

Господа! Какие есть возможности ускорить срабатывание Execute? Суть проблемы в том, что тслаб ждет первого тика новой минуты....а этот тик может случиться и спустя 1-2-3 секунды от начала нового бара... Возможно ли сделать так, чтобы расчеты и заявки делались сразу как только реальный тайм-фрейм завершился, не дожидаясь нового тика?
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Sat Dec 03 2016 10:28 PM

попробуйте кубик метроном. Но я не уверен что он будет работать адекватно достаточно.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Sun Dec 04 2016 08:02 AM

Вообще, судя по описанию "Автоматический принудительный пересчет скрипта через заданный промежуток времени" это может быть то, что нужно... Но как этим правильно воспользоваться? Неужели при составлении документации авторы руководствовались принципом написания как можно меньшего кол-ва слов? Если да, то напрасно....

Итак, по этому метроному имеются следующие вопросы:
1. То, что он находится в группе опционов, означает ли что-то, учитывая, что я его буду использоваться в обычных линейных активах?
2. В каких единицах задается промежуток времени и как ведется отсчет этих единиц?
3. Что является базовой точкой отсчета, к которой прибавляется данная задержка, которая по умолчанию в параметрах=30000?

Я так понимаю, что методом тыка понять этот метроном на истории нереально, а тыкать в живых торгах без понимания как-то совсем не хочется...
Автор: jhgjrht

Re: Функционирование TSLab и оптимальная реализация - Sun Dec 04 2016 09:09 PM

Из визуального редактора непросто будет настроить время следующего срабатывания этого таймера (Метронома). Это время задается в миллисекундах задержки (до следующего срабатывания), и чтобы скрипт запустился в нужную (милли)секунду, потребуется вычислять разницу между текущим временем и временем начала следующего таймфрейма. Можно, но сложно.
Пересчет скрипта будет происходить не только по таймеру, но и по стандартным условиям (сделки, котировки). В первом случае новой свечки еще не будет. Придется учитывать кучу особенностей пересчетов. Также, потребуется часы на компьютере синхронизировать с мировым временем с достаточной точностью. На кой черт Вам эти сложности если у Вас свое самописное приложение есть?

1. Будет, почему нет.
2. В миллисекундах. Число определяет задержку до следующего срабатывания. Таймер реинициализируется каждый пересчет скрипта (метронома).
3. Текущее время. Метроном - это именно таймер: в какое время "кнопку" нажмете, такое время и будет точкой отсчета.

Все что делает этот метроном - это добавляет дополнительный пересчет скрипта. Но отлаживать работу такого скрипта в условиях реальных торгов - действительно нереально.
Повысить частоту пересчета скрипта можно и штатными средствами: добавить ликвидный (частые изменения стакана) инструмент и указать интервал пересчета в свойствах скрипта как "Пок/прод".
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Mon Dec 05 2016 06:34 AM

Прежде всего, спасибо!

На кой черт? Всё просто. Наше самописное приложение "обыгрывает" тслабовскую реализацию по всем параметрам кроме одного - гибкость. Чтобы мне запустить новую систему в нашем приложении, мне нужно кучу времени провести с программистом, чтобы всё проверить-перепроверить и т.д. В тслабе я новую систему запускаю теперь уже всего за полчаса. Поэтому хочется понять, возможно ли по требуемым характеристикам довести тслабовскую реализацию до нашей реализации? Тогда мы откажемся от собственного программирования. Если нет, то придется накручивать в своем приложении нечто типа тслаба, чтобы придать приложению гибкости.

Подскажите на счет последнего варианта.
Что значит добавить ликвидный инструмент?
Например, возьму я сишку и просто добавлю её в скрипт как дополнительный источник? Этот источник нужно будет с чем-то соединять в скрипте? Я не совсем понимаю, как увеличиться частота пересчета в инструменте, скажем, акции сбербанка, если я добавил сишку.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Mon Dec 05 2016 12:03 PM

Originally Posted By: Sergey Pavlov
Подскажите на счет последнего варианта.
Что значит добавить ликвидный инструмент?
Например, возьму я сишку и просто добавлю её в скрипт как дополнительный источник? Этот источник нужно будет с чем-то соединять в скрипте? Я не совсем понимаю, как увеличиться частота пересчета в инструменте, скажем, акции сбербанка, если я добавил сишку.


Ключевым предлагаемым изменением является смена типа исполнения агента.
См. картинку в аттаче.

Если я правильно понимаю, это означает что бар будет закрываться по изменению лучшего бида или аска, а это происходит намного чаще.

ПС Блок метроном создавался в помощь скрипту Static analysis.
Нужно было чтобы в неторговое время кто-то вызывал принудительные пересчеты скрипта.
Пока что никто не обращался с предложением/пожеланием/требованием довести его до ума,
чтобы он мог вызывать пересчет агента ровно на границе бара...

Дурацкий вопрос: это для Вас настолько критично?

ППС Да, синхронизацию времени по NTP на машине тоже недурно сделать...
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Mon Dec 05 2016 01:21 PM

Синхронизация сделана и все такие очевидные вещи сделаны.

Видимо, всё дело в том, чем кто торгует....если 1 контракт гонять, то можно на всё это и "забить"..

Сейчас у меня в тслабе получилось добиться проскальзывания примерно в 2.2 шага цены в среднем на 1 контракт при не маленькой позиции. Это на уровне 0.02% получается проскальзывание. Я хочу добиться среднего проскальзывания на 1 контракт не более 0.01%, поскольку каждые потерянные 0.01% это ощутимая сумма в абсолютном выражении, ну а на унылом рынке эти потери систематически усиливают просадку. Всё слишком очевидно:) Не могу представить, что это некритично для других трейдеров:)

Правильно ли я понимаю, что интервал пересчета пок-прод приведет к тому, что скрипт будет пересчитываться, грубо говоря, каждую секунду? Но мне это не нужно. Мне бы добиться того, чтобы он всё сделал не после первого тика новой минуты, а, в идеале, начал пересчет ближе к концу 59-й секунды завершающейся минуты. Что-то мне подсказывает, что метроном не обеспечит заданную периодичность и через сколько-то срабатываний начнет накапливаться какое-нибудь смещение.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Mon Dec 05 2016 01:36 PM

Originally Posted By: Sergey Pavlov
Что-то мне подсказывает, что метроном не обеспечит заданную периодичность и через сколько-то срабатываний начнет накапливаться какое-нибудь смещение.


Совершенно верно.
Как уже написал выше, он создавался для другого и эту задачу не решает.
Автор: jhgjrht

Re: Функционирование TSLab и оптимальная реализация - Mon Dec 05 2016 05:16 PM

Гибкость управления агентами - это да, это хорошо. Но вот контроль над их работой, над выставлением снятием/заявок, над пересчетом скриптов, над изменениями в программе, увы, мягко говоря, слабоват. Однажды, в связи с очередным обновлением, обнаружите, что отлаженный код (скрипт) перестал правильно работать и ... здравствуйте аврал и головняк. Разработчики даже детальный список изменений не публикуют, разбирайся потом, где-чего поменяли... Это может стать проблемой.
ТСлаб, сеть, сервер брокера, биржа - это системы массового обслуживания и именно тогда, когда на рынке большие изменения и нужно быстро реагировать, эти посредники, а также тюнинг ТСЛаба, проклинаются матом, поскольку работают совсем неадекватно. Но, се ля ви. В своем приложении, контроля немного больше.

Указав интервал пересчета скрипта пок/прод и добавив ликвидный инструмент, скрипт будет пересчитываться 5 раз в секунду, примерно (зависит от способа подключения к бирже). Если добавить два ликвидных инструмента, то пересчитываться, по идее, будет еще чаще. При этом, если интервал задан в 1 минуту, то 60*5 -1 = 299 раз в минуту скрипт выполнится с одним и тем же набором свечей. Это излишество, конечно, но если скрипт пересчитывается быстро, то это может оказаться приемлемо.

Option vizard разумно намекнул, что можно этот кубик (метроном) дополнить возможностью выполнить пересчет скрипта именно в нужный момент. Это не сложно, предложите ему.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 06:50 AM

Еще раз спасибо! Мне бы понять, как работает тслаб....Если честно...это кот в мешке...или черный ящик:) С одной стороны, всё понятно, потому что общие принципы едины. С другой стороны, в нюансах...столько всякой фигни....

Опуская лирику...

А он всё падает и падает....

Немного фактов. От первого тслаба я отказался. Перенес всех агентов во второй тслаб. Итого во втором тслабе параллельно торгуются одни и те же скрипты через два подключения: HFTransaq (Finam) и обычный transaq (Just2trade=Whotrades). Теперь они ставят заявки почти одинаково..иногда первый чуть быстрее, иногда второй - как повезет. Поскольку раньше всегда второй способ (через первый тслаб) во всех заявках на секунду опережал первый способ (через второй тслаб), можно сделать вывод, что первый тслаб в плане производительности работает лучше. Более того, за время их параллельной работы второй тслаб постоянно падал, а первый ни разу не упал.

Итак, вчера второй тслаб проработал первый день боевых торгов на версии 2.0.13.0. Упал три раза. Это УЖАСНО. Ибо это влечет жутко неприятную ситуацию. Он работает... набирает позицию...не маленькую...друзья... после чего...набрав позицию...через час он падает...разумеется, он ни хрена не сохранил и при новом запуске он считает, что все сигналы пропущены и творит громадную кучу сделок по ужасным ценам...сижу у терминала...ищу возможность хоть как-то по близким ценам эту удвоенную позицию сбросить... Такая фигня повторилась три раза вчера...

Первое падение тслаба закончилось в логах вот так:
Quote:
14:50:02.35[64]DEBUG:RtUpdateWindowsEx: Name='v3_J_exsort_lng_16' IsStarted=True IsStateChanging=False
14:50:02.35[64]INFO :127:Info:Script:(Script:v3_J_exsort_lng_16):Агент 'v3_J_exsort_lng_16': Скрипт выполнен успешно за 83мс. (1200 баров, время 05.12.2016 11:49:00)
14:50:02.35[64]INFO :Скрипт выполнен успешно за 83мс. (1200 баров, время 05.12.2016 11:49:00)
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:02.36[Transaq Parser]WARN :Remove 1 addtional bars for trade 23655475200732(12/05/2016 11:50:00) SBER.MM:MMA
14:50:08.23[Transaq Parser]INFO :Server time was updated down '12/05/2016 14:50:02' -> '12/05/2016 14:50:08'


Второе падение:
Quote:
17:25:06.55[155]DEBUG:RtUpdateWindowsEx: Name='v3_J_exsort_sht_16' IsStarted=True IsStateChanging=False
17:25:06.55[155]INFO :127:Info:Script:(Script:v3_J_exsort_sht_16):Агент 'v3_J_exsort_sht_16': Скрипт выполнен успешно за 15мс. (1200 баров, время 05.12.2016 14:24:00)
17:25:06.55[155]INFO :Скрипт выполнен успешно за 15мс. (1200 баров, время 05.12.2016 14:24:00)
17:25:06.59[81]FATAL:UnhandledException:
System.ArgumentException: Длина результирующего массива недостаточна. Проверьте значения destIndex и length, а также нижние границы массива.
в System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
в System.Collections.Generic.List`1.CopyTo(T[] array, Int32 arrayIndex)
в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в TSLab.UI.ObservableList`1.RemoveRange(IEnumerable`1 items)
в TSLab.Controls.Log.LogItemCollection.HandleDefferedRecords()
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.TimerQueueTimer.CallCallback()
в System.Threading.TimerQueueTimer.Fire()
в System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
в System.Threading.ThreadPoolWorkQueue.Dispatch()
17:25:06.62[152]DEBUG:RealtimePositionList 'v3_J_bol_sht_8':'RTSSRZ6' have 8 positions, 0 active, 8 initial count. Timestamp=12/05/2016 15:55:18 ForgateDate=01/01/0001 00:00:00
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in4'(281546676) at bar 249 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in9'(281546738) at bar 254 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in10'(281547157) at bar 255 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in11'(281546899) at bar 256 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in12'(281547330) at bar 257 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in13'(281546690) at bar 258 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in14'(281546924) at bar 259 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RealtimePositionList: Already have active position 'in0'(281546390) at bar 260 for RTSSRZ6:MCT
17:25:06.63[152]DEBUG:RtUpdateWindowsEx: Name='v3_J_bol_sht_8' IsStarted=True IsStateChanging=False


Третье падение:
Quote:
18:01:03.53[51]DEBUG:Added command approve='False' comment='Выход по рынку (нет сигнала!)'
18:01:03.54[51]DEBUG:RtUpdateWindowsEx: Name='v3_J_linreg_lng_39' IsStarted=True IsStateChanging=False
18:01:03.54[51]INFO :127:Info:Script:(Script:v3_J_linreg_lng_39):Агент 'v3_J_linreg_lng_39': Скрипт выполнен успешно за 603мс. (3000 баров, время 05.12.2016 15:00:00)
18:01:03.54[51]INFO :Скрипт выполнен успешно за 603мс. (3000 баров, время 05.12.2016 15:00:00)
18:01:03.59[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.59[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.59[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.60[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.60[149]DEBUG:RtUpdateWindowsEx: Name='v3_J_mami_sht_27' IsStarted=True IsStateChanging=False
18:01:03.60[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.60[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.60[149]INFO :127:Info:Script:(Script:v3_J_mami_sht_27):Агент 'v3_J_mami_sht_27': Скрипт выполнен успешно за 54мс. (1300 баров, время 05.12.2016 15:00:00)
18:01:03.60[Transaq Parser]WARN :Remove 1 addtional bars for trade 1660535852(12/05/2016 18:01:02) SRZ6:FORTS
18:01:03.60[149]INFO :Скрипт выполнен успешно за 54мс. (1300 баров, время 05.12.2016 15:00:00)
18:01:03.69[192]DEBUG:Position entry=281553857, Q=1, RQ=0 LotSize=1, Shares=1, Bar=649
18:01:03.69[192]DEBUG:Position entry=281554390, Q=1, RQ=0 LotSize=1, Shares=1, Bar=650
18:01:03.69[192]DEBUG:Position entry=281554642, Q=1, RQ=0 LotSize=1, Shares=1, Bar=651
18:01:03.69[192]DEBUG:Position entry=281554655, Q=1, RQ=0 LotSize=1, Shares=1, Bar=652
18:01:03.69[192]DEBUG:Position entry=281554006, Q=1, RQ=0 LotSize=1, Shares=1, Bar=653
18:01:03.69[192]DEBUG:Position entry=281554867, Q=1, RQ=0 LotSize=1, Shares=1, Bar=654
18:01:03.69[192]DEBUG:Position entry=281554703, Q=4, RQ=0 LotSize=1, Shares=4, Bar=655
18:01:03.69[192]DEBUG:Position entry=281554473, Q=1, RQ=0 LotSize=1, Shares=1, Bar=656
18:01:03.69[192]DEBUG:Position entry=281554437, Q=1, RQ=0 LotSize=1, Shares=1, Bar=657
18:01:03.69[192]DEBUG:Position entry=281554280, Q=1, RQ=0 LotSize=1, Shares=1, Bar=658
18:01:03.69[192]DEBUG:Position entry=281554696, Q=1, RQ=0 LotSize=1, Shares=1, Bar=659
18:01:03.69[192]DEBUG:Position entry=281555093, Q=1, RQ=0 LotSize=1, Shares=1, Bar=660
18:01:03.70[192]DEBUG:Position entry=281556356, Q=1, RQ=0 LotSize=1, Shares=1, Bar=691
18:01:03.70[192]DEBUG:Position entry=281556843, Q=1, RQ=0 LotSize=1, Shares=1, Bar=692
18:01:03.70[192]DEBUG:Position entry=281556751, Q=1, RQ=0 LotSize=1, Shares=1, Bar=693
18:01:03.70[192]DEBUG:RealtimePositionList 'v3_J_bal1_lng_15':'RTSSRZ6' have 15 positions, 15 active, 15 initial count. Timestamp=12/05/2016 17:36:05 ForgateDate=01/01/0001 00:00:00


Что у меня запущено в тслабе?
12 агентов по двум счетам, т.е. 24 агента на весь тслаб.
В сумме 12 агентов=270 позиций, т.е. всего 540 позиций на весь тслаб.
Всё это пересчитывается сейчас ровно один раз в минуту.

Тикет в техподдержку я отправил. Думаю, что мне пообещают через пару недель сделать новый релиз....
Однако, у меня уже начинает скапливаться осадочек от качества программного кода второго тслаба.....
Кажется, что он будет падать вечно:)

З.Ы. Может просто тслаб это софт для любителей? Максимум 5-6 агентов и не более 10-20 позиций в сумме?
Однако, на оф.сайте тслаба и при его покупке я не читал про такие ограничения.
Было бы неплохо услышать от авторов тслаба на что он рассчитан?
Автор: sar

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 12:26 PM

не совсем понимаю, проблема возникает сама собой?
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 12:31 PM

Да. Вчера он первый раз упал спустя почти пять часов работы. Сегодня при той же конфигурации и тех же скриптах без каких-либо изменений он упал спустя три минуты.
Автор: sar

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 12:39 PM

значит проблема острая, требуйте скорейшее решение данной проблемы. в течении недели должны выдать сборку с решением проблемы!
Автор: zateplansky

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 12:39 PM

Всем, привет!
После обновления (2.013/64) у всех пустые окна "Средние цены" "позиция" в закладке "профили позиции" или только у меня ...?
При этом "параметр позиции" работает, позу-график кажет.

ps работаю через плазу (vpn).
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 01:34 PM

Originally Posted By: sar
значит проблема острая, требуйте скорейшее решение данной проблемы. в течении недели должны выдать сборку с решением проблемы!


Сегодня вечером или ночью, если Святой Кодий будет к нам милостив...
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Tue Dec 06 2016 01:36 PM

Originally Posted By: zateplansky
После обновления (2.013/64) у всех пустые окна "Средние цены" "позиция" в закладке "профили позиции" или только у меня ...?
При этом "параметр позиции" работает, позу-график кажет.


У всех.
В деве уже исправили.
Сейчас остальные безобразия в стойло поставим -- и выкатим.
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Wed Dec 07 2016 10:17 PM

Originally Posted By: Sergey Pavlov
Да. Вчера он первый раз упал спустя почти пять часов работы. Сегодня при той же конфигурации и тех же скриптах без каких-либо изменений он упал спустя три минуты.


Сегодня выпустили 2.0.13.1 в том числе с исправлением фаталов из LogItemCollection.
Накатите её, пожалуйста.
Станет ли теперь в Вашей конфигурации нормально себя вести?
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Wed Dec 07 2016 10:23 PM

10 позиций в одном агенте на опционах элементарно получается.

У меня, правда, из-за нехватки времени больше 2 серий торговать одновременно не получается... Зато пересчеты идут 1 раз в 10 секунд и на каждом пересчете может выставлять по 10 лимитников на бай и на селл с перевыставлением каждые 10 секунд.

И вторая особенность в том, что при работе с опционами активно использую сайзинг.
То есть я не делаю 100500 отдельных позиций "Маша покупает, Петя продаёт, Саша поставил тейк-профит",
а делаю одну позицию на один тикер и просто меняю её текущий сайз.
Было +50, хочу сделать +70 -- просто доливаю в ту же позу ещё 20 лотов. Лимитником, понятно.
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Thu Dec 08 2016 04:21 AM

Честно говоря, надоел мне этот криво сделанный второй тслаб. Падение за падением. Плюс иногда он выгружается более 50 минут. Все это неприемлемо для реальной торговли большим сайзом.

Со вчерашнего дня я продолжаю эксперимент в первом тслабе. Итак, 540 раздельных позиций, 24 агента, раз в минуту пересчеты параллельно у двух все тех же брокеров . Отработало прекрасно. Программа не падает, всегда отзывчива - проверял весь день. И самое вкусное - он намного быстрее второго тслаба. Заявки ставятся в нулевую секунду наконец))) второй тслаб проигрывает первому при моей нагрузке чуть больше секунды.

Дальше будем посмотреть...
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Thu Dec 08 2016 10:22 AM

Прекрасно Вас понимаю.
Ну, что же... Если будет ещё один подход к штанге с целью удостовериться, что вылечились фаталы Вашего типа -- сообщайте.
Автор: zateplansky

Re: Функционирование TSLab и оптимальная реализация - Thu Dec 08 2016 02:48 PM

А где лежит 2.0.13.1 ?
Пустые окна -"Средние цены" исправили?
Автор: Option Wizard

Re: Функционирование TSLab и оптимальная реализация - Thu Dec 08 2016 05:33 PM

Originally Posted By: zateplansky
А где лежит 2.0.13.1 ?
Пустые окна -"Средние цены" исправили?


Исправили.
В программе Ctrl-Alt-Shift-U
и указать путь к архиву:
http://files.tslab.ru/files/special20/TSLab_20161206_2.0.13.1.zip
Автор: Sergey Pavlov

Re: Функционирование TSLab и оптимальная реализация - Wed Dec 14 2016 05:51 AM

Помогите! Ситуация. Работает в тслабе агент и держит позицию в декабрьском фьючерсе и всё никак её ни сдаст. Что произойдет, если я в настройках этого агента изменю торгуемый инструмент на мартовский фьючерс? Как после этого закроется (по сигналу) открытая позиция в дек фьюче? Она закроется? Или агент будет её закрывать уже в том фьюче, который будет указан в настройках?
Автор: sar

Re: Функционирование TSLab и оптимальная реализация - Wed Dec 14 2016 10:03 AM

если вы смените тикер, то история агента обнулится и открытой сделки он не увидит.
Автор: ra81

Re: Функционирование TSLab и оптимальная реализация - Thu Dec 15 2016 02:19 PM

Originally Posted By: Sergey Pavlov
Помогите! Ситуация. Работает в тслабе агент и держит позицию в декабрьском фьючерсе и всё никак её ни сдаст. Что произойдет, если я в настройках этого агента изменю торгуемый инструмент на мартовский фьючерс? Как после этого закроется (по сигналу) открытая позиция в дек фьюче? Она закроется? Или агент будет её закрывать уже в том фьюче, который будет указан в настройках?

Менеджер команд, оттуда закройте ее и сменив фьюч заново откройте. Как бы перескочите.