Вы конечно знаете, что такое Карго-Культ, но, позволю себе напомнить.
В некую Банановую Республику продолжительное время поступает гуманитарная помощь развитых стран. В стране оборудуются аэродромы, куда приземляются самолеты со всякими ништяками — продовольствием, одеждой, товарами первой и второй необходимости и пр. Все счастливы.
В один прекрасный момент программа гум помощи заканчивается, и людям приходится самим заботится о себе. Они строят самолет из палок и веревок, ставят его на заброшенный аэродром, в надежде, что он привлечет железных птиц с ништяками. Потом вспоминают, что в хибаре сидел мужик в наушниках, и что-то говорил в микрофон, и тогда прилетали железные птицы. Аборигены собирают остатки брошенного оборудования, рисуют на ящиках шкалы и органы управления, назначают диспетчера, дают ему наушники из половинок кокосовых орехов и деревянный микрофон, и он часами говорит в него нечто подобное тому, что они слышали от диспетчера.
Словом, делают все тоже самое, что и проклятые пиндосы, но железные птицы по прежнему не летят на зов.
Это самый примитивный вариант Карго-Культа, но есть и более продвинутые и более цивилизованные его варианты.
Скажем, покупаем мы экскаватор, или угоняем самолет, и цап-царап, разбираем все это до винтиков, делаем чертежи, и пытаемся изготовить аналогичные изделия. Этот вариант уже лучше, — экскаватор может даже копать, а самолет летать. Но есть и недостатки — мы можем увидеть только внешнюю сторону, о технологиях изготовления мы можем только гадать, а можем даже и не догадываться о их существовании. Кроме того, для тех же самолетов, это будет отставание не менее чем на 10 лет.
Типичный пример Карго-Культа на гос уровне — тяжелый бомбардировщик Ту-4, полностью, вплоть до пепельницы и подстаканников, скопированный с американского
Недели две назад обещал ответить нашему коллеге на вопрос и написать на эту тему топик. Отвечаю и пишу.
Итак, нам пришла в голову просто бесподобная и очень простая идея Грааля. Мы имеем всего два индикатора с параметрами х1 и х2 соответственно. Их состояние описывается вектором X = [x1,x2], и в некоторой области Gv подмножества Х и находится наш Грааль, многие сделки в этой области в плюс. По крайней мере, мы так предполагаем, хотя где находится эта область и есть ли она вообще, эта Gv представляем весьма приблизительно, и мы, разумеется, хотели бы это выяснить. Рис.1.
В пространстве состояний X мы ограничили область нашего видения Грааля областью Gv, и в нее даже попал кусок настоящего Грааля G.
Запускаем оптимизацию системы по прибыли, положение и параметры области Gv меняются таким образом, что оптимизатор находит и выделяет настоящий Грааль G областью Gr в пространстве X.
Торговая система готова к употреблению.
В прошлом топике [1] мы разобрались с тем, что и как подавать на входы нейросети (НС). Теперь надо как-то сказать НС — «Горшочек, вари», предварительно рассказав, что конкретно и как именно надо «варить». Мыслей, в общем, нет никаких. Потому, давайте обратимся к классикам — Саймону Хайкину [2,c.33]:
Вот так вот, сразу и на первых страницах — «не могут обеспечить готовые решения», необходимо интегрировать в сложные ситемы", «относительно простые задачи, часть из которых может решаться НС». Книга конечно старая, но и наш MLP (Multilayer perceptron) в составе scikit-learn новизной не отличается. Этому MLP еще и простую, да конкретную задачу подавай, и вокруг него «сложную систему» городи. Как-то энтузиазма поубавилось.
Ладно, коли на вход нашего MLP уже подается временной ряд, пусть он нам определяет, хотя бы приблизительно, моменты входа в Лонг. А мы потом его проверим, и уточним эти моменты.
Теперь нашу НС надо как-то научить находить Лонг — показать НС как правильно и как неправильно. А мы сами-то знаем как правильно? Учителя фиговы. Это с кошечками-собачками хорошо — показывай себе, и пусть учится.
А давайте что-нибудь предположим, назовем какие-то входы в Лонг правильными, а остальные неправильными. Если мы предположили какую-нибудь ерунду, то НС просто ничему разумному не научится, и при дальнейшей проверке это быстро выяснится. А что-то предположить нам поможет интернет.
Кстати, это свойство НС, отличать фантазии от действительных закономерностей, уже вполне можно использовать для проверки каких-либо наших педположений о поведении рынка. Надо только рассказать о них НС, и она скажет, есть там что-то, с чем следует работать, или выкинуть это и забыть.
Однако, обратимся к интернету. Несколько лет назад наш коллега по несчастью занимался методами Машинного обучения (МО) с целью победить рынок. Он строил массу предикторов, подавал их на входы различных систем МО, и обучал по разметке Зиг-Зага. А что, неплохая идея, входы — лучше не придумаешь.
Вообще, если на минимуме Зиг-Зага загородить правую часть графика, как-то сомнительно, что вообще можно что-то сказать о дальнейшем движении. Да, и по ходу пьесы этот минимум будет постоянно перемещаться. Да и наш коллега долго и упорно менял предикторы и системы МО, потом все реже, реже, и вообще пропал из поля зрения. А на истории, конечно, Зиг-Заг — лепота.
Давайте сдвинем точку входа в Лонг немного вправо от минимума Зиг-Зага, где цена уже начала расти. Мы получим некую U-образную кривую цены, на которой НС хотя бы cможет построить линию регрессии. Не говорю, что это хорошая идея, но мы с помощью НС попробуем ее проверить. Что получим? — понятия не имею, я это делаю по ходу написания материала.
Разметку правильных входов для обучения можно сделать по Зиг-Загу, установив какой нибудь разумный порог от его минимума.
А разметку неправильных входов кто сделает? Опять обращаемся к [2,c.60].
Концепция работы на рынке:
1. Принимаем, что всё рыночное пространство состоит из 3-х состояний:
— направленное движение (тренд)
- ненаправленное движение (боковик)
- переход между этими состояниями.
2. Создаём торговую систему для тренда (стопы + высиживание прибыли).
3. Создаём торговую систему для боковика (без стопов + короткие тэйки)
4. Применяем наклон эквити или статистику преобладания прибыльных и убыточных дней как индикатор для включения 1-й или 2-й ТС.
Получаем следующий результат:
1. Трендовый рынок. Включается трендовая ТС и зарабатывает на «своём» рынке.
2. Переход от тренда к боковику. Показатели трендовой ТС постепенно ухудшаются, и она выключается.
3. Ненаправленный рынок. Включается ТС для боковика и зарабатывает на «своём» рынке.
4. Переход от боковика к тренду. Показатели нетрендовой ТС постепенно ухудшаются, и она выключается.
5. Закольцовываем эту последовательность действий.
Видит ли кто-то ошибки в такой архитектуре или в применяемой модели?
Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].
В комментариях к предыдущему топику меня критиковали за неоптимальность кода Python. Однако, текст читают люди с совершенно разной подготовкой — от почти не знающих Python или знающих другие языки программирования, до продвинутых пользователей. Последние легко могут обнаружить неоптимальность кода и заменить его своим. Тем не менее, код должен быть доступен и новичкам, возможно не обладающим знанием пакетов и продвинутых методов. Поэтому, в коде я буду, по возможности, использовать только базовые конструкции Python, не требующие глубоких знаний, и которые могут легко читаться людьми, программирующими на других языках. Вместе с тем, по мере изложения, без фанатизма, буду вводить и новые элементы Python.
Если вы хотите как-то улучшить или оптимизировать код, приводите его в комментариях — это только расширит и улучшит изложенный материал.
Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:
Для моделирование ТС на Python, прежде всего нужен сам Python. Pythonы бывают очень разные.
Самый большой и длинный Python — Anaconda (https://anaconda.org/). Скачать дистрибутив Anaconda можно здесь — Индивидуальное издание -https://www.anaconda.com/products/individual.
Я работаю именно с Anaconda. Установив Anaconda мы получаем сам Python, уже установленные значительную часть нужных и ненужных пакетов с библиотеками Python, и несколько сред разработки. И все это сразу готово к работе, и нам, по большей части, уже не придется дополнительно устанавливать пакеты и среды.
Самый маленький Python последней версии 3.8.2. скачивается с сайта самого Python — https://www.python.org/. Это, практически, только сам язык, компилятор и минимальный набор пакетов. Сделать с ним практически ничего невозможно, и для работы придется постоянно устанавливать нужные пакеты. Среду разработки придется также устанавливать самостоятельно.
Этот Python больше подходит для запуска и работы с уже отлаженными законченными программами.