Тестирование торговой системы на PHP

PHP*

Вступление



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

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





При этом я решил совместить приятное с полезным, и реализовать тестирование торговой стратегии на PHP. Почему я не стал использовать готовые программные продукты наподобие TSLab, WealthLab и т.п.? Во-первых, сама задача реализации торгового робота довольно интересна в качестве саморазвития. Во-вторых, большинство продуктов для тестирования торговых стратегий платные, а гарантировать, что бесплатные аналоги в скором времени не изменят свою политику распространения никто не может. Также у меня нет уверенности, что возможностей сторонних продуктов хватит для моих будущих торговых стратегий. В-третьих, PHP — веб-ориентированный язык, и свою разработку можно потом будет использовать в качестве основного модуля для веб-сервиса. Уже этих трех причин мне было достаточно для начала работ над tradeSystem.

Сразу оговорюсь, что проект я разрабатывал прежде всего для себя, и на данном этапе многим он будет интересен не столько с практической, сколько с академической точки зрения ввиду малого набора реализованных индикаторов, недостаточного тестирования различных вариантов использования, присутствия документации в виде тестов и других нюансов. Проект является open-source, поэтому если Вы найдете уместным практическое применение данной разработки, присодиняйтесь к расширению и тестированию функционала.

Формализация стратегии



Наша стратегия будет по сути «hello world» стратегией. Она будет основываться на MACD гистограмме.



Считается, что когда график этого индикатора пересекает значение «0» сверху или снизу, это сигнализирует о смене тренда. Если пересечение происходит сверху вниз — поступает сигнал на продажу, если снизу вверх — сигнал на покупку.

Наша стратегия будет работать на часовом графике и в конце каждого часа будет проверять, не появился ли сигнал на продажу или покупку. Сигналом будет служить разница в знаках между текущим и предыдущим значеним индикатора, либо равенство нулю предыдущего значения индикатора. В случае наличия сигнала и отсутствия бумаги в портфеле, мы будем открывать позицию на все денежные средства, которые имеем в наличии. При открытии позиции мы будем выставлять stop loss приказ на уровень 1% от цены открытия позиции и take profit приказ на уровень 2% от цены открытия, со смещением от максимума на 0.4 пункта.

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

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

Реализация торговой системы и скрипта тестирования



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

Непосредственно для проведения тестов нам потребуется три составляющих: данные котировок, реализация торговой системы, и скрипт, который организует среду тестирования и вывод информации о работе системы.

Что касается данных котировок, то я воспользовался экспортом котировок с сайта брокера Финам. Я решил протестировать систему на котировках Сбербанка за 2011 год. Несмотря на то что торговая стратегия принимает решения на часовом графике, нам надо будет на вход подать данные минутного графика. Чтобы сберечь сайт брокера, я положил файл котировок в директорию robots/testing/input проекта под именем: SBER_110101_111231_1min.txt.gz. Просто распакуйте этот файл, желательно в ту же директорию где он лежит.

Далее нам необходимо реализовать непосредственно торговую стратегию. С листингом конечного кода можно ознакомится, открыв файл MACDHistogrammReverseStrategy.class.php. Код класса должен быть достаточно понятный, я лишь прокомментирую в общих словах.

Для нашей стратегии нам понадобится сам индикатор, на основе которого она работает, бумага, которую мы тестируем и счетчик серий выигрышей и проигрышей. Далее у стратегии должен быть метод handleBar, аргументом которого является свеча. Для удобства я выделил еще два метода: canOpenPosition и openPosition, которые отвечают непосредственно за проверку возможности открытия позиции и непосредственно об открытии позиции.
В функции simpleHandle мы проверяем настало ли время принимать решение, если настало — проверяем появился ли сигнал к покупке или продаже. Если появился — открываем позицию. В функции openPosition мы непосредственно открываем позицию, выставляем stop loss и take profit приказы. Так как эти приказы тоже являются по сути стратегией сопровождения позиции, мы вклиниваемся в цепочку вызова стратегий методом insertUp. Вот собственно и все, осталось только написать скрипт, который будет считывать данные котировок, и подавать их на вход стратегии.

