Как написать своего первого торгового робота? BotTabSimple (+ Видео)

Пошаговая инструкция

  1. Filip

    Регистрация:
    10.05.16
    Сообщения:
    28
    Был на сайте:
    20.08.17

    Библиотека OS.Engine построена таким образом, что бы можно разделить уровень входа для алготрейдеров и хардкорных программистов. Низкий порог входа достигается за счет разделения слоев внутренней архитектуры. Вместо двух лет(стокШарп, уровень архитектора) - у нас два месяца(как у WealthLab, уровень ниже Джуниора).


    Для того чтобы понять как создать своего первого торгового робота нужно:

    1. Просмотреть учебное видео в котором есть основные моменты для работы в слое создания роботов:

    исходники по данному видео вы найдете в библиотеке. название Robot


    2.Также есть еще один пример в нашем мануале 3.Manual Os.Engine (BotCreate) который также идет вместе с релизом, там мы пишем похожего бота под названием FirstBot.


    Пробежимся по основным моментам из мануала:

    1. Архитектура создания бота:

    Схема работы (логика работы, когда пользователь работает с терминалом):

    1. Из пользовательского интерфейса происходит сигнал о том, что пользователь хочет
    создать бота (панель).

    2. Хранилище ботов создаёт меню создания ботов.

    3. Меню, во время создания, запрашивает названия всех стратегий созданных в системе, у класса PanelCreator.

    4. Пользователь выбирает тип бота и жмёт "Создать", в это время мы обращаемся к классу PanelCreator и просим создать нам бота с таким названием.

    5. Робот отправляется в хранилище ботов и появляется у пользователя в интерфейсе.


    Перед написанием любого робота первым делом необходимо создать шаблон:

    1. Открываем библиотеку и идём сразу в Os.Trader/Panels/PanelCreator

    Всё остальное игнорируем, это нам не нужно. Это для программистов хардкорщиков и архитекторов платформы. PanelCreator - для
    создания ботов. Открываем файл.


    2. Создать публичный класс и назначить его наследником класса BotPanel.


    3.В созданном классе необходимо создать два метода GetNameStrategyType и ShowIndividualSettingsDialog :


    4. Затем нам надо найти класс PanelCreator, а в нем метод GetNamesStrategy и добавить в него информацию о своем классе. После добавления её сюда, библиотека сможет ссылаться на имя вашего робота:


    5. В этом же классе PanelCreator находим метод GetStrategyForName и добавляем механизм создания бота:


    6.Затем возвращаемся в наш созданный класс FirstBot и добавим в него конструктор, в дальнейшем мы сможем подписаться на событие завершения свечек или тиков, а также начнем собирать логику самого бота


    7. Теперь нам нужно создать вкладку для данного бота BotTabSimple


    ВСЕ! На данном моменте мы подготовили стандартный шаблон для написания практически любого робота. Дальше дело творческое.


    8. Теперь нам осталось подписаться на событие завершения свечек CandleFinishedEvent и создать метод TradeLogic для обработки логики:


    Теперь мы можем вписать торговую логику в наш метод TradeLogic. В этот метод мы уже передаем наши свечки (candles) инструмента, с которыми мы будем отрабатывать нашу логику.


    Вот простое техническое задание для нашего примера:
    1. если свечей меньше чем 5 - выходим из метода.
    2. если уже есть открытые позиции – закрываем и выходим.
    3. если позиций нет, то смотрим в какую сторону заходить. Если закрытие последней свечи выше закрытия предыдущей – покупаем.
    4. если закрытие последней свечи ниже закрытия предыдущей, продаем.


    Все, наш простой бот готов. Если мы его запустим он будет работать:



    На нашем форуме можно найти множество примеров и логических конструкций для написания различных алгоритмов. Главное побольше практиковаться и результаты не заставят ждать.


    Filip
    06.12.2016 15:11
    #1
  2. coder-ex

    Регистрация:
    29.10.15
    Сообщения:
    9
    Был на сайте:
    22.12.16

    Для тестирования роботов обязательно подключать коннектор или нет?

    coder-ex
    12.12.2016 01:10
    #2
  3. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: coder-ex
    Для тестирования роботов обязательно подключать коннектор или нет?

    Для тестирования используется специальный блок: Os.Tester. В нём встроенный эмулятор биржи. К нему подрубаются скаченные данные и происходит эмуляция торгов. http://o-s-a.net/forum/threads/63 здесь подробно про запуск тестера

    Алексей Ван
    12.12.2016 07:10
    #3
  4. coder-ex

    Регистрация:
    29.10.15
    Сообщения:
    9
    Был на сайте:
    22.12.16
    Цитата: Алексей Ван
    Для тестирования используется специальный блок: Os.Tester. В нём встроенный эмулятор биржи. К нему подрубаются скаченные данные и происходит эмуляция торгов. http://o-s-a.net/forum/threads/63 здесь подробно про запуск тестера

    спс, ознакомлюсь )) просто запустил проект из архива для пробы, при компиляции сразу вывалил кучу ошибок - ссылается на коннектор SmartCom И там еще много чего ))

    coder-ex
    12.12.2016 08:18
    #4
  5. coder-ex

    Регистрация:
    29.10.15
    Сообщения:
    9
    Был на сайте:
    22.12.16

    и еще, я чего то не могу найти описание классов в библиотеке, его нет?

    coder-ex
    12.12.2016 08:26
    #5
  6. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: coder-ex

    и еще, я чего то не могу найти описание классов в библиотеке, его нет?

    нет. Описание есть только для слоя создания роботов.
    Алексей Ван
    17.12.2016 12:27
    #6
  7. coder-ex

    Регистрация:
    29.10.15
    Сообщения:
    9
    Был на сайте:
    22.12.16
    Цитата: Алексей Ван
    нет. Описание есть только для слоя создания роботов.
    в таком виде эта разработка только для простых стратегий, т.к. не зная функционала классов, не все будут их изучать просматривая исходники
    coder-ex
    19.12.2016 14:58
    #7
  8. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: coder-ex
    Цитата: Алексей Ван
    нет. Описание есть только для слоя создания роботов.
    в таком виде эта разработка только для простых стратегий, т.к. не зная функционала классов, не все будут их изучать просматривая исходники

    я в этом слое только что закончил делать межбиржевую котировочную машину. Т.ч. это очень и очень спорно. Что же такого нельзя в нём делать.

    Никто пользователям больше не даёт чем в этом слое - ни ТсЛаб, ни Велс. А все попытки СтокШарп дать Вам набор классов закончились тем что 98% их абитуриентов даже на машках роботов так и не научились делать.

    С другой же стороны - я без всяких описаний и комментов в коде освоил СтокШарп за месяц. Т.е. мой опыт говорит вот о чём:

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

    2) Те кто знает ООП, многопоточность и прочее, они освоят Os.Engine за неделю.

    3) Поэтому бессмыссленно пытаться учить людей чему-то кроме слоя создания роботов, т.к. иначе, на самом деле их придётся учить быть хорошими программистами. А этим занимаются совсем в других местах...

    Но ещё раз повторюсь: я в этом слое только что закончил делать межбиржевую котировочную машину, А что касается Вашего скринера, который Вам нужен, он делается в этом слое в 500 - 700 строк. И то что Он у Вас не получается не говорит о том что "В таком виде только для простых стратегий"

    Алексей Ван
    22.12.2016 06:39
    #8
  9. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Подскажите пожалуйста! Пытаюсь написать своего первого робота в OS.Engine. Но, столкнулся с проблемой: не понятно, есть ли возможность совершать покупку по определённому инструменту, совершать многочисленные докупки по нему же и при этом вести каждую докупку как отдельную позицию, соответственно применяя именно к ней трейлнг-стоп. Просто, как мне показалось, в OSEngine так сделать нельзя, так как здесь есть понятие одной позиции и докупок к ней!?

    Поясните пожалуйста.

    DennisNN
    17.01.2017 15:16
    #9
  10. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: DennisNN

    Подскажите пожалуйста! Пытаюсь написать своего первого робота в OS.Engine. Но, столкнулся с проблемой: не понятно, есть ли возможность совершать покупку по определённому инструменту, совершать многочисленные докупки по нему же и при этом вести каждую докупку как отдельную позицию, соответственно применяя именно к ней трейлнг-стоп. Просто, как мне показалось, в OSEngine так сделать нельзя, так как здесь есть понятие одной позиции и докупок к ней!?

    Поясните пожалуйста.

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

    У методов открывающих позицию(BuyAtLimit и т.д.) есть перегрузки в которых можно передавать в создаваемую позицию тип сигнала. Далее у этой позиции всегда будет спецПометка в поле OpenSignalType. Так можно наоткрывать сколь угодно много позиций и поименовав их к каждой применять свой отдельный тип выхода.

    Алексей Ван
    17.01.2017 16:20
    #10
  11. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18
    Цитата: Алексей Ван
    Цитата: DennisNN

    Подскажите пожалуйста! Пытаюсь написать своего первого робота в OS.Engine. Но, столкнулся с проблемой: не понятно, есть ли возможность совершать покупку по определённому инструменту, совершать многочисленные докупки по нему же и при этом вести каждую докупку как отдельную позицию, соответственно применяя именно к ней трейлнг-стоп. Просто, как мне показалось, в OSEngine так сделать нельзя, так как здесь есть понятие одной позиции и докупок к ней!?

    Поясните пожалуйста.

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

    У методов открывающих позицию(BuyAtLimit и т.д.) есть перегрузки в которых можно передавать в создаваемую позицию тип сигнала. Далее у этой позиции всегда будет спецПометка в поле OpenSignalType. Так можно наоткрывать сколь угодно много позиций и поименовав их к каждой применять свой отдельный тип выхода.

    Спасибо за быстрый ответ! Буду разбираться

    DennisNN
    17.01.2017 16:35
    #11
  12. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Спасибо за быстрый ответ! Буду разбираться

    Да) Это всё волшебный апгрейд главной страницы форума. Теперь наконец-то видно кто где пишет) Магия.

    Алексей Ван
    17.01.2017 16:43
    #12
  13. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Вы вообще волшебники!

    Я разочаровался в TsLab, особенно после резкого повышения цен за не очень-то качественный и недоделанный продукт! Погрузился с головой в программирование изучая StockSharp... утонув в нем практически безрезультатно где-то на полгода)) И тут вдруг такой подарок под Новый год в виде OS.Engine!!!

    DennisNN
    17.01.2017 17:00
    #13
  14. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Доброго времени суток!

    В последней версии OS.Engine по крайней мере у меня не получается построить проект из-за того что компилятор не может найти отсутствующую библиотеку, предназначенную для експорта в excel: microsoft.office.interop.excel.

    DennisNN
    18.01.2017 08:08
    #14
  15. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24


    Цитата: DennisNN

    Доброго времени суток!

    В последней версии OS.Engine по крайней мере у меня не получается построить проект из-за того что компилятор не может найти отсутствующую библиотеку, предназначенную для експорта в excel: microsoft.office.interop.excel.

    попробуйте переустановить или установить офис с Excell, не хватает библиотек в системе. Вот в этой статье описано несколько способов того как это дело обойти: Ссылка
    Алексей Ван
    18.01.2017 11:13
    #15
  16. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18
    Цитата: Алексей Ван


    Цитата: DennisNN

    Доброго времени суток!

    В последней версии OS.Engine по крайней мере у меня не получается построить проект из-за того что компилятор не может найти отсутствующую библиотеку, предназначенную для експорта в excel: microsoft.office.interop.excel.

    попробуйте переустановить или установить офис с Excell, не хватает библиотек в системе. Вот в этой статье описано несколько способов того как это дело обойти: Ссылка

    Спасибо за помощь!Ещё вопрос к той же проблеме: имеет ли значение версии MS Office? Просто я пользуюсь 365, может от того и проблема или не важно?

    P.s. Вечером воспользуюсь вашим советом. Спасибо

    DennisNN
    18.01.2017 12:58
    #16
  17. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    63
    Был на сайте:
    15.03.22

    Забейте в Проводнике в поиске Microsoft.Office.Interop.Excel, всяко должен найти на диске C:. Если нет, то в инете полно, скачайте...

    Кот Матроскин
    18.01.2017 21:19
    #17
  18. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Все получилось, но пришлось установить MS Office 2016 вместо MS Office 365!?

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

    В общем ссылка, указанная Алексеем как раз в точку!

    DennisNN
    18.01.2017 22:30
    #18
  19. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Почему на графике сделки открытия и закрытия указываются точками одинакового цвета и совершенно не понятно из графика где открытие, а где закрытие.

    Можно ли это как-то исправить?

    DennisNN
    18.01.2017 22:31
    #19
  20. DBN

    Регистрация:
    15.01.17
    Сообщения:
    1
    Был на сайте:
    03.05.19

    Аналогичная проблема как у DennisNN, хотя office 2016 (мож порезанный) - пока закоментил всё нафиг

    DBN
    18.01.2017 22:58
    #20
  21. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Подскажите, возможно ли здесь строить опционные стратегии и планируются ли какие-то коннекторы к платформам западных брокеров?

    DennisNN
    22.01.2017 18:15
    #21
  22. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: DennisNN

    Подскажите, возможно ли здесь строить опционные стратегии и планируются ли какие-то коннекторы к платформам западных брокеров?

    опционные стратегии здесь строить по умолчанию нельзя. Нужно поработать топором для этого. Чтобы появился новый коннектор, его должны заказать. Цена вопроса 40 - 70 т.р. и месяц - полтора работы.

    Алексей Ван
    23.01.2017 08:13
    #22
  23. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: DennisNN
    Почему на графике сделки открытия и закрытия указываются точками одинакового цвета и совершенно не понятно из графика где открытие, а где закрытие.
    Можно ли это как-то исправить?

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

    Алексей Ван
    23.01.2017 08:16
    #23
  24. Lexuz77

    Регистрация:
    10.12.16
    Сообщения:
    113
    Был на сайте:
    10.02.24

    Подскажите: а можно каким то образом выводить в Бот Лог отладочную информацию из ботов? А то вроде всю логику распишешь, все кажется правильно, а робот работает не так, как хотелесь, и понять , что не так, очень сложно :( Ну вот например по дефолу в роботе была одна МАшка, я добавил еще одну и считаю разницу между ними. Но на графике эта 2я МА не появляется и, я так понял, расчеты по ней тоже не ведутся :(

    Было:

    _maFa = new MovingAverage(name + "MovingAverage", false) { Lenght = 12, ColorBase = Color.DodgerBlue };
    _maFa = (MovingAverage)_tab1.CreateCandleIndicator(_maFa, "Prime");
    _maFa.Save();

    Я добавил:

    _maSl = new MovingAverage(name + "MovingAverage", false) { Lenght = 150, ColorBase = Color.Green };
    _maSl = (MovingAverage)_tab1.CreateCandleIndicator(_maSl, "Prime");
    _maSl.Save();

    Естественно все проинициализировал:

    Было : private MovingAverage _maFa;
    Добавил : private MovingAverage _maSl;

    В итоге этой 2й МА я не вижу на графике и робот не работает по моей логике.

    ЗЫ: возможно можно вести отладку прямо через VisStudio (у меня 2015я), но я знаю как ее сделать в простых проектах, а тут как - незнаю еще ...

    Lexuz77
    16.02.2017 19:10
    #24
  25. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Увидел тут ваш диалог и подумал вот о чем: как быть, если у нас индикатор рисуется по 150 свечам и эти свечи часовые или Боже упаси дневные... столько Quik не передаст и придётся 150 дней ждать когда робот заработает? А если что с OS.Engine что-нибудь случиться пока мы ждём, например обнова выйдет важная... так можно и не дождаться...

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

    DennisNN
    17.02.2017 07:51
    #25
  26. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24

    Было:

    _maFa = new MovingAverage(name + "MovingAverage", false) { Lenght = 12, ColorBase = Color.DodgerBlue };
    _maFa = (MovingAverage)_tab1.CreateCandleIndicator(_maFa, "Prime");
    _maFa.Save();

    Я добавил:

    _maSl = new MovingAverage(name + "MovingAverage2", false) { Lenght = 150, ColorBase = Color.Green };
    _maSl = (MovingAverage)_tab1.CreateCandleIndicator(_maSl, "Prime");
    _maSl.Save();

    Дополнительно нужно другое имя для второй машки. "MovingAverage2" вот это. И всё заработает. Не очень удобно, но слой создания роботов мы менять не будем ближайшие пол года. Надо до версии с длительной поддержкой сохранять обратную совместимость.

    По сообщениям: _tab1.SetNewLogMessage("Message", LogMessageType.User);

    в любом месте можно высылать их в лог применяя вот эту конструкцию. Тип сообщения сами выбирайте. Единственное, Error будет поверх всех окон ещё выстреливать, т.ч. аккуратнее.

    Алексей Ван
    17.02.2017 07:56
    #26
  27. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    Подскажите, с какой частотой осуществляется пересчет по торговому алгоритму?

    Т.е., если выбран период в 1 час, то раз в час и будет пересчет?

    Можно ли как-то выводить на график сигналы входа/выхода из позиции?

    DennisNN
    24.02.2017 13:54
    #27
  28. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: DennisNN
    Подскажите, с какой частотой осуществляется пересчет по торговому алгоритму?
    Т.е., если выбран период в 1 час, то раз в час и будет пересчет?
    Можно ли как-то выводить на график сигналы входа/выхода из позиции?

    если подиписаться на событие завершения свечи и выбрать ТФ час, то будет раз в час. Если подписаться на событие обновления свечи, то будет каждое обновление свечи, если подписаться на событие обновления стакана или новый тик, то будет пересчитываться не прилично часто...

    Можно, да. На чарте можно ставить точки и подписывать их стандартными методами. Как пример посмотрите робот FilippLevel или реализацию Алертов.

    Алексей Ван
    24.02.2017 17:12
    #28
  29. DennisNN

    Регистрация:
    17.01.17
    Сообщения:
    31
    Был на сайте:
    08.11.18

    1. Подскажите, что есть событие завершения свечи и как оно работает?

    2. Как это событие будет работать, в случае рассинхронизации времени биржи и брокера?

    DennisNN
    24.02.2017 23:07
    #29
  30. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    23.04.24
    Цитата: DennisNN

    1. Подскажите, что есть событие завершения свечи и как оно работает?

    2. Как это событие будет работать, в случае рассинхронизации времени биржи и брокера?

    1) посмотрите в учебных роботах код. Вот такая конструкция, означает подписывание на событие: _tab.CandleFinishedEvent += TradeLogic; Также можно подписываться на другие события... Погуглите "события в сиШарп" и "из чего состоит класс в СиШарп".

    2) также как и обычно. Робот знать о рассинхронизации не будет и будет запаздывать.

    Алексей Ван
    25.02.2017 08:33
    #30
← Предыдущая Следующая → 1 2
Показаны 1-30 из 47