Pull to refresh

Comments 10

Не довелось встречать других стратегий? А как же MACD?

Возможно, неясно выразился. Моя стратегия «догматична», так как навязывает рынку какой-то паттерн, исходя из какой-то параллельной рынку логики. Моя стратегия предполагает, что рынку не плевать на скользящие средние.

Я встречал великое множество столь же догматичных и бесполезных стратегий, что и рассмотренная выше. В том числе, и MACD (те же фаберже, чуть поизощренней).

А вот реально работающих стратегий, которые отвечали бы критериям научного знания (только применительно к торговле, а не к научным теориям), а именно: непротиворечивость — фальсифицируемость — индуктивная сила… Короче, я не встречал алгоритмов, в которые бы поверил уже по их концепции.
Генетический алгоритм имеет слишком много вариативностей и непонятных (ничем не обоснованных) решений. Имхо, простые стохастические методы в подобных задачах должны работать лучше. Я использовал в похожей задаче комбинацию стохастического метода и градиентного спуска и достиг вполне устойчивой сходимости и повторяемости решения. Чистый градиентный спуск «глохнет» в локальных минимумах и оврагах, а метод монте-карло требует очень много итераций, если размерность вектора параметров и вариативность их диапазона, большая. Но если добавить к спуску случайный шум (уменьшая его в процессе), и спускаться покоординатно, то как ни станно, эта простая стратегия хорошо работает, проходит и овраги и локальные минимумы.
Генетический алгоритм имеет слишком много вариативностей и непонятных (ничем не обоснованных) решений

полностью согласен

по поводу метода градиентного спуска… Моя последняя идея была:
1) — случайным образом отобрать N точек
2) — выбрать M лучших результатов
3) — из пар… троек?, образованных этими M точками, получить K новых точек. Как вариант, [(Ax + Bx) / 2, (Ay + By) / 2,… ]
4) — провести испытания в этих точках
5) — отобрать L лучших точек, и в их окрестностях либо искать экстремум методом градиентного спуска, либо просто проверить соседние значения

Шаги 1, 2, 3 — практически ГА. Но лишь одна итерация ГА.

Этот метод пока не проверял…
Вот пункт 3) сразу вызывает вопросы, собственно как и в генетическом алгоритме. Почему делается вывод, что комбинация одной координты двух «хороших» точек дает тоже потенциально хорошую точку? В многомерном пространстве эквипотенциальные поверхности целевой функции могут иметь очень причудливые формы, например представьте в 3D два оврага а между ними хребет. А ваш метод именно на него и будет все время помещать следующее поколение, т.к. его предки всегда будут сползать в эти овраги после шага 5). Вообще не вижу смысла в линеных операциях покординатно, если распределение целевой функции нам неизвестно и вообще, произвольно. Тут и обычный рандом работает не хуже, особенно с применением метода отжига — есть и случайность, т.е. шанс найти глобальный максимум, но есть и сходимость к точному решению.
Возможно, стоит еще поэкспериментировать с методом градиентного спуска, допускаю.

Если вам будет интересно сравнить ваш алгоритм оптимизации на тех данных, на которых я тестировал, могу дать ссылку на репозитарий с кодом (C#) / данными. Думаю, вам несложно будет немного модифицировать тот метод градиентного спуска, который имплементировал я. Принципиальное отличие одно — «спуск» производится без добавления случайного шума.
К сожалению, моего энтузиазма не хватит на большее, чем просто поделиться опытом. Просто сейчас решаю задачу оптимизации и делюсь тем, что заработало эффективно в рамках моей задачи. Про генетические алгоритмы думал, но не пробовал, т.к. есть претензии, озвученные комментом выше. Градиентный спуск не пошел вообще, из-за неопределенности с выбором шага. Есть методы его «улучшения», но это все сложнее в реализации и дольше в отладке. А вот стохастический метод лучше всего пошел, и сразу получил вполне рабочее решение.
Понятно. Если всё же вы еще не остановились окончательно на одном алгоритме, если заинтересует, для сравнения, в вашей задаче моя конкретная реализация варианта ГА, напишите в ЛС, отправлю вам прокомментированный кодовый модуль… Если у вас код на C#, адаптировать будет несложно. А мне будет интересно узнать, какой из алгоритмов окажется эффективней.

Кстати, а на каком языке программирования вы делали генетический алгоритм и для какой торговой среды? В статье об этом ни слова...

C#. На счет торговой среды - ее не было, но при желании можно было бы элементарно написать интеграцию с MetaTrader4 - по UDP либо выставить HTTP сервер, а "советник" в MT4 слушал бы порт либо периодически обращался по указанному endpoint.

У меня была не одна попытка найти свой Грааль, но здравого смысла хватило, чтобы основательно протестировать свои идеи, а не закидывать денег в топку одной беттинговых контор "Forex" либо биржевой прослойке.

Sign up to leave a comment.

Articles