SergeyEgorov
SergeyEgorov личный блог
03 января 2014, 20:43

Программируем простейший бэктестер (часть 1)

Один из самых частых вопросов, который начинающие программисты-трейдеры задают мне в почту или скайп это — «Как написать бэктестер?». Глобализовать задачу не хочется, дабы она не умерла из-за потери концентрации и мотивированности, поэтому пойдем поступательно, от простейшего, к простому и за несколько итераций реализуем набор алгоритмов, которые позволят тестировать торговые стратегии, базирующиеся на свечках (Bar). Первый бэктестер должен будет уметь исполнять рыночные заявки, по цене закрытия самого последнего бара, присутствующего в контексте торговых данных, для нашего финансового инструмента. Примерный план действий такой:

  1. Реализуем класс, который эмулирует сделки для наших заявок.
  2. Реализуем класс, который последовательно читает свечки из текстового файла и добавляет их в контекст торговых данных.
  3. Реализуем к примеру пробойный обработчик на открытие позиции.
  4. Реализуем обработчик на закрытие позиции.
  5. Реализуем консольное приложение, которому можно будет передавать имя текстового файла с историческими данными и которое будет выполнять бэктест для этих данных.

Видео по первому пункту:

32 Комментария
  • Евгений
    03 января 2014, 21:34
    А зачем это делать? Можно взять любую программу. Допустим АмиБрокер. Или тот сайт, что я вам рекомендовал. Зачем свой писать?
      • ves2010
        04 января 2014, 09:48
        SergeyEgorov,
        сделай лучше доброе дело… напиши биржевой тренажер…
          • ves2010
            04 января 2014, 12:51
            SergeyEgorov,
            это имитатор торгов типа opentrainer.ru chartgame.com
            загоняешь данные минутки лет за 5… из них формируются другие таймфреймы… главная фишка три экрана — ни у кого такого нет… если сделаешь в виде плагина к смартХ от айтиинвест то тебе денежку заплотят… вообще биржевой тренажер крайне важная и полезная штука… smart-lab.ru/blog/155810.php тут один абзац про них
              • ves2010
                04 января 2014, 18:34
                SergeyEgorov, неа это типа совет… как поднять деньги на околорынке… обсуди с сидором на форуме айтиинвест…
      • Евгений
        04 января 2014, 11:22
        SergeyEgorov, ваши записи и ролики мне кажется смотря 2-3 человека постоянно. На фоне общих записей после выходных они как обычно будут не видны. Создайте отдельный блог. Например, в ЖЖ. Так вы найдете своих читателей. Здесь же сплошные трейдеры, которым вам записи не скажут ни слова.
          • Евгений
            04 января 2014, 12:10
            SergeyEgorov, теряете время. Если бы трейдеры были стоящие, то они бы не программировать учились, а вам бы предложили на пару создавать профитные стратегии. Но как знаете.
              • Евгений
                04 января 2014, 12:55
                SergeyEgorov, я написал про эффективность в денежном плане. Социальное мировоззрение предпочитаю не обсуждать в интернете.
                  • Евгений
                    04 января 2014, 14:59
                    SergeyEgorov, если вы так пишите, то значит еще не встретили трейдеров, с которыми можно работать. Иначе бы вы давно уже торговали на рынке роботами с долями.

                    Если вы хотите писать за деньги программы, то я могу сразу сказать — это копейки. Мы сами раньше заказывали стратегии, пока не нашли своих программистов. Средний заказ обычно не превышал 30 т.р. При это такая стратегия генерировала прибыль с пятью нулями за 1 месяц. Программистам никто не дает секретные стратегии. Обычно это какая-то исполнительная часть (вывести приказы на биржу, закрыть позиции, переворот). Логику делаем всегда сами. Думаю, мы не одни такие.

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

                    Подумайте на досуге, нужны ли вам заказы. Поверьте, куда больше денег вы получите, если будете работать с трейдерами. А чтобы найти хороших трейдеров, внимание, вам нужна не программирование бэктестеров делать, а начать делать самостоятельно рисерчи и делать мини папиры. Тогда вас сами найдут люди, с которыми вы так захотите сильно работать, что ни на какие Ютюб ролики у вас времени не будет оставаться ;-)
                    • professor facepalm
                      04 января 2014, 15:08
                      Евгений,

                      «Программистам никто не дает секретные стратегии»

                      «начать делать самостоятельно рисерчи и делать мини папиры»

                      Это разве не противоречие?
                      • Евгений
                        04 января 2014, 15:17
                        facepalm, не вижу противоречия.
                        • professor facepalm
                          04 января 2014, 16:15
                          Евгений, в одном предложении говорится, что секретные стратегии никому не рассказываются, в другом — что нужно исследования в паблик выкладывать. Или имеется ввиду: выкладывать в паблик исследования, от которых не было результата?
                          • Евгений
                            04 января 2014, 16:29
                            facepalm, как-то вы меня странно читаете :-)

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

                            В другом предложении написано, как не наемным программистам привлечь к себе внимание трейдеров или команду трейдеров. Чтобы человека взяли к себе в команду и он начал работать на себя в команде.
                            • professor facepalm
                              04 января 2014, 16:37
                              Евгений, ок, понял. Просто не понятно, зачем программисту, умеющему грамотно проводить исследования, может понадобится помощь трейдеров. А программист, не умеющий проводить исследования, вряд ли привлечёт их внимание.
                              • Евгений
                                04 января 2014, 16:47
                                facepalm, понятие «грамотно» субъективно. Предлагаю сразу убрать такие маркеры из обсуждения.

                                А вот зачем специалисту нужна команда, могу сразу ответить. Навскидку:

                                1) Обучение друг друга. В команде нет лишних людей. Каждый знает что-то, чего не знаю (или плохо знают) другие.

                                2) Диверсификация рисков. Одному просадить счет значительно проще, чем всей команде.

                                3) Разделение навыков. Кто-то хорошо умеет искать вменяемых инвесторов (если у вас есть опыт ДУ, то вы понимаете, что не все деньги, что дают, одинаково хороши). Кто-то умеет хорошо координировать действия. Кто-то хорошо анализирует. Кто-то занимается серверами. Кто-то маркет данными. Кто-то оптимизирует комиссии и налогообложение. Кто-то следит за новостями брокеров и бирж.

                                Человек-оркестр быстро выгорит. Плюс нет смысла работать ради работы. У любого психически нормального человека потребность в деньгах только одна — ради себя и своей семьи (близких).

                                Поэтому работа в команде является золотой серединой. Есть плюсы работы «на дядю» (минимальные соц гарантии). И есть плюсы частной работы в виде дележа прибыли (и убытков, конечно же :-) )
                                  • Евгений
                                    04 января 2014, 16:57
                                    SergeyEgorov, значит вы плохо искали.
                                • professor facepalm
                                  04 января 2014, 16:57
                                  Евгений, благодарю за развёрнутый ответ.
                              • Евгений
                                04 января 2014, 16:56
                                SergeyEgorov, если вы такое будете выкладывать, то вряд ли будет изменение интереса к вашей персоне.

                                Писать нужно на своем сайте. С кросс постом тут. Еще лучше свой ЖЖ завести. Писать так же на фейсбуке.

                                Сильно не надейтесь на смарт лаб. Он несколько для другого создан, чем поиск команды.
                      • professor facepalm
                        04 января 2014, 16:38
                        SergeyEgorov, papers — статьи.
                        • Евгений
                          04 января 2014, 16:49
                          facepalm, правильный перевод — труд. Статьи статьям рознь. Что пишется тут, такое и за бесплатно не нужно :-) Разве что 4 fun как пишет Сергей.
                      • Евгений
                        04 января 2014, 16:52
                        SergeyEgorov, тогда я вам советую изучить хорошо американский и азиатский рынки, научиться программам MultiCharts и NinjaTrader и писать-писать на биг майке, линке и фейсбуках. Как и на форумах этих программ. Тогда ваши ценники достаточно быстро обрастут одним нулем в конце с той же самой нагрузкой, что вы делаете для российского рынка.
                          • Евгений
                            04 января 2014, 17:26
                            SergeyEgorov, если вы хотите писать за деньги, то вас это не сильно коснется. Если есть опыт на нашем рынке, то пол года на изучение максимум. Американский рынок к слову совершеннее российского. Поэтому на нем сложнее зарабатывать и его проще понимать. Азиатский сложнее, но все равно это проще, чем наш рынок.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн