Блог им. SciFi

Запустил первого робота на бою

    • 17 февраля 2015, 15:29
    • |
    • SciFi
  • Еще
Завершил разработку своего первого торгового робота — свинг-трейдера и запустил его без режима отладки. Иду на работу, посмотрим что будет ) Надеюсь, он не сойдет с ума и не сольет мне счет. Все утро делал отладку и вроде исправил все возможные недочеты.

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

Не продается и не будет продаваться ) Куриц, несущих золотые яйца, не продают )

Запустил первого робота на бою 

Я не сразу пришел к этому. Начал разработку на QPILE под QUIK с трех простых вспомогательных программ (выгрузка котировок, показания многолинейных индикаторов, отображение состояния портфеля и доходности). На основе этого опыта уже смог написать робота буквально за 4 дня — 2 дня проектировал, 1 день писал, 1 день делал отладку.

Я рад тому, что в принципе написал и запустил робота в бою. Мне даже не важно, принесет ли он прибыль. Может быть, принесет небольшие убытки. Но сам факт этого достижения позволит мне теперь совершенствовать уже что есть и доводить это до ума.

Что могу посоветовать и рассказать начинающим разработчикам роботов?

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

2. Что использовал? Я пользовался несколькими статьями по QUIK, QPILE и за основу взял уже готового робота, торгующего скользящие средние. В частности, этой статьей. А также экстенсивно использовал документацию по QUIK, особенно раздел «Алгоритмическая торговля». Также гуглил все сомнительные моменты по языку QPILE. 

3. У меня 8 лет опыта программирования. Я профессиональный программист, зарабатываю этим на жизнь. Несмотря на это, баги были и не мало. Я делал отладку очень долго и тщательно и исправил множество моментов. В отличие от других разработок, при разработке робота любая мелкая ошибка — признак наличия существенных проблем более общего уровня. И я переходил на этот общий уровень и старался устранить корень ошибки, а не симптом. Дебажить надо и при чем много. С первого раза у Вас не получится разработать робота без ошибок.

4. Я не использовал такие инструменты как TS Lab. Возможно, они полезны, но у меня не было необходимости. Все писал сам на уровне кода и писал то, что сам ясно понимаю. Я понимаю каждую запятую в своем коде, каждую строчку, каждую букву. 

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

Запустил первого робота на бою

6. Больше мудрость, чем конкретика — не бойтесь ничего. Fortis fortuna adiuvat — храбрым судьба помогает. Я боялся, что робот сольет счет. Но смог перебороть страх и довериться своей программе после отладки. 
 
Буду добавлять апдейты сюда по мере появления новостей. 

17.02.15. Пока все хорошо, +0.37 % к счету за день. Робот закрыл мои убыточные позиции и открыл новые позиции как и должен был. Итого, 8 сделок за день.

