Что не так с тестером стратегий в МТ4 и МТ5

chto-ne-tak-s-testerom-strategiy-mt4-i-5

Здравствуйте, коллеги форекс трейдеры!

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

Что такое бэктест

chto-takoe-becktest

О том, как тестировать советник в терминале MT4, а также в терминале МТ5, уже была написана статья в нашем блоге. Поэтому я просто дам определение бэктестирования. Бэктест – это применение правил торговой системы к набору исторических рыночных данных, вот и все. То есть, определили мы набор правил для входа в рынок, для выхода, для сопровождения позиции и расчета ее объема, а затем применили эти правила к историческим данным, как если бы мы по этим правилам в тот момент торговали. Таким образом, мы можем оценить результативность этой системы, которая могла бы быть достигнута в прошлом.

Пожалуй, самая важная, функция тестера – моделирование. Автор алгоритма делает бэктесты, на основании которых он может судить о том, стоит ли дальше совершенствовать форекс советника или взятая им для исследования торговая система не стоит трат времени.

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

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

Основные ошибки при тестировании советников

oshibki-pri-testirovanii-sovetnikov

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

Тестирование только на In-Sample выборке.

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

Смена рыночного цикла

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

Транзакционные расходы

Многие форекс трейдеры, особенно начинающие, не учитывают расходы, связанные с открытием и закрытием позиций. Часто я вижу тесты, сделанные с нереально заниженным спредом, например вместо того, чтобы использовать для теста спред 2-3 пункта по EURUSD, люди берут спред 0,5-1 пункт. В результате получается граальная картинка, которая совершенно не имеет ничего общего с реальностью, ведь то, что ваш брокер в целях саморекламы где-то там указал спред по этой паре 0,5 пункта, еще не значит, что так и есть. Кроме того, многие забывают о такой вещи, как комиссия за сделку. Она есть не на всех типах счетов и не у всех брокеров, но, как правило, там, где низкий спред, она есть, и немаленькая. Также не стоит забывать о таких вещах, как свопы – они тоже искажают результаты тестов и влияют на итоговый результат. Ну и, конечно же, проскальзывания – бич всех пипсовщиков. Если сложить все эти факторы вместе, получается, что торговля – довольно недешевое занятие, и на реальном рынке вы заплатите за открытие сделки 0,5 пунктов спреда + 0,7 пункта комиссии + на 0,3 пункта сделка проскользит при открытии и при закрытии  и в итоге реальные расходы на сделку составят 1,8 пункта.

Подглядывание в будущее

Будущие данные могут быть использованы в тестировании, причем чаще всего из-за ошибок при написании алгоритма, но иногда и из злого умысла. Еще в прошлом году на сайте mql5.com в разделе «маркет» очень модно было продавать советники, подглядывающие в будущее. Гораздо удобнее торговать и показывать феноменальные результаты торговли, если ты знаешь будущее. Но к реальной торговле такие результаты, к сожалению, не имеют никакого отношения.

Ликвидность инструмента

При тестировании на истории можно спокойно скальпировать тысячей лотов и иметь хорошие результаты. Однако в реальной торговле такие объемы неизбежно будут влиять на рынок, даже позиция в 100 лотов в вечернее или ночное время способна двигать цену даже популярных торговых пар, проверено. В тестере это влияние никак не учитывается.

Исторические данные

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

Низкая робастность

Некоторые трейдеры, особенно начинающие, допускают к торговле реальными деньгами системы, обладающие низкой робастностью.  Робастность – это устойчивость системы к изменению входных данных. Например, протестировав  вашу систему с 3 числа этого месяца по сегодняшний день, вы получите хороший результат, но если запустите тест с 4 числа, система уйдет в просадку. Это значит, что система имеет низкую робастность. Еще один пример, когда вы изменили период индикатора, влияющего на вход в рынок, с 9 на 10 и система начала сливать. Большой ошибкой будет допускать такие системы к реальной торговле.

Психология

