Секреты TSLab | Торговые роботы | События
21 Июл

Cкрипты TSLab. Покупать или нет?

В очередной раз я решил разобрать реальный случай, а не сферическую в вакууме задачу. В процессе чтения вам, вероятно, придется включить мозг, либо переходите в конец статьи где будет все разложено по полочкам.  Итак, покупать или нет скрипты TSLab? Стоит ли влазить в эту кашу и чем это чревато? Обо всем этом (в виде моего личного мнения), на примере одного скрипта, читаем ниже :).

Странный. Очень странный тикет.

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

- Эге! – сказал я себе – Да тут есть картинки и даже скрипт на TSLab API приложен. Надо поглазеть на это все.

В процессе изучения картинок и самого скрипта решение проблемы не возникло в голове. Одно мне сразу бросилось в глаза – скрипт был написан качественно и опытной рукой. Суть проблемы стала окончательно ясна через некоторое время – у человека расхождения между реальной торговлей и торговлей в лаборатории. Скрипт работал в режиме “Интервал”

- Да в последнее время у каждого второго скрипты TSLab с такой проблемой. Вон, недавно такой же случай был. Сейчас я ее заборю одним мизинцем. Наверняка очередная типичная бага c EMA в коде скрипта.

Но, в то же время, не отпускало ощущение что скрипт написан профессионалом и искать баги в нем весьма неразумно. На самом деле, редко когда видишь такой “правильный” код в тикетах. Ковыряние логов ничего внятного не дало. Позиции закрывались по Stop сигналу, но закрывались рыночным  приказом, хотя в коде не было рыночных приказов для Stop сигнала. Так же, не было обнаружено  присутствие каких либо индикаторов с EMA.

Я долго смотрел на картинку работы скрипта из лаборатории и где-то глубоко-глубоко какая-то часть меня возмущенно кричала:

- Да тут что-то не так! Это неправильная картинка! Она должна быть другой! Да полюбому баги в коде скрипта.

Cкрипты TSLab. Покупать или нет?

Рисунок 1. Так скрипт работал в лаборатории.

Подавив внутренний протест, я решил что все нормально с картинкой и скриптом, а проблема в сверхъестественных силах с которыми мне бороться бесполезно. В конце концов, нельзя же все скрипты TSLab обвинять в забагованности.

- Так можно и разрыв мозга получить и поломать глаза о буквы! Сплошной полтергейст.

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

Эврика!

- А давай мы тикет скинем на других? Сколько можно ковырять его, так можно и устать!

И отправился тикет назад к тому, кто мне его перевел (да, бывает тикеты возвращаются назад), но с пометкой о шаманстве и прочих сверхъестественных чудесах. И вдруг:

- Эврика!

В тот момент, когда тикет плавно перетекал из моей юрисдикции к другому специалисту, я краем глаза заметил БАГ в коде скрипта. Вот она сила сатори (по нашему – озарение)! Быстро проанализировав код еще раз, и затребовав тикет назад, я сел писать тестовый скрипт для воспроизведения проблемы.

using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;

namespace test
{
    public class WrongStops : IExternalScript
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            var smaPeriod = 12;
            var sma = ctx.GetData("SMA", new[] {smaPeriod.ToString()}, () => Series.SMA(sec.ClosePrices, smaPeriod));

            for (var i = smaPeriod; i < ctx.BarsCount; i++)
            {
                var le = sec.Positions.GetLastActiveForSignal("LE", i);
                if (le == null)
                {
                    if (sma[i-1] < sec.ClosePrices[i-1] && sma[i] > sec.ClosePrices[i])
                        sec.Positions.BuyAtMarket(i+1, 1, "LE");
                }
                else
                {
                    var stop = le.EntryPrice*0.995;
                    le.CloseAtStop(i, stop, "LXS");

                    var take = le.EntryPrice * 1.01;
                    le.CloseAtProfit(i, take, "LXP");
                }
            }
        }
    }
}

- Бывает же такое. В таком крутом коде такой глупый баг. И даже не баг, а непонимание принципов работы TSLab. Вот тебе и “опытной рукой”.

Cкрипты TSLab. Покупать или нет?

 Рисунок 2. Так тестовый скрипт выглядит в режиме агента.

 – Вот собственно картинка вполне себе нормальная. Стопы есть, профит есть. Что еще надо? А где же заявки стоп/тейк? Угадай с трех раз :).

Cкрипты TSLab. Покупать или нет?

Рисунок 3. Окно заявок, в котором нет заявки на тейк и стоп.

В окне “Свои заявки” я не наблюдал заявок для тейка и стопа, хотя на графике стоп с тейком рисуются как ни в чем не бывало.

- Может у окна настроен фильтр и сделка не показывается? Давай проверим.

Нет, никаких фильтров у окна не было. Стоп просто не выставлялся в реале. Он только рисовался на графике и все. Если подождать немного дальше, то увидим что стоп почему-то не срабатывал в  момент ухода цены вниз. Но я получал сообщение о пропущенном входе.

Cкрипты TSLab. Покупать или нет?

Рисунок 4. Стоп вроде есть, но его как бы нет.

- Ну вроде бы разобрались с багом в скрипте. Неверно ставятся стопы и тейки. Но почему позиция закрывается по рынку там, где она должна закрываться по стопу? Опять непонятки какие-то.

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

