Некоторые индикаторы в тестах выдают значения «из будущего». Это значит что в тесте история в будущем нам заранее известна и текущий бар будет рисовать индикатор, основываясь на будущих барах. На самом же деле этот индикатор отрисуется спустя некоторое количество баров после него. Как пример, возьмём индикаторы Fractal и ZigZag.
Иногда новички неверно пишут формулы, где указывают значения бара [i+1]. Это ошибка! Таким образом, в последовательности можно выбирать только предыдущие бары от [i-1] и далее. При этом текущий бар отмечать как [i] не нужно. — пример для TSLab
Проскальзывание может сделать прибыльный торговый робот убыточным в реальных торгах. Это важно помнить. Учесть проскальзывание в полной мере невозможно, но следует применять подходы, которые смогут дать более реалистичную картинку.
В блок комиссии следует добавить проскальзывание на каждую сделку. Обычно я добавляю к комиссии биржи и брокера еще как минимум двухкратное проскальзывание, а для пробойных систем — четырехкратное проскальзывание.
К примеру, на Si комиссия 1 руб биржевая + 1 руб брокера = 2 руб. Прибавим двухкратное проскальзывание 2*2=4. Итого 6 руб. Если это пробойный алгоритм, то берем 2+2*4=10 руб. На RTS обычно ставлю 20-40 п.
Не забывайте, также, что с октября 2016 г комиссия на срочном рынке считается в процентах от стоимости контракта. Таким образом, на Si уже можно считать 0,006% на сделку, как минимум.
Если в вашей стратегии возможен вход на открытии рынка, на первом баре, то там получить реальную цену в тестах невозможно даже с учетом заданного проскальзывания. По-этому следует убирать вход на первой минуте вообще. Либо отлючаем первый бар в условии входа, либо используем сжатие из 1м в ваш торговый тайм-фрейм и также отключаем 1 бар.
Для этого берем блок Время в минутах (time) и в логические формулы условия входа пишем time>=100000. То есть входим как только закрылся первый бар 100000.
Когда вы делаете пробойный алгоритм и блок входа используется Открытие позиции если больше, то учитывайте что цена входа в реальности будет не такая, как в тесте. Как правило, она хуже на величину проскальзывания. Отсюда следует, что и все параметры (стоп, тэйк) будут рассчитаны из фактической цены входа.
Например, мы входим в лонг на пробой цены 65000 п, стоп получили из оптимизации 100 п. В тесте, после пробоя, мы входим по 65000 п, после чего цена делает ретест и ныряет до 64910 п, после чего идет наверх. В реальности же мы получаем цену входа с проскальзыванием 65012 п и стоп стоит 64912 п. Нас выбило, цена ушла без нас.
Поэтому, при расчете стопа желательно брать блок Цена входа (расчетная), либо в блоке открытия позиции указывать максимальное проскальзывание на вход, а к результату оптимизации параметра прибавлять данное проскальзывание, то есть увеличивать стоп на эту величину.
Есть так же более продвинутый вариант. Мы будем искусственно ухудшать цену входа. К сигнальной цене будем прибавлять определенный процент размера пробойного бара. Если большой бар, резкое движение, то проскальзывание тоже будет большое. Далее все параметры считаются от этой цены и мы получим приближенный к реальности тест и параметры. Подробно реализации рассматривать не будем, это вам домашнее задание.
Когда вы тестируете алгоритм на котировках, скачанных с Финам или других источников, удостоверьтесь что правильно их скачали и загрузили в программу. Как это сделать написано в FAQ .
При тесте не забывайте о том, что в момент перехода с одного фьючерса на другой, есть гэп в склейке, в Финам это 9 число месяца экспирации. Такие дни нужно вырезать из торговли, иначе результаты будут ошибочными. Сделать это можно блоком «Склейка». Скачать его можно по ссылке.
К данному пункту можно отнести другую ошибку новичков — использование мелких таймфреймов. Получение множество мелких сделок могут создать иллюзию ровного графика доходности, но такая стратегия будет сливать, если заложить в нее реальное проскальзывание. Данное замечание не относится к стратегиям, где вход и выход происходят лимитными заявками, без проскальзывания.
По поводу накладных расходов. Давайте посчитаем. На текущий момент TSLab стоит около 3000 руб в месяц. Еще вам понадобится надежный VDS сервер, это еще 600-700 руб. Брокеру вы также можете платить 200 руб за обслуживание счета. А еще 13% налог государству. Теперь сложите эти расходы и посчитайте сколько вам нужно зарабатывать чтобы покрыть их. По грубым расчетам, имея счет в 100 000 руб вы просто не сможете вытягивать счет в плюс — всю прибыль, если она будет, скушают накладные расходы.
Вмешательство руками в работу алгоритма. Представьте себе ситуацию. Робота «пилит» 2 недели, эквити красная и вот началось резкое направленное движение, на счете рисуется прибыль. Алготрейдер тут же нажимает Выполнить по рынку в Менеджере команд и фиксирует прибыль. После чего цена продолжает идти в том же направлении, алготрейдер начинает сомневаться «а не рано ли я закрылся?». Может еще переоткрыть сделку как раз перед разворотом сам или это сделает робот и получит убыток. Знакомая история? Не мешайте роботу работать, а если уж пофиксили прибыль, то выключите робота до конца дня и не смотрите на график.
Можно получить красивую кривую доходности алгоритмом всего лишь из одной скользящей средней, но это не значит что робот будет также зарабатывать и на новой истории.
Как этого избежать?
Всегда используйте форвард-тестирование. Оставляйте четверть периода оптимизации для проверки робота на данных, которые он не видел. Тестируя на 2012-2015 году, оставляйте 2016 г для тестов. Показатели на форвард тесте также не гарантируют доходность.
Рынок меняется и 2016 г был не похож на предыдущие. Дополнительным методом проверки может быть тест на других инструментах и других тайм-фреймах.
Еще одна ошибка — выбор параметров, которые дают слишком мало сделок. В таком случае результат оптимизации может быть подгонкой под небольшое количество прибыльных сделок. Оценить работу алгоритма, имея всего лишь 30-40 сделок, объективно нельзя. Желательно иметь репрезентативную выборку от 100 сделок.
Старайтесь создавать как можно меньше параметров оптимизации. Одинаковые параметры оптимизируйте через Связанный параметр, лишние исключайте. Абсолютные значения старайтесь заменить относительными. Описывая параметры в системе, привязывайтесь к заранее известным значениям — уровням, размерностям, которые есть на графике без индикаторов или вычисляются простыми математическими формулами.
TSLab позволяет использовать в формулах преобразования класса Math. из .NET Framework. Это позволяет брать модули, корни, логарифмы, округлять числа и так далее.
Чем больше параметров, индикаторов и фильтров вы используете, тем больше будет оптимизация под историю.
Это не гарантия успеха, но позволит алгоритму быть успешным дольше. Ключевая идея в том, что основа алгоритма должна иметь преимущество перед рынком сама по себе, то есть использовать закономерности движения цены, смещение вероятности. Оптимизация же просто улучшает показатели.
Кстати, в декабре я и Frend организуем вебинар по построению прибыльной системы на акциях без применения оптимизации. Система очень интересная и её можно будет купить для TSLab или торговать руками. Приходите!
P.S. Тимофей Мартынов , пару доработок по сайту. В профиле, когда вводишь свой сайт с https:// неверно отображается ссылка. И второе — оглавление в посте содержит лишний атрибут и при переходе по ней открывается новая страничка, надо target="_blank" убрать в ссылке.