Как я уже говорил в предыдущей статье, психология в алготрейдинге играет намного меньшую роль, чем при торговле руками. Различные продавцы торговых систем продвигают идею о том, что при торговле роботом про психологию вообще можно забыть. Однако полное игнорирование психологии – еще одна ошибка начинающих трейдеров. Тем не менее, существует ряд торговых систем, которые могут показаться вполне неплохими при тестировании и просто невыносимыми в реальной торговле. Кроме того, как многие ручные трейдеры-новички меняют правила своей торговли на ходу, так и менее опытные алготрейдеры часто тянут свои ручки к уже работающим системам, пытаясь их на ходу «подкручивать». Все это, конечно, приводит к денежным потерям.

Типы тестеров по принципу работы

tipyi-testerov-strategiy

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

Цикличные бэктестеры

Такой тип тестера наиболее прост в реализации и прозрачен в работе. Такой тестер просто перебирает каждый бар один за другим. При поступлении новой цены они производят некоторые вычисления над ценами, рассчитывают индикаторы и позволяют выставлять и модифицировать ордера. Затем происходит следующая итерация, пока тест не будет остановлен. При этом тестером сохраняются некоторые статистические данные работы советника – прибыль, количество сделок, просадка и так далее, а по завершении выдает отчет о тестировании советника. Как вы понимаете, такая конструкция очень проста – нужно всего лишь загрузить исторические данные и перебирать цены строчку за строчкой, производя каждый раз расчеты. Наверняка вам такая концепция покажется знакомой. Все верно, MetaTrader работает именно по такой схеме. Ну, то есть, это не совсем так, так как в языке Mql все же есть некоторые предопределенные события. Так что эта платформа, как и многие другие – представитель скорее смешанного типа.

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

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

Событийно-ориентированные тестеры

Чтобы более наглядно понять принцип работы такого тестера, я предлагаю вам представить компьютерную игру. Игрок постоянно взаимодействует в игровым пространством, само это пространство не является статичным – постоянно что-то происходит, на игрока нападают злобные твари, а дружественные персонажи в это время крошат друг другу черепа топорами из-за бытовой ссоры. Чтобы от обилия происходящего ваш компьютер от вас не сбежал, умные люди придумали все вычисления происходящего поместить в некий бесконечный цикл while, называемый событийной или игровой петлей, внутри которого выстраивается очередь событий. Эти возникающие события постоянно внутри петли по очереди обрабатываются со скоростью, соответствующей мощности вашего компьютера. Применительно к тестеру такими событиями могут быть появления новых торговых сигналов, готовность отправки сообщения брокеру, приход нового тика, получение информации от брокера. Когда появляется конкретное событие, оно обрабатывается соответствующим модулем тестера и, возможно, при этом генерируются новые события, которые снова попадают в очередь событий.

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

Из недостатков такой конструкции можно выделить сложность кода и, соответственно, большое поле для ошибок. Для написания систем потребуется знание объектно-ориентированного программирования и хороший опыт в разработке систем. Еще один существенный минус, связанный с взаимодействием различных модулей тестера – медленная скорость работы. Тестирование, а тем более оптимизация, могут занять довольно продолжительное время.

Терминалы MetaTrader

terminal-metatrader

На страницах блога можно найти обзор терминала MetaTrader4 и даже MetaTrader5. Но в этих статьях, к сожалению, не написано о самом главном: можно ли пользоваться этими терминалами для тестирования и оптимизации ваших советников и насколько можно доверять результатам. Попробуем разобраться в этом вопросе.

Как я уже говорил, профессиональные алготрейдеры не используют терминал MetaTrader в основном по трем причинам: недостаточная гибкость языка для написания советников, низкая точность тестирования и неудовлетворительная скорость тестирования. Компания MetaQuotes создала отличный терминал – простой, удобный. Это отличная стартовая площадка для знакомства с миром алготрейдинга. Очень много в последнее время в платформу было добавлено правильных идей, особенно в пятой версии терминала, но, к сожалению, их реализация сильно подкачала. Например, как люди смогут по достоинству оценить улучшенный тестер, если нет возможности импортировать свои котировки? Или почему люди должны самостоятельно переписывать код своих советников и индикаторов, когда можно было написать простую программу, которая делала бы все это автоматически? Но обо всем по порядку.

