jpg.jpg.optimal.jpg 🤖🤖 Тестирование и оптимизация являются важными этапами разработки и усовершенствования торгового робота. Вот обзор тестирования и оптимизации в контексте торгового робота: 👉 1. Тестирование: Тестирование предполагает проверку торговой стратегии с использованием исторических рыночных данных для оценки ее производительности. Оно позволяет трейдерам симулировать, как робот для торговли вел бы себя в прошлом в различных рыночных условиях. Процесс включает следующие шаги: 🤓 A. Выбор данных: Выберите соответствующие и качественные исторические рыночные данные, соответствующие заданной торговой стратегии и временному интервалу. 🤓 B. Реализация стратегии: Запрограммируйте торговую стратегию в робота, включая правила входа и выхода, размер позиции, уровни стоп-лосс и тейк-профита, а также любые другие соответствующие параметры. 🤓 C. Симуляция: Примените торговую стратегию к историческим данным, симулируя сделки на основе правил и логики робота. Отслеживайте результаты, включая исходы сделок, прибыль/убыток, просадки и другие соответствующие показатели. 🤓 D. Оценка производительности: Проанализируйте результаты тестирования, чтобы оценить прибыльность, риск и общую производительность торговой стратегии. Рассмотрите такие показатели, как общий доход, процент успешных сделок, максимальная просадка, отношение доходности к риску и другие соответствующие статистики. 🤓 E. Усовершенствование и итерация: Используйте полученные в результате тестирования знания, чтобы улучшить торговую стратегию. Внесите корректировки в параметры, измените правила или исследуйте альтернативные подходы для улучшения производительности стратегии. 👉 2. Оптимизация: Оптимизация предполагает точную настройку параметров торговой стратегии для максимизации ее производительности на основе исторических данных. Целью является поиск оптимальных значений для конкретных параметров, обеспечивающих лучшие результаты. Процесс оптимизации обычно включает следующие шаги: 🤓 A. Выбор параметров: Определите параметры торговой стратегии, которые можно настроить или оптимизировать. Это могут быть индикаторы, пороговые значения, временные периоды или любые другие переменные, влияющие на поведение стратегии. 🤓 B. Определение диапазона параметров: Определите диапазон значений, которые каждый параметр может принимать в процессе оптимизации. Учтите как минимальные, так и максимальные значения, а также шаги изменения параметров. 🤓 C. Метод оптимизации: Выберите метод или алгоритм оптимизации для систематического исследования пространства параметров и поиска оптимальной комбинации. Распространенные подходы включают поиск по сетке, генетические алгоритмы или оптимизацию роя частиц. 🤓 D. Оценка производительности: Оцените производительность торговой стратегии для каждого набора значений параметров в процессе оптимизации. Это обычно делается с помощью показателей прибыли/убытка, отношения доходности к риску или других показателей производительности, определенных трейдером. 🤓 E. Выбор оптимальных параметров: Определите значения параметров, которые обеспечивают лучшие результаты на основе выбранного показателя производительности. Эти значения представляют собой оптимальную конфигурацию торговой стратегии. 🤓 F. Проверка: Проверьте оптимизированную стратегию с использованием дополнительных данных или прямого тестирования на исторических данных, чтобы убедиться в ее устойчивости и эффективности в условиях реального времени. ⚡️⚡️Путем тщательного тестирования и оптимизации трейдеры могут получить представление о исторической производительности своего торгового робота, усовершенствовать параметры стратегии и увеличить вероятность достижения благоприятных результатов при живой торговле. Это помогает выявить сильные и слабые стороны, обнаружить закономерности и настроить поведение робота в соответствии с целями трейдера и рыночными условиями.
Спасти скальпера или тестирование на Full Orders Log. Скальпинг - это стратегия, подразумевающая быстрый вход на импульсе, снятие прибыли(скальпа трендового движения) и выход, до момента возврата цены к средней. Инструментами рядового скальпера являются стакан, скальперский привод, а также (поводыри) западные индексы и природные ресурсы от которых зачастую зависят цены базового актива, и в следствии цены на фьючерсы, которыми скальперы и торгую. Это знают все. У меня есть свое мнение на эту тему, так как лично я и сам торговал в пропе. Инструментами правильного скальпера должны стать не привод и не поводыри, они пригодятся - это само собой, но главным объектом внимания, любого трейдера должны стать не графики, или приводы - а исследования рынка. Обратите внимание на засилье различных курсов по скальпингу в последнее время. Такие курсы зачастую предоставляют помимо базовых принципов, стартегии, которые уже не работают, или перестанут работать в ближайшее время, потому что на таких маленьких таймфреймах - рынок меняется намного быстрее, чем, например на часовках. А самые безбашенные авторы и вообще не проводили никаких изысканий в этой области. Я призываю трейдеров, которые собираются пройти один из таких курсов, какие бы копейки он не стоил - \"научиться ловить рыбу самим\" вместо того, чтобы брать ее непонятно у кого и непонятно какого качества! Но, ближе к делу! Каким инструментарием может пользоваться новоявленный исследователь: Инструменты для исследовательской работы Excel - это очень полезная программа и я лично ей пользуюсь, но исключительно, как дополнение к более продвинутому софту. Я знал людей, которые пробовали даже тестировать стратегии в Excel.. Мое мнение - это не серьезно, не понимаю, как в нем можно протестировать какую-то стратегию, но как помощник - самое то! Мат-lab - это профессиональный инструмент математиков, как и excel он платен , но лицензия на него стоит не дешево. На нем можно тестировать все что угодно, были бы данные. И стратегии на индикаторах и мани-менеджмент. Однако из-за его дороговизны, необходимости изучать еще один язык программирования и нужды прописывать все что уже и так есть в системах для тестирования стратегий, считаю такие усилия неоправданными. Лично я использую его, когда не хватает функционала у Excel, для расчетов. Wealth и подобные программы, специально созданные для тестирования стратегий. Я пробовал тестировать тиковые стратегии. Мне есть что написать по этому поводу: - Тики можно сжать до любых свечек, 2-10 или 47 секундных. Здесь мы уже можем подсчитать проскальзывание и комиссию. Проблема в том, что такого медленного тестирования вам не захочется. Когда программа сжимает тики и без того медленное тестирование превращается в 5-ти дневное ожидание, когда за час до окончания теста у Вас или перегревается компьютер, или один маленький перепад напряжения и все тесты насмарку, а они ведь могут оказаться и отрицательными! - Часто наши любимые, в иных случаях программы, Wealth-lab и т.д., начинают тормозить и подвисать. Конечно, вам нужны достаточно хороший компьютер, но я говорю про ситуации даже когда у Вас больше 16GB оперативной памяти. - Это все еще тестирование на свечках. Это значит, что мы не видим стакан. А для скальпера - это критично! Программа не видит, как \"живет\" рынок. И это еще одна причина по которой скептики отказываются от исследований. - Тиковых данных по фьючерсу на индекс РТС когда я его тестировал, в блокнот у меня помещалось только 3 месяца сделок. Их нужно было скачать по одному дню(только так, по-другому никак ее было скачать нельзя ), затем самостоятельно склеить. StockSharp - я узнал об этом способе проведения исследований от человека, которые предоставлял такие курсы по скальпингу, про которые я писал в начале. Оказалось, что он тестирует скальперские стратегии в StockSharp, но не на свечках а на ордер логе. Full orders log — это список всех заявок с полной информацией по каждой заявке. Еще его называют анонимным ордер логом (анонимная рыночная информация), т.к. из всей информации о заявке в нем не доступен только номер счета клиента, пославшую эту заявку. Как вы понимаете, эта информация конфиденциальна. Ордер лог, это самый глубокий и детальный уровень информации, который доступен трейдеру. Источник Тестирование на ордер логе, тоже не является панацеей, рынок все также меняется, а тестирование все такое же медленное. Но ничего лучше еще не придумали, здесь мы получаем всю полноту информации, тестирование на стакане, а стакан для скальпера - самое важное. Также, пользуясь инструментарием StockSharp можно скачать ордер лог, или тиковые данные и уже из них создать свечки любого тайм-фрейма! Для чего нам это нужно? Когда нам не приходится сжимать тики в 10-ти секундные свечки в самом Wealth-lab - тестирование проходит намного быстрее и сама программа \"чувствует\" себя лучше, не тормозит и не зависает. Поэтому кому не нужно супер точное тестирование - этот вариант для вас! Главное уделять внимание исследовательской работе и ваши результаты улучшаться! Ресурсы для проведения исследования Качественные данные. Есть 2 новости хорошая и плохая. Плохая - то что скорее всего данные ордер лога вам найти не удастся. Качественные данные можно, конечно купить напрямую у RTS - но это будет неоправданно дорого.Хорошая новость заключается в том, что для тестирования скальперских стратегий много истории не нужно. подключение плаза - это обязательное условие скальпинга, так что считаем, что оно у нас есть по определению. Так что, ничего нам не мешает записать ордер лог с плазы. Особенно радует тот факт, что к плазе можно подключить одновременно и программу для записи ордер лога и скальперский привод. Так что можем и торговать и записывать данные одновременно. Софт для записи называется S#.Data. Единственным его назначением является записывать данные сохранять их в специальном формате и преобразовывать одни данные в другие. Благодаря ему, из ордер лога можно вытащить и стаканы и тиковые данные, из тиковых данных можно сделать свечки любого таймфрейма. Ордер лог - самый полный пакет данных, поэтому кроме как записью с плазы получить синтезировать его никак нельзя. Также, можно записать сделки и стаканы с обычного Quik, но они будут рассинхронизированы, а для скальперов - стакан имеет важное, если не первостепенное значение. Тестирование без стакана возможно, но оно более грубое и лишено важных преимуществ. S#.Data выглядит вот так: S#.Data Порядок действий для записи лога заявок Как пользоваться S#.Data: Как пользоваться S#.Data Как создать инструмент: Как создать инструмент Как настроить плазу: Как настроить плазу Как запустить приложение: Запустить приложение Тестер стратегий. Когда вы записали данные считайте, что половину дела вы уже сделали. Осталось всего-навсего написать свой привод для тестирования и саму стратегию. =) Под меня написанный тестер, он простой, без визуализации, специально под тот шаблон стратегий, к которому я привык. Статистика в динамике выгружается автоматически в Excel. Здесь я взял шаблон, что давали, на обучении и пользуюсь им практически без его доработки. Он симпатичен на вид и есть графики эквити и проскальзывания. Шаблон тестера выглядит так. Шаблон тестера стратегий Для примера взял трендовую стратегию пробоя полос Боллинджера. Визуальное представление стратегии С точки зрения самого процесса, тестирование на ордер логе практически ничем не отличается от обычного, главное не забыть вписать: Trader.RegisterOrderLog(security); Регистрируем Ордер лог UseOrderLog = true, Использовать Ордер лог Условия тестирования: Условия тестирования Почему я не учитываю комиссию. Все просто, частенько приходится тестировать стратегии, для которых наиболее выгодным вариантом будет Fix комиссия. Такую услугу предлагает практически каждый брокер, но цены разные, поэтому просто вычитаю ее из прибыли. В любом случае, вы можете посчитать комиссию, как общее количество закрывающих сделок умножить на вашу нынешнюю комиссию на круг и вычесть ее из общего результата . Хотя данная \"стратегия\" всего лишь пример - это не готовая стратегия, которую можно было бы торговать. Статистика и эквити протестированной нами стратегии с 15-ого по 25-ое января 2013, в расчете на 1 контракт. Результаты тестирования стратегии Просадки впечатляют, но положительное мат. ожидание - на лицо. Проскальзывание - 0, потому что и на вход и на выход использовалось лимитное котирование. Время. Как я писал ранее, тестирование на ордер логе требует больше времени, из-за того что оно в точности повторяет все события, происходящие на рынке. Лично я решил для себя эту проблему, используя несколько компьютеров для тестирования. Также, я использую методику, которая называется тестирование под управлением пользователя. По сути это ручная генетическая оптимизация. Такой подход экономит машинное время, но мне приходится тратить больше моего личного времени на проведение оптимизации. Также я часто использую прикидочные тесты в Wealth-lab. Для того, чтобы результаты тестирования в Wealth-la были близки к тестам в StockSharp при входах, например котированием, нужно использовать специальный компоненты EnterAtPrice и ExitAtPrice. С помощью них, входы происходят по точно определенной цене на том баре, который мы укажем. Ориентировочно по этим ценам мы и войдем в рынок котированием. Эти компоненты позволяют нам тестировать входы на а не на , что намного точнее. Тестируйте свои стратегии, проверяйте по 3 раза код, чтобы не переделывать тесты! Пользуйтесь только лучшими инструментами, будьте исследователями, но не забывайте торговать! Код стратегии: namespace BollingerTrendStrategy { using System; using Ecng.Common; using Ecng.ComponentModel; using Stops; using StockSharp.Algo; using StockSharp.Algo.Candles; using StockSharp.Algo.Indicators; using StockSharp.Algo.Indicators.Trend; using StockSharp.Algo.Strategies; using StockSharp.BusinessEntities; using StockSharp.Algo.Candles.Compression; using StockSharp.Algo.Indicators; using StockSharp.Algo.Indicators.Misc; using StockSharp.Algo.Indicators.Trend; /// /// Стратегия по полосам Болинджера, пробойная. /// internal class BollingerTrendStrategy : Strategy { private BollingerBands _bands; private CandleSeries _series; /// /// Событие отрисовки новой свечки и значения индикатора. /// public event Action Draw; protected override void OnStarted() { //создаем серию свечек и индикатор this._series = Security.TimeFrame(TimeSpan.FromSeconds(60)); this._bands = new BollingerBands { Length = 64 }; //указываем период, за который должны формироваться свечки для данной серии this._series.WorkingTime = new WorkingTime { Times = new { new Range(TimeSpan.FromHours(10), TimeSpan.FromHours(19)), } }; //подписываемся на событие окончания формирования свечек по серии //а так же на событие изменения свечек, чтобы можно было перерисовывать график в реалтайм режиме this._series .WhenCandlesFinished() .Do(Process) .Apply(this); //запускаем процесс формирования свечек this .GetCandleManager() .Start(this._series); base.OnStarted(); } /// /// Основной алгоритм. /// /// Свечка. private void Process(Candle candle) { //пересчитать значение индикатора для новой свечки this._bands.Process(candle); //вызываем событие отрисовки свечки и индикатора на графике this.Draw.SafeInvoke(candle, this._bands); //если состояние свечки не Finished, значит сработало событие //изменения свечки и нет необходимости принимать решение о входе или выходе из позиции if (candle.State != CandleStates.Finished) return; //получаем таймфрейм свечек var timeFrame = (TimeSpan)this._series.Arg; //получаем время начала последней свечки с учетом текущего времени var time = timeFrame.GetCandleBounds(Security).Min - timeFrame; bool SignalLong; //Переменная для входа в лонг bool SignalShort; //Переменная для входа в шорт SignalLong = candle.ClosePrice \u003e this._bands.UpBand.GetCurrentValue(); SignalLong \u0026= Position=0; if (this._bands.IsFormed) { //При пробитии канала нет открытой позиции или открыта длинная позиция - Long, предварительно продав if (SignalLong \u0026\u0026 doNotEnter \u003e Security.GetMarketTime().TimeOfDay \u0026\u0026 Security.GetMarketTime().TimeOfDay \u003e isItMorning) { if (Position == 1) { //sell ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Sell, 1,_bands.UpBand.GetCurrentValue())); //RegisterOrder(this.SellAtMarket()); } if (ChildStrategies.Count == 0) { //RegisterOrder(this.BuyAtMarket()); ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Buy, 1, _bands.UpBand.GetCurrentValue())); } } //При пробитии канала нет открытой позиции или открыта короткая позиция - Short, предварительно откупив if (SignalShort \u0026\u0026 doNotEnter \u003eSecurity.GetMarketTime().TimeOfDay \u0026\u0026 Security.GetMarketTime().TimeOfDay \u003e isItMorning) { if (Position == -1) { //buy ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Buy, 1,_bands.LowBand.GetCurrentValue())); //RegisterOrder(this.BuyAtMarket()); } if (ChildStrategies.Count == 0) { //sell ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Sell, 1, _bands.LowBand.GetCurrentValue())); //RegisterOrder(this.SellAtMarket()); } } } } } } Спасибо за внимание!