18.02.15. Первый день робот отторговал без слива счета. Выяснилось, что в нем во время боевой торговли оставались 2 ошибки. Но они оказались не столь критичными, так как я подтверждал один трендовый индикатор другим. Исправил их. В одном месте забыл поставить взятие по модулю, а в другом — фильтр, запрещающий покупать, когда поезд уже ушел. Кроме этого, когда я пришел домой, интернет не работал. Возможно, интернет упал во время торговли. Буду покупать интернет-флешку и, возможно, даже второй роутер — для страховки. Добавил утром еще 20 активов, которыми может торговать робот, и убрал 2 неликвидных актива — сделал усовершенствование. 
★34
101 комментарий
Да… если профессиональные программисты с 8-ми летнем стажем пишут роботов на QPILE, то мне даже трудно представить, как пишут роботов начинающие программисты.
avatar
Lafert, просто скорее всего так как это его первый робот, он не знает при помощи каких инструментов лучше писать и на чем… со временем придет… тем более совершенству там нет предела…
avatar
Lafert,
вы настолько суровы, что сразу начали кодировать HFT роботов миновав стадию баровых страт?
avatar
Redline, начинал я со спредера, который ддосил сервер квика в попытке быть первым в стакане, в том числе соревнуясь с самим собой) так, как видел людей, делающих на стоянии в спреде деньги.
avatar
Lafert, я пишу на Obj-C и Java. Но QPILE мне понравился своим минимализмом и низким порогом входа. Конечно, буду совершенствоваться и изучу TSLab и как на других языках пишут, Lua, кстати, тоже в планах.
avatar
SciFi, вот только Луа и ТсЛаба Вам и не хватало) Джава-отличный, и весьма популярный, язык в финансовой индустрии. Берите FIX/FAST и вперед. Если не хотите расходов, получайте данные из квика через DDE (java это позволяет), а транзакции через текстовые файлы. Когда поймете, что надо скорость, подключите FIX/FAST.
avatar
Lafert, на Java транзакции в Quik можно через trans2quik.dll отправлять с помощью JNI/JNA. А данные через связку «Lua-скрипт, пишуший в Windows Pipes + Java-класс для чтения из Windows Pipes».
avatar
Enfernuz, думаете, «Lua-скрипт, пишуший в Windows Pipes + Java-класс для чтения из Windows Pipes» будет лучше старого доброго DDE?
avatar
Lafert, я не проверял, конечно, но думаю, что будет быстрее. Кстати, по-моему, мы с Вами и с товарищем ПВМ такое уже обсуждали в его теме, где он выкладывал эту связку :)

Upd. А, не, перепутал Вас с другим: smart-lab.ru/blog/216370.php
avatar
Lafert, Интересно ваше мнение. Чем не устроил lua?
avatar
Сердюк Иван, в чем смысл использования скриптового интерпретируемого языка (да и вообще зоопарка из языков и технологий), если можно обойтись стандартным подходом без лишних прослоек?
avatar
Lafert, То, что он скриптовой не означает, что он плохой. Если работаешь в квике и пишешь на c#, приходится городить выгрузку данных.
Да и к тому же если на луа, то есть колбеки.
avatar
Сердюк Иван, возможно. Хотя, есть еще тема- открыть небольшой счет в алоре или IT, и получать данные через их апи, а торговать через квик. Раньше это нехило прибавляло не только в удобстве, но и в скорости.
avatar
Ну… попутного ветра вам в этом направлении!:)
avatar
Прочитал этот кусочек:

«Естественно, он не тупо торгует скользящие средние. Мой алгоритм с диверсификацией, продвинутыми многолинейными индикаторами и учитывает проскальзывание, шаг и точность цены, причем не привязан к одному активу, а торгует заданный набор. Кроме этого, все транзакции и причины открытия сделок подробно записываются в логи, у каждого торгового дня свой отдельный лог файл. „

и мне вспомнился анекдот почему-то:

