Избранные комментарии трейдера Gorazio
shprots, ну так я это и имел в виду, что бэктестер у автора фиговый. Я и сам когда-то тестил во всяких метастоках и вэлзлабах.
А тестер по тикам — это суровая необходимость, легче разобраться откуда разница между тестом и реалом.
Архитектуры особо нет, есть терминалы, которые выдают маркетдату роботам и сохраняют её в файлы. Есть роботы, которые берут маркетдату у терминалов и торгуют опять же через эти терминалы.
И есть тестер, который берёт данные из файлов и тестит по ним. Для тестера собран сервачёк на двух процах — 24 физических ядра. Тестер умеет по списку инструментов тестить стратегию, потому как у меня есть убеждение что если грааль нормальный, то он работает на многих инструментах. За пару суток тестер может всю русфонду прогнать по исследуемой стратегии, вполне приемлемо, я считаю.
Рассуждения о проскальзывании.
Думаю, этот топик не принесет пользы опытным трейдерам, однако может натолкнуть на интересные мысли тех, кто не так давно в теме.
Очередное НЕнаучное исследование. В этот раз на тему проскальзывания. Анализ различных подходов и пример из личного опыта. И ещё: мой рабочий сайз более 100 контрактов, но ни разу не превысил пока 200 пунктов в одной стратегии. В начале текста я рассуждаю о необходимости проскальзывания вообще, а в конце о том, когда стоит начинать учитывать проскальзывание в тестах и почему.
Просматривал я тут интернеты на вопрос проскальзывания. Поразительно, многие пихаютего сразу в систему на этапе начальной разработки! И ещё более удивительны трейдеры, которые проскальзывание вообще не учитывают. Я уже писал об этом несколько слов, хочу повторить свою мысль: не надо бездумно вставлять 100 пунктов по РТС на круг в тесты! Важно помнить, что системы бывают разные, соответственно, должен быть разный подход к разработке этих систем. Вообще, трейдеры, исследующие данную тему, часто приходят к выводу, что чем меньше сделок у системы, тем меньше будет проскальзывание. И, соответственно, чем больше система приносит в среднем за одну сделку, тем менее чувствительна она будет к дополнительным затратам на исполнение. Это, конечно, всё хорошо, «спасибо, кэп» скажите вы. Но интересно всё же, как работать с остальным системами, у которых не 20 сделок в год по +2000 пунктов в среднем каждая.
Собственно, вход в позицию и выход из неё делится на 3 метода:
Вход по рынку при достижении некоторого уровня (обычно, трендовые системы). Данному типу входа соответствует выход по стоп-лоссу. Для таких входов и выходов чаще всего необходимо закладывать максимальную сумму проскальзывания. Хотя, стоит обратить внимание, что бывает «вход по рынку» в «вашу пользу», когда за те секунды, пока стоп-заявка кидается на рынок, цена успевает слегка откатиться. Зависит это от многих факторов, в том числе и от времени, в которое исполняется заявка. Но об этом далее.
Вход по отложенному ордеру (отбойные системы). Данному типу входа соответствует выход по тэйк-профиту. Для таких входов проскальзывание закладывать в тесты вообще не нужно! Заявка либо не исполнится, либо исполнится конкретно по вашей цене.
Вход/выход по времени. Вот это самое интересное.
Если стратегия подразумевает вход в конкретное время, просчитать проскальзывание очень сложно. Оно зависит от многих факторов, но, наверное, самый важный из них – это само время. Совершить сделку по цене открытия 16:30 практически не возможно. А закинуть небольшой сайз по открытию 16:31 уже намного проще. На мой субъективный взгляд, если стратегия должна быть активной в какое-то конкретное время, лучше всего открывать и закрывать позиции руками. Уже через десяток сделок станет понятно, когда лучше открыться на 5 секунд раньше, или наоборот повременить секунд 15 (это реже, потому что системы, работающие по времени часто уносят цену именно в первые секунды новой минуты). На сколько же пунктов стоит ухудшить каждую сделку на истории, если мы исполняем временные приказы системы руками? Мой ответ: вообще ни на сколько. Вернее, так: вы поторгуйте, проверьте в реальных условиях, как оно получается, и только тогда поймете реальный рынок:
Результат торговли по системе за последний год составил -1500 пунктов. Если отбросить мысль о том, что такая система не робастна, то можно обратить внимание именно на исполнение: на большей части графика объем был более 100 контрактов, учитывается средний результат по 2 счетам (торговля на одном ноутбуке с 2 разных квиков):
Как видите, в реальной жизни проскальзывания нет! При том, что активность системы совпадает по времени с активностью на рынке (т.е. с одной стороны, это позволяет вливать большой капитал в систему, а с другой, цена довольно быстро меняет свое значение). Если бы система отработала бы так, как я закладывал в тесты, с проскальзыванием 60 пунктов на круг, то сейчас я имел бы не -1500 пунктов, а -9500 пунктов. А это уже совсем другая картинка…
Что же касается первого пункта, входа по рынку. Есть такая мысль: попробуйте преобразовать первый метод вход во второй! Первое, что я делаю в таком случае – это проверка входа по лимитнику. Т.е., при исполнении условия входа вместо того, чтобы сразу покупать по рынку с учетом 50 пунктов проскальзывания, я тестирую систему на предмет выставления отложенного ордера на 200-300 пунктов лучше условия. И иногда такой вариант оказывается лучше тупого выстрела по рынку. Да, бывает, пропускается хорошая сделка, но, если после условия рынок часто откатывается назад, то почему бы это не использовать?
Для всех остальных случаев: либо лимитник на 30 пунктов лучше рынка + проскальзывание 30 п. (таким образом я оцениваю свое небольшое воздействие на рынок, если в реальности заявка высталяется не по рынку, а по цене условия. Если система показала возможность исполнения приказа на 30 пунктов лучше, чем по рынку, тогда в реальных рыночных условиях скорей всего удастся войти с помощью лимитной заявке по цене условия), либо всё-таки приходится закладывать некоторую сумму проскльзывания в результаты.
Из всего вышесказанного следует то, что не надо учитывать проскальзывание на первых этапах разработки новой системы. В пользу этого мнения также свидетельствует ещё и то, что рыночная идея, основывающаяся на некой внутренней логике, может оказаться не рабочей именно из-за невозможности точного исполнения, однако может помочь в общем понимании рынка и быть использована в качестве фильтра в какой-нибудь другой стратегии. Если же вы будете учитывать 100 пунктов на круг с самого начала, вы можете не разглядеть за нисходящей кривой эквити интересную рыночную закономерность.
В любом случае, теория, конечно хороша, но любое знание, любую формулу, любой расчет – всё нужно проверять на практике!
Спасибо дочитавшим до конца.
Всё, как всегда, лишь ИМХО.
- t-trade
- 6 ноября 2012, 15:23
Неожиданно...
Попробую вспомнить по какой книге сам учил c#. Она состояла из примеров программ, описывающих различные конструкции языка. Клал перед собой книгу и набирал приведенный в ней пример кода. Добивался, чтобы работало. Затем вносил те изменения, которые мне приходили в голову. Если после моих изменений работало так, как задумал — ставил галочку "понял тему хотя бы поверхностно". Безрадостная для тебя новость: на проработку той книги у меня ушло примерно 6 месяцев.
В твоем случае параллельно можно пытаться делать вещи связанные с трейдингом непосредственно. Причем позволю себе крайне настоятельно предостеречь тебя от попытки написать полностью робота на сишарпе. Ни сейчас ни в каком-либо обозримом будущем. Самая правильная для тебя стратегия — писать отдельные кубики. Нужен тебе кубик для интеграции с языком R — пиши кубик для интеграции с R. Нужен кубик для поиска в интернете новостей — пиши кубик для выдергивания из интернета конкретных новостей. Нужен кубик, который засунет свежие котировки в уже готовую обученную нейронную сеть — пиши кубик-обертку вокруг нейронных сетей, который будет выдавать тебе на выходе прогноз цены для следующего бара.
Ну, или можем потрындеть в личку и что-то вместе замутить… ;-)
С кластерами только начал разбираться. Пока даже не представляю, как можно сделать бэктестну сделайте ручной бектест. Можете поставить привод qscalp, в него загружать историю инструмента, и включать торги истории в ускоренном режиме. Включить демо режим.