Скрипт тестирования



Листинг скрипта можно увидеть в файле MACDHistogrammReverse.php. Код опять же должен быть достаточно понятным, я остановлюсь на основных моментах.

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

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

Расчет новых значений индикаторов мы поручим классу Chart. Для этого создадим его и добавим все наши индикаторы в него. Теперь при вызове handleBar Chart будет вызывать у всех индикаторов рассчет нового значения индикатора. Некоторые вопросы могут возникнуть относительно надобности EndStrategy и BeginStrategy, в которые заворачивается наша стратегия. Основное назначение этих стратегий — обеспечить корректную обработку вновь генерируемых стратегий стратегиями, которые находятся в самой цепочке. Например при методе insertUp который использует наша стратегия стратегии TakeProfit и StopLoss вставляются выше по цепочке, но после BeginStrategy. При отсутствии BeginStrategy может возникнуть ситуация, когда мы будем вызывать handleBar нашей стратегии, а стратегии выше по цепочке вообще бы остались за бортом тестирования.

Далее все совсем просто, мы создаем нашу стратегию, создаем объект который будет вычитать комиссию, начинаем считывать FinamBarReader'ом входные данные и подавать их на вход комиссии, графику и стратегии. Также не забываем обновлять текущее время в DateTimeManager, чтобы наша стратегия корректно обрабатывала момент времени, в который надо принимать решение.
В конце, если у нас есть открытая позиция — закрываем ее принудительно по цене последней сделки и финальным аккордом выводим информацию, которая нас интересует.

Тестируем



На вход будем подавать минутные данные. Несмотря на то, что стратегия принимает решения на часовом графике, нам необходимо проводить тестирование на минутном графике из-за стратегии TakeProfit. Эта стратегия имеет на входе лишь данные свечи, и должна работать на ожидании самого плохого для нее движения котировки, коим является движение от максимума к минимуму свечи, и наоброт. Для часовой свечи это будет означать слишком частое ложное срабатывание, которого в реальности могло бы и не быть. Поэтому и надо стараться брать как можно меньший период свечей для тестирования именно стратегии, в этом случае движение котировки в пределах часа будет более точным, и работа стратегий более приближена к реальности.

Итак, тестируем:

php robots/testing/MACDHistogrammReverse.php robots/testing/input/SBER_110101_111231_1min.txt > /tmp/result.txt

Смотрим файл result.txt и видим, что по результатам тестирования наша стратегия показала четыре выигрыша подряд, шесть проигрышей, и в конце концов у нас на счете осталось 9143 рубля, при начальном балансе 10000 рублей. Всего торговая система провела операций на сумму 2 миллиона рублей.
Для наглядности я составил график распределения баланса во времени.



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

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

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

+35
30 сентября 2011, 13:30
71
ewgRa 5,8

комментарии (65)

–31
okopok #
Один я прочитал заголовок как «Тестирование торТовой системы на PHP»? :)
+34
kal1sha #
да, один
0
Syra #
Я лично хочу торт с момента прохождения первого portalа. Не удивился бы, если бы и я очитался. Фрейд вон и похлеще вещи выкидывал (отсылка к примеру из его жизни, где он вместо, кажется, стула, взял… девушку...).
–1
okopok #
Эх… сказывается влияние пятницы видимо :-)
0
Vik #
У тебя видимо вообще какое-то особенное отношение к еде. Даже никнейм символизирует :)
+1
white_mage #
Сейчас как раз сейчас потихоньку изучаю MQL5 и используя FANN для MQL пытаюсь что-то рабочее написать. Но ввиду того, что на MQL5 писать все таки тяжелее, чем на том же PHP, думал сначала оттестировать систему на PHP.

