Форум устарел! Поддержка тут: https://t.me/osengine_official_support
Актуальные гайды здесь: https://smart-lab.ru/company/os_engine/blog/1024149.php
Пошаговая инструкция
Библиотека 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. если закрытие последней свечи ниже закрытия предыдущей, продаем.
Все, наш простой бот готов. Если мы его запустим он будет работать:
На нашем форуме можно найти множество примеров и логических конструкций для написания различных алгоритмов. Главное побольше практиковаться и результаты не заставят ждать.
Цитата: coder-ex
Для тестирования роботов обязательно подключать коннектор или нет?
Для тестирования используется специальный блок: Os.Tester. В нём встроенный эмулятор биржи. К нему подрубаются скаченные данные и происходит эмуляция торгов. http://o-s-a.net/forum/threads/63 здесь подробно про запуск тестера
Цитата: Алексей Ван
Для тестирования используется специальный блок: Os.Tester. В нём встроенный эмулятор биржи. К нему подрубаются скаченные данные и происходит эмуляция торгов. http://o-s-a.net/forum/threads/63 здесь подробно про запуск тестера
спс, ознакомлюсь )) просто запустил проект из архива для пробы, при компиляции сразу вывалил кучу ошибок - ссылается на коннектор SmartCom И там еще много чего ))
Цитата: coder-exнет. Описание есть только для слоя создания роботов.
и еще, я чего то не могу найти описание классов в библиотеке, его нет?
Цитата: Алексей Ванв таком виде эта разработка только для простых стратегий, т.к. не зная функционала классов, не все будут их изучать просматривая исходники
нет. Описание есть только для слоя создания роботов.
Цитата: coder-ex
Цитата: Алексей Ванв таком виде эта разработка только для простых стратегий, т.к. не зная функционала классов, не все будут их изучать просматривая исходники
нет. Описание есть только для слоя создания роботов.
я в этом слое только что закончил делать межбиржевую котировочную машину. Т.ч. это очень и очень спорно. Что же такого нельзя в нём делать.
Никто пользователям больше не даёт чем в этом слое - ни ТсЛаб, ни Велс. А все попытки СтокШарп дать Вам набор классов закончились тем что 98% их абитуриентов даже на машках роботов так и не научились делать.
С другой же стороны - я без всяких описаний и комментов в коде освоил СтокШарп за месяц. Т.е. мой опыт говорит вот о чём:
1) 98% всех алготрейдеров нечего делать за пределами слоя создания роботов. Они там заблудяться т.к. не программисты в общепринятом смысле(т.е. не знают в достаточной степени многопоточность, ООП, да и тот же дебаггинг нормально)
2) Те кто знает ООП, многопоточность и прочее, они освоят Os.Engine за неделю.
3) Поэтому бессмыссленно пытаться учить людей чему-то кроме слоя создания роботов, т.к. иначе, на самом деле их придётся учить быть хорошими программистами. А этим занимаются совсем в других местах...
Но ещё раз повторюсь: я в этом слое только что закончил делать межбиржевую котировочную машину, А что касается Вашего скринера, который Вам нужен, он делается в этом слое в 500 - 700 строк. И то что Он у Вас не получается не говорит о том что "В таком виде только для простых стратегий"
Подскажите пожалуйста! Пытаюсь написать своего первого робота в OS.Engine. Но, столкнулся с проблемой: не понятно, есть ли возможность совершать покупку по определённому инструменту, совершать многочисленные докупки по нему же и при этом вести каждую докупку как отдельную позицию, соответственно применяя именно к ней трейлнг-стоп. Просто, как мне показалось, в OSEngine так сделать нельзя, так как здесь есть понятие одной позиции и докупок к ней!?
Поясните пожалуйста.
Цитата: DennisNN
Подскажите пожалуйста! Пытаюсь написать своего первого робота в OS.Engine. Но, столкнулся с проблемой: не понятно, есть ли возможность совершать покупку по определённому инструменту, совершать многочисленные докупки по нему же и при этом вести каждую докупку как отдельную позицию, соответственно применяя именно к ней трейлнг-стоп. Просто, как мне показалось, в OSEngine так сделать нельзя, так как здесь есть понятие одной позиции и докупок к ней!?
Поясните пожалуйста.
Так сделать можно. В платформе есть возможность открывать несколько позиций по одному инструменту в рамках одного робота. Также в ней есть возможность модифицировать любую позицию как будет угодно.
У методов открывающих позицию(BuyAtLimit и т.д.) есть перегрузки в которых можно передавать в создаваемую позицию тип сигнала. Далее у этой позиции всегда будет спецПометка в поле OpenSignalType. Так можно наоткрывать сколь угодно много позиций и поименовав их к каждой применять свой отдельный тип выхода.
Цитата: Алексей Ван
Цитата: DennisNN
Подскажите пожалуйста! Пытаюсь написать своего первого робота в OS.Engine. Но, столкнулся с проблемой: не понятно, есть ли возможность совершать покупку по определённому инструменту, совершать многочисленные докупки по нему же и при этом вести каждую докупку как отдельную позицию, соответственно применяя именно к ней трейлнг-стоп. Просто, как мне показалось, в OSEngine так сделать нельзя, так как здесь есть понятие одной позиции и докупок к ней!?
Поясните пожалуйста.
Так сделать можно. В платформе есть возможность открывать несколько позиций по одному инструменту в рамках одного робота. Также в ней есть возможность модифицировать любую позицию как будет угодно.
У методов открывающих позицию(BuyAtLimit и т.д.) есть перегрузки в которых можно передавать в создаваемую позицию тип сигнала. Далее у этой позиции всегда будет спецПометка в поле OpenSignalType. Так можно наоткрывать сколь угодно много позиций и поименовав их к каждой применять свой отдельный тип выхода.
Спасибо за быстрый ответ! Буду разбираться
Спасибо за быстрый ответ! Буду разбираться
Да) Это всё волшебный апгрейд главной страницы форума. Теперь наконец-то видно кто где пишет) Магия.
Вы вообще волшебники!
Я разочаровался в TsLab, особенно после резкого повышения цен за не очень-то качественный и недоделанный продукт! Погрузился с головой в программирование изучая StockSharp... утонув в нем практически безрезультатно где-то на полгода)) И тут вдруг такой подарок под Новый год в виде OS.Engine!!!
Доброго времени суток!
В последней версии OS.Engine по крайней мере у меня не получается построить проект из-за того что компилятор не может найти отсутствующую библиотеку, предназначенную для експорта в excel: microsoft.office.interop.excel.
Цитата: DennisNNпопробуйте переустановить или установить офис с Excell, не хватает библиотек в системе. Вот в этой статье описано несколько способов того как это дело обойти: Ссылка
Доброго времени суток!
В последней версии OS.Engine по крайней мере у меня не получается построить проект из-за того что компилятор не может найти отсутствующую библиотеку, предназначенную для експорта в excel: microsoft.office.interop.excel.
Цитата: Алексей Ван
Цитата: DennisNNпопробуйте переустановить или установить офис с Excell, не хватает библиотек в системе. Вот в этой статье описано несколько способов того как это дело обойти: Ссылка
Доброго времени суток!
В последней версии OS.Engine по крайней мере у меня не получается построить проект из-за того что компилятор не может найти отсутствующую библиотеку, предназначенную для експорта в excel: microsoft.office.interop.excel.
Спасибо за помощь!Ещё вопрос к той же проблеме: имеет ли значение версии MS Office? Просто я пользуюсь 365, может от того и проблема или не важно?
P.s. Вечером воспользуюсь вашим советом. Спасибо
Забейте в Проводнике в поиске Microsoft.Office.Interop.Excel, всяко должен найти на диске C:. Если нет, то в инете полно, скачайте...
Все получилось, но пришлось установить MS Office 2016 вместо MS Office 365!?
И автоматически библиотека все равно не подцепляется, а приходится удалять dll из проекта и заново указывать адрес...
В общем ссылка, указанная Алексеем как раз в точку!
Почему на графике сделки открытия и закрытия указываются точками одинакового цвета и совершенно не понятно из графика где открытие, а где закрытие.
Можно ли это как-то исправить?
Аналогичная проблема как у DennisNN, хотя office 2016 (мож порезанный) - пока закоментил всё нафиг
Подскажите, возможно ли здесь строить опционные стратегии и планируются ли какие-то коннекторы к платформам западных брокеров?
Цитата: DennisNN
Подскажите, возможно ли здесь строить опционные стратегии и планируются ли какие-то коннекторы к платформам западных брокеров?
опционные стратегии здесь строить по умолчанию нельзя. Нужно поработать топором для этого. Чтобы появился новый коннектор, его должны заказать. Цена вопроса 40 - 70 т.р. и месяц - полтора работы.
Цитата: DennisNN
Почему на графике сделки открытия и закрытия указываются точками одинакового цвета и совершенно не понятно из графика где открытие, а где закрытие.
Можно ли это как-то исправить?
можно. Там просто красивые стрелочки закоменчены в чарте, т.к. в режиме дебаггинга график очень медленно их прорисовывает. Если их вернуть, вообще получается в режиме дебаггинга нельзя будет гонять программу, что весьма плохо для библиотеки. Я что нибудь придумаю.
Подскажите: а можно каким то образом выводить в Бот Лог отладочную информацию из ботов? А то вроде всю логику распишешь, все кажется правильно, а робот работает не так, как хотелесь, и понять , что не так, очень сложно :( Ну вот например по дефолу в роботе была одна МАшка, я добавил еще одну и считаю разницу между ними. Но на графике эта 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;В итоге этой 2й МА я не вижу на графике и робот не работает по моей логике.
ЗЫ: возможно можно вести отладку прямо через VisStudio (у меня 2015я), но я знаю как ее сделать в простых проектах, а тут как - незнаю еще ...
Увидел тут ваш диалог и подумал вот о чем: как быть, если у нас индикатор рисуется по 150 свечам и эти свечи часовые или Боже упаси дневные... столько Quik не передаст и придётся 150 дней ждать когда робот заработает? А если что с OS.Engine что-нибудь случиться пока мы ждём, например обнова выйдет важная... так можно и не дождаться...
второй вопрос, о том, как перейти с одной версии на другую имея работающего робота? Хочется, чтобы при включении новой версии вся информация по уже запущеным роботам и сделкам отображалась сразу. Откуда скопировать файлы
Было:
_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 будет поверх всех окон ещё выстреливать, т.ч. аккуратнее.
Подскажите, с какой частотой осуществляется пересчет по торговому алгоритму?
Т.е., если выбран период в 1 час, то раз в час и будет пересчет?
Можно ли как-то выводить на график сигналы входа/выхода из позиции?
Цитата: DennisNN
Подскажите, с какой частотой осуществляется пересчет по торговому алгоритму?
Т.е., если выбран период в 1 час, то раз в час и будет пересчет?
Можно ли как-то выводить на график сигналы входа/выхода из позиции?
если подиписаться на событие завершения свечи и выбрать ТФ час, то будет раз в час. Если подписаться на событие обновления свечи, то будет каждое обновление свечи, если подписаться на событие обновления стакана или новый тик, то будет пересчитываться не прилично часто...
Можно, да. На чарте можно ставить точки и подписывать их стандартными методами. Как пример посмотрите робот FilippLevel или реализацию Алертов.
1. Подскажите, что есть событие завершения свечи и как оно работает?
2. Как это событие будет работать, в случае рассинхронизации времени биржи и брокера?
Цитата: DennisNN
1. Подскажите, что есть событие завершения свечи и как оно работает?
2. Как это событие будет работать, в случае рассинхронизации времени биржи и брокера?
1) посмотрите в учебных роботах код. Вот такая конструкция, означает подписывание на событие: _tab.CandleFinishedEvent += TradeLogic; Также можно подписываться на другие события... Погуглите "события в сиШарп" и "из чего состоит класс в СиШарп".
2) также как и обычно. Робот знать о рассинхронизации не будет и будет запаздывать.
ООО «ВАН ТЕХНОЛОГИИ»т: +7 953 769 56 45
* Торговля на финансовых рынках связана с риском, который лежит на Вас.
* Ничто из написанного на сайте o-s-a.net не является рекомендацией.
* Если Вы этого не понимаете, не читайте этот сайт, ничего не покупайте.