Избранное трейдера Uarednikov
Этой статьей я начинаю изложение серии исследований на фондовом, срочном и валютных рынках Московской биржи. Цель – показать те закономерности, которые сохраняют свои свойства продолжительное время. Исследования основаны на результатах тестов большого количества торговых систем (более 50000 шт.). Системы были сгенерированы в режиме перебора индикаторов конструктором торговых роботов 3CBot. Каждая система состоит из 1-2 индикаторов технического анализа, параметры индикатора классические, оптимизации значений параметров не проводилось. Всего обработано 35 тикеров, 3 таймфрейма (15m, 60m, 1D), 2 периода (2013-2015 г., 2016 г.). На каждую комбинацию (тикер+ТФ+период) приходится по 370 тестов различных систем. Данный подход, в отличие от оптимизации параметров индикаторов, позволяет шире взглянуть на рынок, т.к. исключает заточенность отдельного индикатора или параметра индикатора под конкретный период рынка. Кроме того такой подход позволяет выявить тикеры и таймфреймы, где работает или не работает большинство систем, построенных на индикаторах, а также выявить системы, которые работают или не работают на большинстве тикеров. И да… сразу отвечаю на вопрос — тестированием я не сильно утруждался, все сгенерировалось автоматически за пару дней на обычном ноутбуке…
Для сравнения языков MQL5 и QLUA мы написали несколько тестов, которые замеряют скорость выполнения базовых операций.
В тестах использовался компьютер с Windows 7 Professional 64 bit, MetaTrader 5 build 1340 и QUIK версии 7.2.0.45.
Результаты представлены в таблице, где все значения представлены в миллисекундах (чем меньше время, тем лучше):
Название MQL5 QLUA Преимущество MQL5 TestFloat 3 969 273 391 69 раз TestArrays 375 230 768 615 раз TestFibo 1 125 61 110 55 раз TestPiCalculated 2 328 183 812 79 раз TestQuickSort 2 031 211 279 104 раза TestAckermann 828 64 541 78 раз
Что бы выяснить. Когда можно увеличивать размер позиции. Разберем условную стратегию. Стратегию монетки (как в простой задачке по теории вероятности, подкидывание монетки). Имеем показатели: соотношение прибыльных сделок к убыточных равно 1:1. Примем прибыльную сделку за 1, а убыточную за 0. В теории имеем, что за 10 сделок мы получим вот такую последовательность сделок:
1) 1010101010
Дело в том. Что на практике так редко бывает. Вместо этой последовательности, можем получить и вот такие:
2) 1110110000
3) 0001001111
Предположим. Что за сделку мы имеем прибыль равный 1, убыток равный -1.
Мы сделали 5 сделок. Нам выпала 2-ая последовательность. И мы на счете имеем уже прибыль, равную трем. Что будет, если мы увеличим размер позиции в два раза? Последующие 5 сделок принесут нам минус шесть. И итогом получим минус три убытка. Вместо нуля для данной стратегии. Когда чаще всего увеличивают позиции? Когда на счете мы уже имеем деньги. На простом примере видим. Как такой подход создаст убыток по стратегии в целом.
Продолжаем разработку универсального робота!
Выкладываю код OUR-0.3, который в настоящий момент еще далеко не полный – это только основа, скачать можно здесь https://yadi.sk/d/l3uic67yruCxa
Код прокомментирован подробно, но дам дополнительное описание общего плана, чтобы логику работы робота можно было представить.
Итак, по порядку:
Робот состоит из двух файлов: OUR.lua содержит основные функции (OnInit, main, коолбэки – пока только один OnStop), FunOUR.lua содержит вспомогательные функции – все остальные. Дополнительно приложен файл с информацией и файл с образцом котировок.
Функция OnInit
1 Первоначально котировки с сервера поступают в источник – таблицу с барами TBar (там все заполняется автоматически при подключении источника).
2 Далее робот делает различные вычисления, результаты которых он помещает в таблицу с данными TDat (также туда копируются параметры баров из TBar), эту таблицу нужно заполнять самому, ключи таблицы на свое усмотрение, но конечно часть ключей в алгоритм уже заложены, это «key»,«O»,«H»,«L»,«C»,«V»,«T» от них идут все вычисления. TDat – это таблица, содержащая таблицы по каждому бару, ключ соответствует номеру бара в источнике. Структура такого типа:
TDat = { [1321] = {"O","H","L","C","SMAf","SMAs"…}, [1322] = {"O","H","L","C","SMAf","SMAs"…}, … }
Что такое риск на сделку? Это величина разности стоимости котировок (величина стоп приказа) умноженного на величину позиции? Разность котировки дает стратегия . А где брать размер позиции? Обычно следуют от обратного – берут максимальный риск на сделку, и делят его на разность котировок. Где взять максимальный риск на сделку? В книгах — риск менеджмента. На чем основывается значение риска в книгах? Я не видел, и уверен. Никто не знает. Кроме как – он не позволит разорить торгуемый счет. А кто, или что его разорит?
Разорит счет:
1) Непрерывная череда убыточных сделок (максимальная величина просадки)
2) Комиссия и среднее проскальзывание
3) ГЭПы и форс мажорное проскальзывание.
4) Есть другие причины, не относящиеся к риск менеджменту.
А как их учесть и получить формулу риска от депозита? Дело в том. Что сам по себе риск не определяет ничего. Его величина в себе содержит размер позиции. И именно он и является основополагающим и никак не вычленяется из понятия риска. Даже само утверждение – разорит счет — не верно. Нужно не разорить, а не уменьшить до некоторого значения. Когда мы уже не сможем открывать новые позиции. Почему же именно риском оперируют при определении значения? Дело в том. Что там особый риск – риск на одну позицию (один контракт). Т.е. по сути величина стопа, а не риск. И он не имеет отношение к риск менеджменту.
Представляю вашему вниманию контртрендового робота на основе индикатора Bollinger Bands. Данный робот позволит вам торговать в промежутки боковика и высоковолатильной ситуации на рынке.
Робот анализирует цену относительно индикатора и принимает на основе этого торговые решения, позволяя тем самым автоматизировать торговлю.В этой статье расскажу, как запустить робота и опишу торговый алгоритм, реализованный в механической торговой системе (МТС).
План:
1) Как установить робота на основе Bollinger Bands под Quik;1) Как установить робота