Поэтому тоже озадачивался тем же вопросом.
0
Quiz #
Если у Вас получится завести FANN на PHP, дайте, пожалуйста знать или напишите статью. У меня, например, в лоб не получилось и пришлось отступиться до пояления большего количества свободного времени.
0
ewgRa #
попытался завести FANN, не получилось. ни руками не устанавливается, ни как либо еще. судя по всему php binding давным давно не обновлялся.
0
Quiz #
Давным-давно — это ещё мягко сказано =(
0
Dromok #
И чем же тяжелее? MQL готовый рабочим инструмент. Я сам РНР-программист, но изучаю в свободное время MQL и у меня даже мысли не возникало использовать РНР для разработки торговых роботов. Зачем? На MQL же гораздо удобнее, он для этого и создавался. Код вышеописанной стратегии на MQL уместится в несколько строк кода и написать его можно, без преувеличения, за несколько минут.
+4
danilchenko #
Гм… Довольно странное решение, имхо, тестировать на php…
Можно, например, тестировать на GNU R — там и с большими объемами данных удобно работать, и библиотек много, и графики красивые рисовать легко. php, конечно, можно перенести в веб, но я думаю, что прикрутить веб-морду к R также легко (опять же наверняка нагуглится библиотека).

А стратегия действительно «hello world». Меня забавляет, как в разных книжках расписывают прибыльность таких hello world'ов. Даже примеры графиков приводят. Вот только в реальной жизни все это давно не работает…
0
danilchenko #
P.S. и да, я думаю, что легче выучить R со всем его многообразием библиотек, чем изобретать миллион велосипедов
0
white_mage #
Вопрос лишь в том, есть ли в GNU R какая нибудь реализация нейросетей.
0
danilchenko #
Есть реализации чего угодно. Для нейронок можно пользоваться пакетом nnet.
+1
danilchenko #
Народная мудрость гласит, что если что-то нужно написать, то это уже написано на Fortran.

Fortran-код легко портируется на R. То есть, если что-то нужно написать, это уже написано на R.

P.S. Я не пиарю R. Есть еще десяток ему подобных языков/фреймвоков и т.д., которые больше подходят для данной задачи, чем php
–2
ewgRa #
согласен, если бы не одно но, примерно то же самое можно было услышать про perl-php. Зачем этот php когда есть perl, очень очень похожий по возможностям и функционалу? Но шло время и статистика показывает что распространение php сейчас шире нежели perl.

Так что я бы не стал так категорично.
0
danilchenko #
Я имею в виду немного другое. Изначально GNU R больше приспособлен для таких задач, чем PHP, все-таки он язык для статистических вычислений.
А по удобству написания кода — мне кажется они равноценны. Это тебе не perl, который без поллитра никак=)
+4
MAXH0 #
ИМХО этот велосипед не пойдет дальше среднего велосипеда — покататься и забросить.
Тренд мировой экономики сейчас отрицателен.
Поэтому если чел хорошо знает PHP — то почему бы и не писать на нем? Чем учить язык который скорее не пригодится.
0
danilchenko #
Согласен. Но если возникнет необходимость много и упорно тестировать (а именно так и происходит, когда разрабатывается реальная стратегия), то велосипед не всегда подойдет.
В любом случае, почему бы и нет, мне кажется, что это замечательный experience для php-программиста.
0
gvsmirnov #
Справедливости ради замечу, что помимо R есть ещё несколько хороших инструментов. Тот же MATLAB прекрасен, пусть и платный.
0
danilchenko #
Да, Глеб, МатЛаб вполне аналогичен. Хотя после использования R мне показалось, что он удобнее. Но о вкусах не спорят.
0
ewgRa #
я постарался расписать критерии выбора языка, первоначально я смотрел WealthLab, ибо там используется C# и это мне показалось хорошим поводом познакомится с этим языком. Но до C# я не дошел, меня озадачил тот же индикатор гистограммы MACD, который они умудряются рассчитывать раньше его EMA.

по поводу легче изучить GNU R, возможно, но с точки зрения бизнеса программисты на PHP дешевле, возможностей больше.