- Ну конечно! Раз включено автозакрытие, и мы в момент, когда стоп должен был сработать, получаем сообщение о пропущенном входе, тогда автозакрытие и сработает. Оно ведь для этого и предназначено. Какой я проницательный.

Остается нам включить в тестовом скрипте автозакрытие и смотреть что получится.

Cкрипты TSLab. Покупать или нет?

Рисунок 5. Вот так работает автозакрытие.

В опцию автозакрытия я поставил большую цифру, так как от точки, где стоп должен был сработать, до текущего момента прошло уже много баров. В итоге, видим закрытие позиции по рынку, при этом сигнал у нас “LXP”. А этот сигнал у нас только для закрытия по стопу. Проблема воспроизведена :). Можно спать спокойно.

- Погоди погоди… рановато радоваться. А как быть с тем, что на первом рисунке мы не видим чтобы стоп должен был сработать? А он в этом промежутке сработал в агенте и сработал по рынку в то время как в лаборатории все гладко и сработал тейк. Что ты на это скажешь?

А вот сие, неведомо. И в чем причина понять так и не удалось. 99% вероятность того что  скрипт ошибочно рассчитал стопы в какой то момент и начал закрывать позицию. Об этом и было написано пользователю, баг в скрипте был поправлен и все жили долго и счастливо.

Мое скромное мнение на тему “Стоит ли покупать скрипты TSLab?”.

  • Хороший программист может не суметь написать хороший скрипт под TSLab.
  • Даже крутой программист может не понимать принципов работы TSLab.
  • Покупной, хороший внешне скрипт может содержать глупейшие баги.
  • Специалист по одной торговой платформе, будет совершенным новичком в другой торговой платформе и не напишет ничего толкового без длительной практики.
  • Если вы не умеете проверить работу скрипта, не стоит его покупать. Вы можете купить кота в мешке, который выпрыгнет и с голодухи откусит кусок вашего депозита :), а вы будете смотреть на это все и не успеете ничего сделать.

Поэтому, покупайте скрипты ТОЛЬКО у проверенных людей. Покупайте их у специалистов TSLab, которые доказали свою компетенцию. В случае проблем вы должны иметь возможность получать доработку скриптов и исправление багов. Опять же, баги вылавливать должен продавец а не вы. Но это в идеале конечно :). Ну, и не ждите граалей за 10 000 рублей. Даже купленный за 300 000 рублей скрипт может перестать работать через пол года или год. Таков рынок и так показала практика. Лучше несколько скриптов средних чем крутой один.  И никакие наикрутейшие скрипты TSLab не заменят вам вашу голову, поэтому вкладывайте деньги первым делом в нее, а потом уже во все остальное.

Раскрытие информации.

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

Итак, решение:

  • Проблема была в том, что стоп и тейк выставлялись на текущем баре (на баре i), а не на i+1 баре. Это приводило к тому, что стоп ставился на уже закрытый бар и естественно такой стоп не выходил на рынок в виде заявки. Только сигналы поставленные на будущую свечку или еще не закрытую свечку выводятся в рынок. Остальные сигналы просто отражаются на графике в виде виртуальных сигналов и позиций.
  • Так как стоп ставился в прошлое, то  в момент времени когда цена касалась цены стопа, мы получали пропущенный выход. В результате включенной опции автозакрытия, мы получали исполнение приказа стопа по рынку, а не условной заявкой.
  • Условная стоп/тейк зявка поставленная на прошлые бары будет отражаться в виде коричневой или зеленой линии на графике, что мы и видели.
  • Главная зацепка, которую можно увидеть с первого же графика, заключается в том, что стоп и тейк стоят на том же баре где и сигнал. В режиме “Интервал” работы скрипта такого быть не может.

PS: если остались вопросы, пишите в комментарии к статье, я отвечу :).


comments powered by HyperComments

Сергей
2014-08-25 12:27:28
Получил наслаждение от прочитанной статьи. Как детектив прочитал. Кроме того, и полезно и понятно. Спасибо!
ra81
2014-08-27 11:04:55
спасибо :). нудная сухая статья будет менее полезна чем задорная и интересная.
Павел Дуков
2015-12-02 10:46:15
спасибо
Alex Golubev
2016-12-09 21:42:01
Спасибо за информацию и тем что поделились своим опытом !
Иван
2017-01-01 03:33:39
Казино Вулкан раздают деньги сегодня http://cenforce100.ru/casino-vulkan.php
6
Ноя
2017

Доверительное управление. Результаты в октябре 2017 года.

Доверительное управление. Результаты в октябре 2017 года. В октябре продолжался боковик на всех торгуемых активах. Российский… »

7
Окт
2017

Доверительное управление. Результаты в сентябре 2017 года.

Доверительное управление. Результаты в сентябре 2017 года. В сентябре на основных торгуемых активах (Ri и… »

8
Сен
2017

Доверительное управление. Результаты в августе 2017 года.

Доверительное управление. Результаты в августе 2017 года. Стратегия “Опционы” принесла в августе прибыль в размере… »

6
Авг
2017

Доверительное управление. Результаты в июле 2017 года.

Доверительное управление. Результаты в июле 2017 года. В июле индекс РТС вновь колебался в достаточно узком… »

14
Июл
2017

Доверительное управление. Результаты в июне 2017 года.

Доверительное управление. Результаты в июне 2017 года. Июнь индекс РТС вновь провел преимущественно в боковых движениях, а… »