Итак, я придумал простую торговую систему, алгоритм которой записал в виде mql4 советника, mql5 советника и в виде тестера с оптимизатором со встроенной той же стратегией на языке R. Сделал я это для того, чтобы прогнать тесты и оптимизацию и сравнить скорость.

Тестирование советника на часовом таймфрейме за последние пятнадцать лет в четвертой версии терминала заняла 20 минут, в пятой – около 5 минут, в тестере на языке R – 13 секунд. Оптимизация пятидесяти тысяч комбинаций параметров этого же советника при тех же условиях в четвертой версии заняла 10 дней, в пятой – всего три дня, на R – 16 минут. Тот же тест на 15 парах одновременно в МТ4 я сделать не смог – это попросту не предусмотрено. Пятая версия справилась за 2 час 27 минут, R за 6 минут. Язык R–далеко не самый быстрый, если бы я написал тестер на языке C#, например, уверен, результаты были бы лучше раз в 10.

Разберем MetaTrader 4

metatrader-4

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

Еще одна серьезная проблема четвертого терминала – невозможность использования тиковых данных. Когда мы торгуем в реальном времени, цены приходят в терминал в различные моменты времени по мере их изменения. Приход цены не привязан к конкретному периоду, например, раз в минуту или час. Исторические данные хранятся в базе котировок терминала в виде OHLC цен различных таймфреймов, например, H1, D1, M15. При тестировании приход новых тиков моделируется на основании таймфрейма M1. Все мы знаем, что объемы, передаваемые брокером, на самом деле совсем не те самые реальные объемы. Это просто количество реальных тиков, которое произошло за определенный отрезок времени. То есть тестер знает цены открытия и закрытия свечи М1, максимальную и минимальную цену за период 1 минута и количество тиков, которое за эту минуту было передано. Какие цены были для этих тиков, когда конкретно пришла цена, соответствующая тику – все это неизвестно. Тестер на основе некоторых алгоритмов придумывает сам, как ходила цена внутри свечи. То есть вот она, та самая упрощенная модель, о которой мы говорили выше. И все же, и эту проблему трейдеры обошли. Есть несколько специальных программ, позволяющих использовать реальные тиковые данные для тестирования и оптимизации. Это бесплатная программа TickstoryLite или платная программа Tick Data Suite.Об особенностях каждой из этих программ вы можете прочесть в статьях выше, но я рекомендовал бы не жадничать и приобрести вторую. Tick Data Suite не только позволяет тестировать советники на тиковых данных, эта программа добавляет в терминал пару замечательных функций, которые просто необходимы: плавающий спред (то есть, по сути, два потока тиков, как в реальности – отдельные Ask и Bid) и отличный, незаменимый для скальпирующих советников стресс тест — эмуляция проскальзывания.

Теперь я должен сказать пару слов про качество моделирования, которое в стандартном терминале не поднимается выше 90%, а при помощи вышеназванных программ становится 99%. Многие из вас постоянно сталкиваются в сети с утверждением, что 90% тесты полный хлам и нужно делать только 99% тесты – вот они совсем точные. Ну, конечно, это не совсем так (вообще, если говорить искренне, любой тест, выполненный на платформе МТ4 или МТ5 пусть и не хлам, но довольно далек от реальности). Итак, что же такое качество моделирования? А это просто цифра, вычисляющаяся по простой формуле, придуманной компанией MetaQuotes:

Качество моделирования = ((0,25х(StartGen-StartBar)+0,5х(StartGenM1- StartGen)+0,9х(HistoryTotal- StartGenM1))/( HistoryTotal- StartBar))х100%, где:

HistoryTotal — количество баров в истории;

StartBar – номер бара, с которого началось моделирование;

StartGen – номер бара, с которого началось тестирование на основе исторических данных ближайшего таймфрейма;

StartGenM1 – номер бара, с которого началось моделирование на основе минуток.

Как видите, качество моделирования просто показывает нам, какие таймфреймы использовались при тесте. Если при тестировании советника на периоде М15 использовались только данные М1, то качество моделирования будет 90%. Если использовался только сам период М15, качество, судя по формуле, будет равно нулю, или, как пишет МТ4, n/a. А при тестировании на тиках просто придумали писать 99%, чтобы было понятно, что все работает нормально и тестирование действительно идет по тикам. Значит ли это, что тестирование с качеством n/a дает совершенно неточные данные, а с качеством 99% — очень точные? Никак нет, это просто значит, что в первом случае использовалась модель по ценам закрытия, а во втором использовались тики. При этом первый тест вполне может быть намного точнее второго и это необходимо понимать: качество моделирования и качество самих котировок – это абсолютно разные вещи.

Что еще важно понимать, так это то, что качество результатов тестирования будет также зависеть от самой используемой стратегии. Например, если стратегия работает на D1 по ценам закрытия без стопов, тейк-профитов и тралов и входит только по рынку, без помощи отложенных ордеров, то вы можете получить вполне точный бэктест, используя модель «контрольные точки».  Для тестов стратегий, использующих стопы и тейки уже как минимум нужно качество 90%, чтобы получить результат, хотя бы немного приближенный к реальности. При этом, чем ниже период, на котором работает советник, тем большее влияние на результаты оказывает спред. При фиксированном значении спреда тесты таких советников будут крайне далеки от реальности, вплоть до того, что прибыльный при тестировании советник будет сливать депозит на реальном счете. Как вы видите, реальное качество теста зависит от многих факторов, таких как качество котировок, характеристики самой системы, а также возможности системы обойти или нивелировать ограничения тестера МТ4. Этот факт еще раз доказывает мою мысль о том, что чтобы прибыльно торговать при помощи советника, вы должны хорошо знать и глубоко понимать, как конкретно он работает, каков его алгоритм, чтобы свести все ограничения терминала к нулю.

Еще одна серьезная проблема, касающаяся использования тиковых данных – это брокерозависимость. Результаты тестов с использованием тиковых данных от одного брокера будут отличаться от результатов с использованием данных другого, так как различия между данными даже цен закрытия различных брокеров могут достигать 10-15% от размеров свечи. В долгосрочном периоде такая разница может привести к очень разным графикам доходности одного и того же советника, работающего на счетах разных брокеров.

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

Новый терминал MetaTrader 5

new-metatrader5

Итак, язык mql5 обладает довольно большими возможностями. Это, несомненно, большой плюс. Минус в том, что эксперты, написанные на языке mql4 в терминале МТ5 работать не будут. Соответственно, желающие пересесть на новый терминал трейдеры, не знакомые с программированием, но жаждущие торговать при помощи советников, успешно торговавших на предыдущей версии терминала, вынуждены заказывать перевод за деньги. Догадайтесь, где с большей вероятностью люди будут искать таких программистов? Правильно, в разделе «Фриланс» на сайте все той же компании MetaQuotes, которая получает комиссию с каждого заказа, каждого проданного советника и индикатора и еще много за что. Это бизнес, ничего личного.

Большой плюс терминала по сравнению с предыдущей версией – использование нескольких ядер. Делается это при помощи менеджера агентов тестирования. При этом вы можете задействовать любое количество ядер. Также вы можете создать целую сеть из ваших компьютеров для использования их совокупной мощности в целях тестирования и оптимизации экспертов на «основной» машине или даже воспользоваться облачной сетью, в которой за умеренную плату свои мощности предоставляют другие трейдеры. Захватывающая идея, на деле прирост производительности при использовании этой сети оказался примерно трехкратным. При этом очень здорово все зависит от скорости интернет соединения и прочих факторов. Создать собственную сеть я тоже пробовал, но компьютеры постоянно дисконнектились и это скорее раздражало, чем помогало.