Киев, аэропорт “Борисполь». Стоят два пилота с Ту-134. Подходит к ним иностранец и спрашивает, как пройти для посадки на Боинг. Ему в ответ:
— Шо?
Повторяет вопрос на английском.
— Шо?
На немецком.
— Шо?
На французском.
— Шо?
Не получив ответа культурный заморский гость идет дальше. Один жлоболётчик другому говорит:
— Дивысь Петро (Мыкола), який буржуин, сколько много языков знает!
— Hу и шо, допомогло це ему?
avatar
gib, анекдот тупой. Пилоты, как и другой персонал самолета, обязаны знать английский.
avatar
Lafert, подтекст правильный =)
avatar
Farmabear, это да, мысль правильно, но анекдот этот я слышал где-то в пяти интерпретациях (в том числе, он был обыгран в ролике в ералаше), и эта самая неадекватная.
avatar
Lafert, я чтобы самому не набивать нашел в инете.
Не обратил внимание про самолет. Вообще в первоисточнике он про Крещатик.
avatar
Lafert, Хахаха-обязаны не значит что знают))) Или Вы не знаете как у нас все это делается
avatar
gib, помогло — не помогло узнаем через месяц примерно )
avatar
SciFi, Я думаю пять сессий хватит))) Вернее депо на пять сессий хватит
avatar
gib, тут проглядывается такая жуткая религиозная догма — что прибыльность должна быть пропорциональна сложности торговых правил…
avatar
Nemo_2000, о, вы в точку поймали мой сарказм. :-)
avatar
Молодец.
Успехов.
Переходи на MQL — не пожалеешь.
avatar
Redline, спасибо, посмотрю.
avatar
Тоже все эти пункты проходил и написал на qpile, но опыта в программировании не было, за месяц изучил язык и потом множество роботов написал, пока не нашел свой грааль ) Писать на другом языке есть желание, но заставить себя не могу, приносит же прибыль и такой простой робот)
avatar
Pr0d1k, да, зачем писать на Java, когда можно за пару дней написать на QPILE. А пока этот робот работает, изучать, медленно попивая кофе, другие методики )
avatar
пару вопросов автору тестели на истории? какие результаты? какова максимальная просадка в пунктах на контракт и ожидаемая доходность в год? что робот делает в случаи попадания на геп? ( брокер повис, пауза на бирже открытие с гепом против вас?)
avatar
Profitwarrior, вы наверное имел в виду не «тестели», а «ТЕФТЕЛИ»?
avatar
Profitwarrior, не тестил, так как методика проверенная самим собой вручную. Я запрогал ровно то, что сам до этого делал руками. Если захочу написать робота-скальпера, то сначала руками поскальпирую, чтобы лучше понимать, что делаю. Результаты через месяц будут. Ожидаемая доходность — 5% в мес. Если волатильность будет высокая как в декабре-январе, то 20% в мес. Робот торгует без плеча, почти инвест. подход. Если происходит что-то непредвиденное (цены закрытия нет, показаний индикаторов нет, инета нет), робот ничего не делает. То есть пропускает циклы и ждет. На каждом шагу проверки на 0. Если что-то сильно упало и проскользнуло — продает. Но за счет диверсификации потеря не большая будет.
avatar
SciFi, вы недопускате возможность что торговали вы не так много пару месяцев по вашим словам, и просто рынок был благосклонен к вашей стратегии? то бишь то самое одураченные случайностью? ведь так можно делать бесконечно поработали ручками 2 месяца и в бой робота, если не пошло нову. страту пару месяцев ручками и снова автомат вперед. такой подход логичен если бы автомат работал на все депо и там уже по факту за пару месяцев удваивал депозит и при сливе 50% вы бы оставались при своих, а так если страта попала просто в удачный переод? есть вероятность потратить время и подслить депозит при неблагопиятном раскладе и снова искать Грааль и так до бесконечности, может лучше сначала все же помаксимуму бэктестить? в конечном итоге это экономия времени
avatar
«Не продается и не будет продаваться»
пусть хотя бы месяц отторгует...
а зачем выбрали qpile, думается для профессионального программиста это немного дауншифтинг, если конечно вы не программист на shell языках
avatar
vfreeman, ответ выше — QPILE достаточен пока.
avatar
Эх… помню себя в начале этого пути… тоже столько планов, море оптимизма… а потом уйма бессонных ночей в корректировании, оптимизации… и т.д… удачи Вам!
avatar
Удачных торгов и поменьше злобных багов. Держите в курсе торговли.
avatar
А я в QPILE как-то не въехал по-быстрому, и лень было разбираться. А там уже и Lua подоспел, но алгоритм вечно вешал терминал в виду особенностей работы потоков Quik. Написал в итоге на Java, так как на работе пишу на ней. Сейчас копаю в сторону Plaza2 и FIX/FAST — сначала на Java, потом буду переписывать на старом добром C++.