Можно в принципе и в онлайн выводить продукты типа TSLab те же, они могут API предоставить чтобы их ядром можно было вертеть как хочешь и получать данные, другой вопрос почему этого они не делают, возможно не заинтересованы.
+4
danilchenko #
Программисты на php бывают разные. Настоящему индейцу пофиг, на чем писать.
0
MAXH0 #
Думал о нечто подобном, но руки не доходили и наверное не дойдут…
0
ewgRa #
присоединяйтесь к разработке, пишите какой функционал вам нужен для тестирования, я буду стараться его реализовывать по мере возможностей. Либо сами реализуйте его и возвращайте в проект :)
+2
MAXH0 #
Я хотел формализовать стратегии изложенные в одной книжке. Просто для проверки.
Но я ЛЮБИТЕЛЬ по программировать — не более. В реале я школьный учитель.
Хотя если будете терпеть — возможно я со школьником некую стратегию как исследовательский проект сделаю.

+1
ewgRa #
если не будет особой спешки то конечно присоединяйтесь, написание самой стратегии не особо сложное занятие, сложнее когда требуется под стратегию добавить функционал в ядро, помогу чем смогу :)
0
gvsmirnov #
Можете не утруждать себя: то, что написано в книжках, не работает точно. Можно ещё попытать счастья на отдельных научных статьях, но и их до получения какой-то прибыли придётся долго и упорно допиливать.
+1
MAXH0 #
Вы не понимаете главного. Школьный проект и не рассчитан на прибыль. Будет, например произведена оценка вклада тех или иных параметров в суммарный убыток. Но в результате человек получит практический опыт программирования, работы в проекте и много чего еще.
0
blacknot #
MACD не совсем конечно удачный, зато им можно выявлять хорошо дивергенции цен при надвегающимся развороте тренда. Вот бы еще конвертор MQL4 в PHP, чтобы из MetaTrader`а брать советники и индикаторы
0
white_mage #
А еще бы и наоборот)
0
blacknot #
Жаль только что MQL4 достаточно скудный язык, явно хуже даже чем php. А проект коенчно интересный, может и присоединюсь как нибудь )))
0
white_mage #
А как же MQL5? К тому же можно написать свою DLL и подцепить ее.
0
danilchenko #
Цеплял я свою dll. Это дает преимущества, но довольно геморройное занятие.
0
blacknot #
В нем появились более клевые типы, в 4ке вроде даже enum нету! Но вот проблема что не все брокер-системы поддерживают MetaTrade5. А вот с DLL действительно можно, я правда сам не пробовал, но если буду пробовать что-то действтельно большое, типа вероятностных нейросетей, то явно буду писать на внешнем языке))) а не на mql4
0
ewgRa #
практически везде пишут что MACD дает очень много ложных сигналов, особенно на графике с интервалом меньше дня,
если к этому еще прибавить, что стратегия не учитывает ни силу движения индикатора, ни время, то удивительно как стратегия в принципе не сливает депозит :)

а вообще практически любая стратегия скорее проигрывает не столько из-за точек входа, сколько из-за плохой стратегии сопровождения позиции. Например в этой hello world стратегии если посмотреть на график сделок отношение убыток/доход примерно стремится 1 к 1. Соответственно при удачном открытии позиции мы не успеваем отбить потери на предыдущей убыточной серии.
На эту тему очень интересно написал Игорь Чечет, который провел тестирование первичности входа или сопровождения позиции ichechet.livejournal.com/15579.html. В целом изходя из тех тестов которые я проводил, он прав.
0
blacknot #
Спасибо, посмотрю. Стратегий и нюансов вообще огромное множество, и часто определенные стратегии хорошо отрабатывают на одном рынке, но как он меняется — они начинают давать большие просадки. Я сам в поисках грааля ))) хороший сайт с cтратегиями — strategy4you.ru
–1
Captcha #
На PHP? Зачем изобретать велосипед? Есть специально заточенные платформы для создания торговых стратегий.
А вообще — ерунда это всё. Торговые системы на основе известных индикаторов и инструментов не работают — иначе все трейдеры давно были бы богачами =)
Рынок слишком сложная штука с кучей зависимостей (человеческий фактор, политическая обстановка в мире, время года, фаза луны и т.п.) для того, чтобы его можно было формализовать.
+1
ewgRa #
На вопрос «зачем» я написал в самой статье.

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

Другое дело, возможно ли еще построение стратегий на техническом анализе.
0
ewgRa #
я думал что практически все роботы которые сейчас торгуют построены на тех. анализе, ну возможно с каким-то диким количеством коэффициентов, взятых из фундаментального анализа.

Есть роботы которые торгуют только на фундаментальном анализе?
0
blacknot #
Тоесть если позавчера ночью выступал Бернанке то робот должен был анализировать что он говорит понимать в какую сторону пойдет рынок? Типа если он сказал что будет рецессия как пару недель назад, то бакс пойдет вверх? эх, клева бы )))

А так есть стратегия при которой робот отслеживает важные новости (их списки есть в инете) и после новостей ставит отложеные ордеры на BUY или SELL, в зависимости от того куда пойдет рынок после новости, пощел резко вверх — ставим на BUY, пощел вниз — ставим на SELL, сам не пробовал, имхо рисковано ))) Один знакомый предлагал отслеживать твиттер и выцеплять ключевые слова и взвешивать их, но имхо покупка будет уже поздно, тут главное вовремя войти в рынок и вовремя выйти
+1
ewgRa #
нет нет, речь не идет об анализе речи Бернанке.

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

Торговля по новостям это по большей части торговля на эмоциях, а эмоции не лучшим образом сказываются на результатах торговли. Да и новости интерпретирует человек, что одному покажется неплохо, другому не совсем понравится. В итоге движение при выходе новости может быть часто ложным, если еще учитывать, что новость часто бывает заложена уже в цену можно прогореть. Но попробовать конечно можно
+1
blacknot #
Аааа, понял, да, интересно.

Ну а новости как и тренды, фигуры итд толкуют все по разному, главное иметь хорошую и четкую стратегию игры и не поддаваться эмоциям! А впринципе технический анализ и построен на эмоциях, эмоциях людей. Как говорил Доу Джонс, психология людей не меняется, поэтому законы технического анализа имеют четкую закономерность и они повторяются во времени.
0
danilchenko #
Насколько я знаю, большинство работает на анализе микроструктуры рынка. Ну или арбитражит. Это не технический анализ. Хотя его элементы без сомнений могут использоваться.
+1
chessk #
Если говорить о бесплатных тестерах (и забыть об эскспиренсе php-программиста) то есть огромный смысл глянуть в инвентарь форекс-клуба. Там есть несколько интересных терминалов. Не знаю, применимы ли они к торговле акциями, поскольку сам работаю с валютами.

В rumus2 есть встроенный тестер стратегий с шикарнейшим функционалом opt-перменных. Сама стратегия описывается на языке РуЛанг (собственный румусовский язык, простой как… не знаю как что, нереально простой, в общем), а opt-переменные можно использовать для оптимального подбора параметров индикаторов. Можно задать пределы перменной и с каким шагом ее подставлять в стратегию и прогнать по графику (история на данный момент доступна с 2006 года). На выходе получаем очень развернутый отчет о проделанной работе, какие значения для индикатора подходят наилучшим образом на данном графике, макс. просадка и т.п.

В ActTrader так же можно написать собственную стратегию на языке на базе Паскаля. Из минусов этой платформы — нереально медленный тестер, и история максимум (для часовок) — полгода. Из плюсов — более гибкое описание стратегии, работа не только с валютами (нефть, металлы и что-то еще, может даже акции), но самое главное — наличие робота, котороый будет исполнять написанную стратегию без вашего участия, нервов, жадности и переживания за баланс.

В румусе робота нет, только тестер. Сам лично использую связку этих программ. Для румуса аккаунт не надо заводить, можно и так гонять в хвост и в гриву. Для актТрейдера надо зарегаться на сайте форекс-клуба.
+1
danilchenko #
Известное дело, что платформ и инструментов миллион. Но пишут же люди свои операционные системы. Так почему было не написать еще один велосипед?
ewgRa молодец несмотря на все очевидные минусы его платформы.
0
chessk #
ewgRa молодец, это безусловно. Но собирая свой собственный велосипед, полезно будет посмотреть на уже собранные велосипеды, просто чтобы знать какими функциями вообще могут обладать велосипеды.
0
white_mage #
У MetaTrader'a есть язык MQL. Он с C-подобным синтаксисом. Так же позволяет тестировать, прогонять разные параметры системы. К тому же есть возможность использования генетических алгоритмов на этапе тестирования.
Но обычно получается так, что оптимизировав систему под историю, в будущем прибыльность этой системы практически нулевая. Поэтому и есть желание использовать внутри эксперта/советника нейронные сети.
0
danilchenko #
Я пробовал использовать reinforcement learning. Тоже замечательно обучается. Правда только в том случае, если вообще есть связь между тем, на что смотрим, и тем, на чем торгуем. И вот тут как раз возникают проблемы…
0
ParadiseCracked #
По каким формулам реализован механизм рассчета эффективности торговой стратегии? Или пока «на глаз по файлику»?
0
ewgRa #
что имеется ввиду под «рассчетом эффективности»?

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

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

Это имелось ввиду под рассчетом эффективности? Если нет, расскажите поподробнее что вы имели ввиду.
0
danilchenko #
Еще хорошо бы посмотреть на среднюю прибыль сделки (это скорее для прибыльных стратегий). То есть если стратегия имеет среднюю прибыль на трейд порядка комиссионных, то оно того не стоит. А если больше, то сразу понятно, насколько хорошо стратегия может быть масштабирована применением больших объемов.
0
ewgRa #
ну если учитывать все комиссии сразу, как это будет делать брокер, то это скажется на конечном балансе и соответственно на прибыльности стратегии. если у нее прибыль будет порядка комисионных, то и о прибыльности речь не будет идти
+1
egorF #
«при реальной торговле результаты торговых стратегий будут несколько хуже, чем при тестировании» — это если идти втупую тик за тиком и мгновенно «исполнять» лимитки/стопы по первому тику. Я же написал себе маркет симулятор, который и ордера выполняет с задержкой и свкизы рисует по несколько центов (совсем ад).

Работа моего робота по такому симулятору в точности, цент в цент, совпадает с тем, как он работает на реальной бирже (только я торгую на NYSE и CME) — с поправкой на заложенные случайности.

У меня все написано на node.js, и я тоже постепенно готовлюсь опубликовать в opensource фундамент торговой системы.
0
ewgRa #
ну как вариант, но тестирование работы по тикам должно очень много времени отнимать/

а расскажите, почему вы решили свою систему писать, а не использовать готовое?
0
egorF #
тестирование по тикам стоит дорого, да, тем более по высоколиквидным инструментам. Amazon EC2 в помощь. Ну и не брать для этого PHP.

«почему вы решили свою систему писать» — тошнит от винды и от торгового софта. Но это ошибочное решение. Рациональнее было бы, конечно, использовать торговую платформу типа NinjaTrader.
0
slava_k #
Если вас не затруднит — сообщите когда будет публикация, был бы признателен за ознакомление с вашими реализованными идеями (можно через ЛС хабра).
+1
egorF #
Кстати, написав за год целую торговую платформу (с графиками, с симулятором рынка, с базой данных тиковых котировок почти по всему NYSE и т.д.) я бы очень советовал вам отказаться от вашей затеи.

Есть торговые платформы, на которых гораздо легче разрабатывать роботов. Даром, конечно, что все они под винду, но они работают и в них есть нужный инструментарий. Делать с нуля все свое, начиная от свечного графика и до протокола обмена с брокерами — это довольно-таки бессмысленный труд.
+1
ewgRa #
пока что это как хобби. можно сказать академическая задача, которую интересно решать, вам наверное тоже было интересно делать свою систему.
+1
slava_k #
Из стандартных средств моделирования МТС — это тот же метатрейдер. Но. На нем не всё скажем так можно тестировать, так как еще с 200-х билдов есть список серьезных косяков, которые дадут положительное матожидание, но на самом деле при правильном расчете будет минус на гране минусов.
В идеале, если смотреть на торговлю с учетом наличия свободных существенных денег (не 10к рублей), то вся торговля должна быть такой: брокер/банк с торговым гейтом по FIX протоколу, у него же тиковый сервер и возможность оспаривания в суде работу по сделкам, на клиенте у себя тоже один сервер со своей историей хотя бы от 10-20 брокеров/банков за последние лет 10 хотя бы не хуже минуток, один тестовый искусственный поток с чем-то опасным и нерыночным для проверки устойчивости к жесткому и опасному рынку, далее свой софт с несколькими десятками постоянно торгующих роботов, проводящих все сделки исключительно в своей песочнице (смотрим рынок по модели и сделку ставим в своей системе, локально). Далее это все торгуется с годик онлайн 24*7*365 и вытачивается оптимальные алгоритмы (несколько МТС, несколько портфелей и т.п.), которые уже можно выводить на реальные деньги.
Плюс нужно понимать, что если цель всего этого серьезная — то никаких кухонь из СНГ, их невывод мелких объемов на межбанк — это игра в трубу с самим собой против себя же.
Ну и пожелание изучать это все с постоянным поиском качественного брокера/банка (не идеального, а реального), которому будет, скажем так, невыгодно вас сливать. Будете успешными на длительном интервале — считайте что ваши сделки будут зеркалировать сами брокеры (вам это пофиг, но если будете долго сливать у контрагента-прокладки будет серьезный зуд с желанием перекрыть свои косяки вашим депозитом через проскальзывания, неисполнение/потерю сделок и т.п. вариантов много, ограничение тут только фантазией), будете делать глупости при принятии решения — вас съедят за милую душу.

Хотите что-то заработать — готовьтесь к войне, судам и потерям. Ищите плоские положительные МТС на длительном интервале от года.
0
slava_k #
На мой взгляд PHP как инструмент для обработки больших объемов данных за конечное и приемлемое время не подходит. Также не подходит и то, что предлагают «брокеры» — тот же MQL (даже с учетом всех фенечек с DLL и т.п.).
Писать только своё при наличии времени, желательно на чем-то вроде С++ компилируемом либо, если есть средства — покупать готовый и ОЧЕНЬ дорогой софт для «игр в песочнице».
0
ewgRa #
это все больше похоже на работу крупного трейдера. думаю большинство инвесторов не обладают такими возможностями, да и нет мне кажется такой необходимости.

но все равно интересно :) насколько все серьезно в крупном трейдинге
+1
Sherman81 #
Жень, не трать время впустую. Ты убьешь очень много времени на то, чтобы сделать то, что уже сделано сто раз и правильно. И это не приблизит тебя к цели. Если ты конечно ставишь себе цель — заработать.

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

А в качестве системы программирования можно взять тот же TSLab для простых стратегий и stock# для нетривиальных.

Но и там есть куча подводных камней и сложностей, даже несмотря на то, что у тебя допустим есть хороший алгоритм. Я, например, до сих пор собираю иногда баги в роботах, несмотря на то, что они торгуют уже с апреля. Это долгий путь и тратить его впустую — глупо.
0
ewgRa #
спасибо за совет, я и так в принципе понимаю «велосипед vs готовое взять» какие плюсы и минусы, но поиграться же интересно со своим :)

если серьезно заниматься этим, тогда да, надо брать готовое, а если это как хобби, то можно и со своим пока-что…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.