И еще одно наблюдение, касаемо МТ5. Тесты на пятой платформе очень похожи на тесты с четвертой, но всегда получаются прилично лучше, чем на МТ4. Скорее всего, дело тут в немного отличающихся котировках.

Общие проблемы

obshhie-problemyi-testerov-foreks

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

Что творится в самом тестере во время тестирования и оптимизации, что так сильно тормозит весь процесс? Я не знаю. Не знает никто, кроме программистов, которые писали терминал, ведь код закрыт и глянуть, как на самом деле там все рассчитывается, не представляется возможным. В то же время в случае с самописным тестером я точно знаю, что происходит, что откуда берется и как рассчитывается. И самое главное – насколько надежен мой бэктест.

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

Самый печальный недостаток терминалов MT4 и MT5 в том, что нельзя проводить тесты на нескольких инструментах с целью получить сводный отчет по торговле портфелем советников. Поэтому приходится пользоваться сторонним софтом, таким, как Report Manager или SQ EA Analyzer. Несмотря на то, что первая программа бесплатна, я рекомендую приобрести второй вариант из-за гораздо более широких и крайне необходимых возможностей.

Оба терминала используют только один поток котировок – по Bid. При этом котировки Ask вычисляются, исходя из заданного спреда (Bid + Spread). И получается, что график цен Ask полностью совпадает с графиком цен Bid, что в реальности, конечно же, далеко не так. Спред постоянно изменяется, и если вы посмотрите на тиковый график в терминале, то увидите, что графики Bid и Ask далеко не всегда выглядят один в один. Это – еще одно упрощение. К чему же оно приводит? Ну, например, для советников, торгующих на периоде от Н1 и выше пара пунктов погрешности лет этак за 15 даст неточность итоговой прибыли в районе плюс минус 3-10% — терпимо. Но для скальперов такая неточность может вылиться в погрешность до 50%. Так же опасна такая ситуация и для советников, работающих с отложками. Фиксированный спред приводит к тому, что результаты тестов таких советников очень далеки от реальности, ведь на тесте, например, убыточная сделка может быть пропущена, а в реале она будет присутствовать, так как спред именно в тот момент в реальности составлял 3 пункта, а не 2, как было задано для теста. Или наоборот, многих прибыльных в тестере сделок могло не случиться в реальности.

Еще один, не слишком серьезный недостаток, но все же влияющий на точность теста – расчет стоимости пункта для кроссов, которая вычисляется по следующей формуле: Цена пункта = объем позиции * размер пункта * текущая котировка базовой валюты по отношению к USD / текущий курс валютной пары (кросс-курс). Котировки базовой валюты и курс пары берутся тестером на сегодняшний день и эта стоимость используется на протяжение всего теста. Но ведь 20 или даже 5 лет назад обе цены были другими и, соответственно, стоимость пункта была тоже другой. Это не такой страшный недостаток – если бот сливает, он сольет с любой стоимостью пункта. В этом случае речь только о том, что итоговые результаты теста неточны.

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

Чуть выше я упоминал программу EA Analyzer. В ней предусмотрен ряд различных стресс тестов, призванных помочь лучше оценить последствия применения ваших советников на реальном счете. Например, симуляция Монте-Карло позволит вам с определенной долей вероятности оценить худший сценарий работы советника и, если он вас устраивает, приступить к работе. В профессиональных терминалах этот стресс тест встроен, также, как и многие другие, например, тесты на робастность настроек советника, брокерозависимость или спредозависимость. В прошлой статье я говорил, что роботы не предсказывают будущее, мы можем только на основании тестов получить определенную вероятность того, что советник принесет нам профит. Стресс тесты — очень важные инструменты для работы, ведь чем тщательнее будет происходить проверка робота, тем больше вероятности, что он будет работать также, как работал на исторических данных.