Если Вы профессиональный программист, и прошли стадию языков типа Lua и QPILE в алготрейдинге, переходите на плюсы / C#.
avatar
Enfernuz, спасибо, гляну.
avatar
Enfernuz, к стати, с С# готов поспорить. Я, к примеру, делаю роботов на С#, но сталкиваюсь с рядом проблем, когда речь идет о достижении стабильного времени отклика. В шарпе ряд важных вещей, к примеру, GC являются черными ящиками. В яве, если не ошибаюсь, с этим чуть лучше. C++ понятно, вне конкуренции, но и писать, конечно, не так легко как на C#/java.
avatar
Lafert, на С++ и С не буду писать — ручное управление памятью, переполнения буфера, баги из-за преждевременно освобожденной памяти, утечка памяти и т.д. Писал много на старом Obj-C с ручным управлением памятью — знаю, какой это гемор.
avatar
SciFi, понимаю. Тоже приходилось на плюсах писать, и тоже примерно такие же ассоциации.
avatar
Lafert, shared_ptr посмотри.
эххх завидую я ботописателям — у них хоть есть четкая стратегия которую надо дать боту. А тут даже стратегии нет
avatar
Farmabear, вот пару стратегий вам www.forex-tribe.com/Learn-Trading-Strategies.php. Ознакомьтесь еще с арбитражем. Но я сам пока не арбитражем торгую.
avatar
успехов.
avatar
SMA, спс
avatar
за сколько научите меня роботов писать?
Профессор Преображенский, пока не занимаюсь этим. Читайте статьи, смотрите ролики, в инете все есть в открытом доступе, даже стратегии.
avatar
SciFi, скажите когда будете заниматься, плачу $$$
SciFi, я хочу чтобы с "… продвинутыми многолинейными индикаторами" ©,
«Что могу посоветовать и рассказать начинающим разработчикам роботов?»

Вы и есть начинающий, без обид.

risovach.ru/upload/2013/03/mem/kakoy-pacan_13538766_orig_.jpeg
Александр, ну я уже из чайника в бегиннеры заделался )
avatar
Судя по стилю написания статьи-робот наверное написан ее хуже)))
avatar
Иван Петров, нет, статью быстро накидал, робота писал очень аккуратно )
avatar
Иван Петров, после слов «Дебажить надо и при чем много.» понимаю что, тесты не не слышал.
Александр, слышал, я покрываю юнит-тестами свой код на работе. QPILE — другое. Тестить торговую стратегию одно, а тестить реальное выставление заявок и проверку наличия активных заявок у брокера — другое.
avatar
Александр, и про это слышал. Только есть нюансы другого характера. Например, один из багов у меня был в том, что я не учел, что шаг цены может быть не 0.01, а на 0.05, к примеру. И когда отдаешь цену брокеру в заявке 610.63, то он посылает тебя с ошибкой, так как ожидает что-то в духе 610.60 или 610.65. Вы это не сможете увидеть на мок-объектах, которые сами же и пишете.
avatar
SciFi, такой ошибки быть не может по определению, параметры инструментов нужно брать из интерфейса а не писать от руки.
«До чего дошёл прогресс -
Труд физический исчез,
Да и умственный заменит
Механический процесс.

Позабыты хлопоты, остановлен бег -
Вкалывают роботы, а не человек.»
avatar
Маркиз Лафайет, плюсанул )
avatar
SciFi, если вы освоили qpile, lua — проблем вообще для вас никаких не доставит. Позволю себе посоветовать 2 вещи, первое обязательно сделайте себе информирование на емейл о сделках, если робот зачудит, а это очень вероятно на стадии отладки (то что он несколько дней работает штатно — ничего не значит, могут быть редкие сочетания событий) вы это быстро поймете. И второе, все зависоопасные вызовы, типа обращения к графикам и таблицам запускайте из безопасного режима. Иначе скрипт ваш на луа будет регулярно подвешиваться при любом глюке от Квика.
avatar
Alpinist573, спасибо, очень полезный совет, а в чем преимущества lua над qpile?
avatar
SciFi, нет этого геморроя с обращением к свечам по дате, можно просто по номеру свечи (на купели мне пришлось мастерить отдельный файл справочник, где датам был сопоставлен номер строки и тд, для упрощения обращения к конкретным свечам), далее можно вызывать внешние программы (так у меня реализована отправка алертов на мейл), там еще куча всего появилась типа коллбэков (событийная модель), якобы даже вроде можно тянуть данные не выводя на график (мне лично это не понадобилось). В целом на купайл похоже. Есть у Луа неприятная заморочка, если разложить скрипты в разные папки и при этом они обращаются к какой-нибудь внешней библиотеке, и начать их поочередно запускать, то они начнут терять пути и зависать. Откуда последнее запущено то и считается рабочей папкой, остальное все отвалится. Ну и в целом луа развивается, а купайл будет со временем убран. Для не ХФТ роботов луа за глаза и за уши, ноль заморочек с получением данных и отправкой транзакций, после первого рабочего робота все остальные написаны будут за 2-3 вечера (используя соотв наработки). Настоящая народная тема. Модель как и в купайле циклическая, опрос соотв параметров с заданным таймаутом. У меня стоит 3 секунды, это не мало конечно, Ри за это время даже на спокойном рынке 20-30 пунктов туда сюда пляшет. Конечно больших претензий к луа предъявлять не стоит, все будет очень простенько, визуализация и тд якобы возможна с помощью соотв библиотек, я проковырялся 2 вечера нормально ничего не работало и я забил, чистое исполнение, а все подробности в лог файл.
avatar
Alpinist573, спасибо. Да, я тоже на QPILE заколебался рисовать нужные графики для каждого интересующего актива, чтобы робот мог анализировать их индикаторы и цены. У меня — 5 секунд, причем функция паузы на QPILE просто ужасно выглядит — бесконечный цикл. Да, нужны алерты, вот сижу в офисе и не знаю, может мой робот вообще вырубился. Надо как минимум поставить тим вивер.
avatar
как написано:
«Естественно, он не тупо торгует скользящие средние. Мой алгоритм с диверсификацией, продвинутыми многолинейными индикаторами и учитывает проскальзывание, шаг и точность цены,....»
как на самом деле:

if ( ubitok < 1000 )
{
if ( random(1,2) = 1 ) {
order->buy( random(1,5) );
} else {
order->sell( random(1,5) );
}
}

Просто Константин, )) смешно. Кстати, я планирую такого робота написать для дейтрейдинга. Он будет открываться рандомом, но торговать от стопов, извлекая прибыль из хаоса.
avatar
Просто Константин, аххахахаа
Удачи и поменьше багов, но их всё-равно будет немало, поскольку в алготрейдинге очень много краевых задач. Я своего робота целый год писал на Java. Правда сам не являюсь профессиональным программистом.
avatar
grevlanik, на счет краевых задач — это точно. Сейчас думаю, как обеспечить бесперебойную работу. Инфраструктурные проблемы начинают появляться.
avatar
Qpile прошлый век. Лучше сразу lua. Ну и надеяться что написанный за 4 дня робот принесёт стабильную прибыль — мягко говоря наивно.
avatar
ПBМ, я пока и не надеюсь. У меня прибыль закладывается на статистическом уровне при выборе активов после статистического анализа котировок. Задача робота — выжимать из этого максимум.
avatar
«Естественно, он не тупо торгует скользящие средние»

Чем дальше уходишь от средних тем быстрее к ним в итоге возвращаешься...))
avatar
Growex, Вы торгуете средние? ))
avatar
SciFi, да, точно так… Три штуки… Система «адидас» ))
avatar
Growex, аллигатор? )
avatar
SciFi, неа… щас покажу...

Это обычные средние, никакие не цифровые и не квантовымышленные…
Вот прямо сейчас так показывает на Ри
avatar
Growex, и почему люди не могут спокойно зарабатывать на MAшках?
avatar
SciFi, люди просто не хотят принимать убыток таким какой он должен быть… и поэтому принимают его гораздо бОльшим.

avatar
Growex, это типа торгуете по пересечению краснозеленой МА с Синей только в сторону чисто зеленой МА с большим периодом, служащей фильтром? А какой это таймфрейм?
avatar
Alpinist573, нет, пересечение средних это что такое? Ничего абсолютно… оно уже не значимо там где оно появляется… направление линий гораздо более интересно...
Зеленая — средняя за весь сегодняшний день. ))
В направлении этой средней просто позиция побольше и закрывается частично… а против неё — меньше, со стопом и полным закрытием… Открывается поза на откатах и отскоках по направлению тренда… а он определяется уже по вашему желанию… в моём случае — самой быстрой из изображенных линий по восходящим минимумам и нисходящим максимумам...(короче говоря местам она меняет свой цвет) Ведь проще уже некуда, разве нет?
Система трендовая и если по позиции лось то это значит что пришел такой боковик, который она не в состоянии отработать Нужно просто подождать...

avatar
Growex, если я правильно все детали понял, это как раз пример системы, которую на Луа реализовать видимо не получится. Хотя, из тиков свечи Луем собирать можно, + время между сработками цикла уменьшить до упора, в итоге реальное время реакции усушится до 2 секунд где-то, может слипом на Ри все и не убьет.
Вы это роботом торгуете или руками?
avatar
Alpinist573, насчет lua не могу ничего сказать так как не знаю на что он способен… хотя это обычные средние линии, поэтому интуитивно полагаю что не будет проблем.
Робот на амиброкере стоит, и скрин оттуда. Но в основном работаю руками, бота включаю только когда ухожу куда то.
avatar
Growex, А АмиБрокер связан с квиком чем-нибудь типа АмиШарпа?
avatar
Alpinist573, да, именно так.
avatar
слив обеспечен
avatar
странно, что вы начав разработку робота не знаете об отличиях qpile и qlua.
Вот почитайте: rusalgo.com/article/qpile-i-qlua
И переходите на qlua. Это оч. легкий язык, и справки по нему море.
avatar
Приму робота в дар или обменяю на FLY IQ 441 немного б/у
avatar
Goreloff, На смарт-лабе по-моему этих роботов бесплатных чуть ли не десяток раздают…
avatar
а какая оказалась сигма при профите 0.37%?
avatar
Макс, не знаю ) В итоге день закрылся даже с небольшим минусом — 0.6%. Но робот — свинг-трейдер, посчитаю все через месяц. Кроме этого, в конце поста буду добавлять апдейты при появлении существенных новостей.
avatar
SECRET,
avatar
Быстрее и проще, чем Forex!
Бинарные опционы с доходом до 92% всего за 60 секунд Подробнее: optionov.blogspot.com
avatar
Оооо какие фотки битвы роботов с тетками, скайнет от васи пупкина, рекламы то сколько + вкропление из истории жизни о том как создавалось… ммм, а призывы какие лозунги вау, ну ну.., еще пару таких статей и можно продавать робота лохам)), блеск и глянец красиво конечно, а в итоге сотни маленьких сделок в результате приходящее стадо лосей разрывает депозит трейдера, ну либо как у Греции просадка ростет ростет а потом туктук, кто там?.. откройте или двери выбью это маргин кол))
avatar
юрий савин, автор на заказ будет писать)) мне в первую очередь
Профессор Преображенский, я работаю программистом итак дорого, смысл мне на заказ кому-то роботов писать за копейки?
avatar
юрий савин, хаха )) нет, это не реклама. Просто решил поделиться своей радостью и достижением. Картинки — первые попавшиеся из Google по запросу trading robot. Я же написал — курицу не продаю и не собираюсь продавать. Цель поста одна — не скрывать то, что подарила мне судьба, а не то судьба скроет от меня что-то потом.
avatar
братиш, за 2 бутылки продашь?
avatar
pXhXXst, я ясно написал — не продаю и не собираюсь )
avatar

теги блога SciFi

....все тэги



UPDONW
Новый дизайн