Еще один фактор, влияющий на точность теста – величина свопа. В тестере МТ4 и МТ5 берется текущая величина свопа для всего теста, хотя сам своп в реальности, несомненно, изменяется. Причем чуть ли по несколько раз в году. Забавно, но у разных брокеров величины свопов на один и тот же инструмент могут кардинально различаться. Например, у брокера RoboForex на данный момент своп по паре usdchf для шортов составляет -2,5 пункта, а для покупок -1,4 пункта. В то же время у Forex4u эти цифры составляют -5,5 и +2,4 пункта. В случае, если вы тестируете ночного скальпера, своп может сыграть решающую роль как в прибыльности бэктеста, так и непосредственно самой торговли. При этом вы не сможете реально оценить влияние величины свопа на торговлю – ни задать, ни тем более изменять в процессе тестирования эту величину нельзя – она берется непосредственно из данных брокера, счет которого на данный момент активен в терминале.

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

Ну и напоследок давайте обсудим использование времени в платформе МТ4. В языке mql есть множество функций, которые используют время в привязке к ценам конкретной свечи, например, Open[1] или High[7]. В большинстве случаев при написании торговых алгоритмов мы так или иначе используем эти данные. При этом эти данные никак не привязаны к конкретному времени брокера, они привязаны к новым тикам. Допустим, мы используем период Н1. При приходе нового часа, в случае, если тиков в этот момент не пришло, новая свеча появляется в виде черточки, пока не начнут приходить новые тики. При этом час уже сменился, но пока новых тиков нет, тот же Close[1] фактически становится Close[2]. То есть в реальности получается, что если советник использует время в виде Hour() и получает цены свечей с помощью Close[1], Open[1], High[1] и Low[1], он получит сигнал в нужный час, но OHLC цены в это время еще не будут обновлены, так как новых тиков пока не пришло, то есть цены бара №1 будут фактически ценами второго бара. Поэтому в этом случае нужно, чтобы алгоритм дожидался появления первых тиков новой свечи. Заметьте, что это касается только советников, которые используют конкретное время входа и ценовые вычисления. Если для входа свечи не используются, такой ошибки не возникнет.

Так что выбрать – зависимую или независимую платформу?

platforma

Для тех трейдеров, которые заинтересованы в разработке скальпирующих торговых систем, работающих на периодах до М5, MetaTrader однозначно не подойдет. Даже при использовании 99% качества моделирования результаты все еще будут сильно отличаться от реальных (хотя и можно добиться более менее некоего подобия). На самом деле в терминале МТ4 довольно легко сделать грааль, но в реальности он, скорее всего, работать не будет. Любой рыночный аспект, игнорируемый при тесте, может привести к кардинально противоположным тесту результатам.

Я не хочу сказать, что прибыльного в долгосрочной перспективе скальпера создать в МТ4 нереально. Просто это сделать намного сложнее, чем, скажем, прибыльного долгосрочника. Поэтому, если вы пока слабо знакомы с алготрейдингом, я рекомендую начать создавать советников для работы на периодах не ниже Н1, а уже затем попытаться создать портфель прибыльных скальперов.

Важно понимать, что такие коммерческие платформы, как MetaTrader, MetaStock, TradeStation, NinjaTrader и прочие – это ни в коем случае не профессиональные платформы. Каждая из таких платформ содержит свои ограничения, а закрытый исходный код приводит к тому, что далеко не все из этих ограничений легко и вообще возможно обнаружить. Вообще первая идея, которая приходит в голову трейдеру, желающему применять советники для торговли, — использовать коммерческую платформу, одну из вышеперечисленных, например. В ней уже все предусмотрено – и тестирование, и оптимизация, и сама торговля. Все удобно и просто, в одной упаковке. Но такое решение делает трейдера зависимым от выбранной платформы и ее разработчиков, от того, какой функционал авторы пожелают добавить, а какой нет, а также от совершенных ими при разработке ошибок и неточностей, со многими из которых ничего поделать нельзя. При этом коммерческие платформы дают трейдеру некий базовый функционал. Но если вы хотите заняться высокочастотной торговлей, например, такие платформы вам уже не подойдут.

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

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

Заключение

daily_picdump_2127_640_94

Ну а пока у вас на счету нет хотя бы одного десятка миллионов долларов (именно начиная с этого порога не встретить ни одного трейдера, использующего для торговли коммерческий продукт), нет ничего плохого в том, чтобы использовать уже готовую платформу, вроде MetaTrader 4. Просто при этом важно всегда помнить об ее ограничениях, учитывать их в своей работе и быть внимательным, критично относиться к получаемым в тестере результатам. Торгуйте так, как вам позволяет ваш терминал и старайтесь создавать советников, имеющих «иммунитет» к его недостаткам, используйте сторонние программы для минимизации недостатков терминала, такие, как TickDataSuite и SQ EA Analyzer, и тогда, даже используя такой несовершенный продукт, как МТ4, вы все равно будете получать свою прибыль с рынка.

С уважением, Дмитрий аkа Silentspec
TradeLikeaPro.ru

В помощь Трейдеру , , , , ,
  • Silentspec

    Первый!

  • Kirill Davydov

    Спасибо, Дмитрий!! Как всегда фундаментально!)

  • Timo

    Отличная статья. Все доходчиво изложено. Для задействования всех ядер можно попробовать CPU-control. Мне при моделировании на основной работе помогает. Еще было бы интересно узнать если кто знает как подключить Matlab к метатрейдеру для оптимизации советников. Там огромнейший потенциал возможностей.

    • Silentspec

      Расскажу попозже

  • Buhalichfx

    Хорошая статья в целом.
    Но, при всём уважении, некторые проблемы высосаны из пальца.
    Проблема со спредом решается просто — ставим спред 2-3 пункта))….
    Тестирование на тиках — это в принципе абсурд. При создании стратегии вы смотрите на свечной графиК, а никак не на тиковый. Система проводит анализ свечного графика, а не тиков. Надо писать советники, работающие на открытии свечей — и нет проблемы с тиками. И скорость тестирования возрастает на 2-3 порядка.
    У меня все советники работают в тестере точно так же, как в реале.

    Конечно, это не отменяет проблемы робастности, переоптимизации и т.д….. но это не ведёт к различию результатов теста и реальной торговли.

    • Silentspec

      Как вы решите проблему со спредом при работе отложенными ордерами, когда, если спред в тестере будет меньше или больше, чем в реальности в конкретный момент, на 0,1-0,3 пункта, отложка либо активируется, либо не активируется, то есть будет вести себя по разному (то же самое с тейками и стопами)?
      Работа с тиками и тиковым графиком — это не абсурд, а удел профессионалов. Ваш призыв работать со свечами — это не что иное, как обход очередного ограничения тестера. Но что, если я не хочу работать по свечным графикам, что если моя стратегия предполагает использование тиков, что если я хочу сделать hft скальпера? Тоже ориентироваться на свечи? Да, «надо писать советники, работающие на открытии свечного графика», используя мт4, но это же нездоровая ситуация. Это ограничение терминала. Работая по тикам, можно добиться гораздо более интересных результатов и доходности. А нам, как трейдерам, в первую очередь именно она и интересна. А нас мт4 как раз в этом ограничивает.
      Это не ведет к различию между тестами и реалом, только в случае советника, полностью работающего по закрытиям свечей — без стопов и тейков, вход и выход на открытии новой свечи, четко. Но даже такого не бывает 100%, так как не факт, что на реале при открытии новой свечи придут новые тики, чаше они приходят чуток попозже.
      Если вы говорите, что работа ваших советников полностью совпадает с тестером, я вам не верю. Чтобы подтвердить свои слова, скиньте скрин с результатами сделок на реале в мониторинге и тестере.

      • Buhalichfx

        Согласен, всегда можно написать советника, который даже по ценам открытия будет вести себя неадекватно….. если задаться такой целью. Я отлично понимаю недостатки тестера, и как вы правильно заметили, пытаюсь их нивелировать за счёт алгоритма советника. Конечно, про htf речь не идёт.
        Говорите, тейк или стоп не сработает из-за отличия спреда на 0.1 пункт. Да, такое будет случаться для 1 сделки из 100. Если это ведёт к сливу — значит советник говно)….
        В остальном, все отложки и цели, оказавшиеся внутри свечи, сработают однозначно. Пусть спред меняется от 0.5 до 10 пунктов в течение дня, при большой выборке результат будет соответствовать среднему спреду 2-3 пункта.
        Про тики вы меня не поняли. Пускай у нас есть тестер со 100% качеством моделирования тиков, вообще идеальный тестер. Это не означает, что можно в алгоритме использовать тики (речь о стандартном среднесрочнике). Я вообще назвал бы это одной из основных ошибок новичков. Если при разработке стратегии не использовались тики (а если вы не пялитесь на тиковый график, значит не используете тики), нельзя допускать влияние тиков на работу советника. Это элементарное нарушение торговой стратегии.
        Вы говорите «что если моя стратегия предполагает использование тиков». Тогда конечно. WOC, Puma и прочие без тиков никуда. Отличные системы, чтобы барыжить на маркете)…. Но я не верю в hft на форекс. Учавствовал когда-то в проекте htf на РТС, там результаты были интересные на тестах. А на реале конечно сели в лужу, когда ликвидность паршивая даже при маленьких объёмах.

      • silentspec

        Вы меня тоже не совсем правильно поняли. Я говорил про ограничения. Чтобы правильно тестировать, это все нужно знать. Хотя бы для того, что бы не получать тиковые граали. Верно?
        Ну а по поводу спреда… Да, его влияние на результаты сова, работающего на Н1, минимальны (хотя все равно есть). А если сов на М15? разница может быть большая.
        А основная идея статьи о том, что нет идеальных инструментов, и что нужно знать ограничения тех инструментов, которыми работаешь. Молотком можно и шуруп забить, но какой будет результат?

  • Андрей

    Publisher: error when building the report при заходе в мт4 и нет связи и ошибка что делать?

    • Silentspec

      переустановить терминал

  • Alexey

    я так понимаю что метаквотс решило срубить капусты запустив мт5 вместо того что бы нормально разрабатывать мт4

    • Да.
      Лицензия мт5 стоит 200 тысяч $, а мт4 — от 100 тысяч $.
      Понятное дело, что мт5 им продвигать выгоднее.

  • Игорь Еременко

    Спасибо за полезную статьи. Может уже существуют профессиальные программы-тестеры (если да, то какие), без привязки к торговому терминалу. Например Wealth Lab (его вообще не упомянули)

  • Истрат

    Спасибо, Дмитрий!
    Очень обстоятельная статья. Каким же путём лучше идти для тестирования мульти валютных портфелей?

  • konforex

    Кто подскажет? Советник использует индикаторы на нескольких таймфреймах: 5, 30, 60 минут. Сам советник стоит на 5-минутном ТФ.
    На каком ТФ его нужно правильно тестировать?

    • Buhalichfx

      Он же работает на М5, значит и тестировать надо на М5. Старшие ТФ при вызове индикаторов прописаны в явном виде, а про М5 вы наверняка не знаете, там может быть прописан текущий ТФ….

    • Игорь Еременко

      попробуйте на разных, разницы быть не должно

  • serg

    Скорее всего, те тестеры, которые якобы быстрые, не используют тиковые данные, а тестируют только на M1. Прочитать несколько ГБ тиковых данных за несколько секунд — вряд ли возможно.

    Так что же всё-таки использовать, вместо MT?