Доработал советник так, чтобы он из торговых сигналов вычислял вероятность для будущей короткой позы. Соответственно если вероятность более 0.5 - открываем короткую, а иначе длинную.
Сделал тейки и лоси фиксированными, т.е. более не переворачивается по сигналам. Это нужно для того, чтобы можно было прикрутить ММ.
Получается такая картинка: первые 136 сделок - оптимизация, остальное OOS.
Поскольку данный топик трейдерам не интересен, а сюда сбегаются лишь флудерасты для обсуждения личности топикстатера, то модифицированный код советника не прилагаю.
Юрий, не слушайте вы их. Выложите, пожалуйста, модифицированный советник.
Будет статья, будет и советник. Посмотрим что к чему... С некоторым опытом и тестов ненадо, что бы оценить идею. Подождем.
Советник выкладываю до статьи, дабы его могли протестировать все желающие и высказаться (хотя не исключено, что скорее всего опять начнут обсуждать мою личность?).
Суть даже не в советнике, а в алгоритме антиподгонки, который я в него добавил.
Теперь успешные форвардные тесты не надо долго искать и зарываться вглубь результатов тестирования, а нужно пройтись по верхним строчкам результатов, там они где-то должны быть, вполне не исключено, что и в самой верхней строке.
Результаты тестов и результаты оптимизации могут сильно отличаться, т.к. антиподгонка включается только во время оптимизации, а в остальное время отключается.
Вот график верхней строчки результатов тестирования (первые 404 сделки - оптимизация, остальное форвардный тест):
Советник прилагается в прикрепленном файле, (до публикации статьи он скомпилированный, в статье открою его код).
Входные параметры:
x0, x1, x2, x3, x4, x5, x6, x7 - настраиваются от 0 до 100 с шагом 1. Оптимизируются.
sl - стоплосс и тейк в пунктах. Например, для EURUSD на H1 для пятизнака можно взять от 100 до 1000 с шагом 50 (для четырехзнака у всех чисел убрать один нолик). Оптимизируется.
lots - объем в лотах, для оптимизации нужно ставить не менее 1 лота. Не оптимизируется.
mn - магический номер. Не оптимизируется.
d - количество знаков после запятой в размере лота. Т.е. если разрешено 0.01, то выставляем d = 2. Не оптимизируется.
Оптимизация по профитфактору, сортировка результатов оптимизации тоже по этому параметру.
На всякий случай в ZIP архиве выкладываю файл с настройками советника, как они у меня выставлены.
Антиподгонка... Если повспоминать классику НС, то антиподгонка сводится к поиску минимума ошибки предсказания на форварде. Реализовать это можно набирая статистику по сотне-другой независимых прогонов с переобучением НС на каждом. Это понятно, но очень трудно реализуемо из-за конечной длины исходного ВР и его нестационарности.
Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...
В Юрином случае обучение НС происходит путём простого перебора весов на заданном мной участке истории... так? Если так, то анализируется просто результат торгов на каждой итерации. И утверждение: "...Теперь успешные форвардные тесты не надо долго искать и зарываться вглубь результатов тестирования, а нужно пройтись по верхним строчкам результатов, там они где-то должны быть, вполне не исключено, что и в самой верхней строке...", неверно - успешные форварды могут быть где угодно и искать придётся везде.
Антиподгонка... Если повспоминать классику НС, то антиподгонка сводится к поиску минимума ошибки предсказания на форварде. Реализовать это можно набирая статистику по сотне-другой независимых прогонов с переобучением НС на каждом. Это понятно, но очень трудно реализуемо из-за конечной длины исходного ВР и его нестационарности.
Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...
Тебе это удалось?
Что касается торговых систем, то тут возможна только подгонка под историю. В нейронных сетях сразу две гадости: подгонка и переобучение. Причем переобучение происходит и на стационарных данных.
Но с нейронными сетями, при адекватных входах немного проще, когда мы имеем дело с каким нибудь нейросетевым пакетом или с самопальной сеткой, если пользоваться методом, который озвучивал Леонид Величковский: делим обучающие примеры на две выборки: обучающую и тестовую и в процессе обучения вычисляем результаты по обоим выборкам, а обучаем сетку только по обучающей. Как только на тестовой выборке улучшение результатов застопорится, т.е. не будет дальше улучшаться, значит сеть обучена достаточно и на этом следует остановиться. Т.е. таким макаром, получаем сетку обученную наиболее адекватно - лучше уже не получится, хуже запросто. На сколько именно сеть переобучена или подогнана нас в данном случае не шибко волнует, т.к. мы имеем экстремум по тестовой выборке.
С генетическим алгоритмом, встроенным в терминал намного сложнее, т.к. мы не можем вычислять результаты на форвардных участках и вовремя остановить оптимизацию. Из-за этого приходится искать форварды в отсортированных по показателям результатах оптимизации вручную.
Я пошел немного другим путем:
1. Выяснил причину переобучения нейросетки и устранил ее. Т.е. если обучающие примеры стационарны и не содержат противоречий, то мой алгоритм не переобучается, но может запросто недообучиться, если количество примеров недостаточно для интерполяции.
2. С подгонкой было сложнее. Но проблема тоже оказалась разрешимой, т.к. подгонка в основном зависит от качества обучения, т.е. адекватности системы поощрений и наказаний, а иначе алгоритм пойдет по пути наименьшего сопротивления и будет обучаться так, как ему проще, а не так, как на самом деле адекватно. Вот я и ему эти самые пути наименьшего сопротивления устранил, т.е. заставил генетический алгоритм оценивать по качеству вычисления вероятностей исходов, а не по количеству пипсов.
3. Нестационарность. Ее побороть вообще не удалось, т.к. она зависит только от рынка, а не от алгоритма. Это единственное, что является реальной помехой для качества прогнозов. Но ее влияние, если устранить остальные недостатки обучения, уже не настолько велико, чтобы мешать зарабатывать.
Доработал советник так, чтобы он из торговых сигналов вычислял вероятность для будущей короткой позы. Соответственно если вероятность более 0.5 - открываем короткую, а иначе длинную.
Сделал тейки и лоси фиксированными, т.е. более не переворачивается по сигналам. Это нужно для того, чтобы можно было прикрутить ММ.
Получается такая картинка: первые 136 сделок - оптимизация, остальное OOS.
Поскольку данный топик трейдерам не интересен, а сюда сбегаются лишь флудерасты для обсуждения личности топикстатера, то модифицированный код советника не прилагаю.
Юрий, не слушайте вы их. Выложите, пожалуйста, модифицированный советник.
Будет статья, будет и советник. Посмотрим что к чему... С некоторым опытом и тестов ненадо, что бы оценить идею. Подождем.
Будет статья, будет и советник. Посмотрим что к чему... С некоторым опытом и тестов ненадо, что бы оценить идею. Подождем.
Советник выкладываю до статьи, дабы его могли протестировать все желающие и высказаться (хотя не исключено, что скорее всего опять начнут обсуждать мою личность?).
Суть даже не в советнике, а в алгоритме антиподгонки, который я в него добавил.
Теперь успешные форвардные тесты не надо долго искать и зарываться вглубь результатов тестирования, а нужно пройтись по верхним строчкам результатов, там они где-то должны быть, вполне не исключено, что и в самой верхней строке.
Результаты тестов и результаты оптимизации могут сильно отличаться, т.к. антиподгонка включается только во время оптимизации, а в остальное время отключается.
Вот график верхней строчки результатов тестирования (первые 404 сделки - оптимизация, остальное форвардный тест):
Советник прилагается в прикрепленном файле, (до публикации статьи он скомпилированный, в статье открою его код).
Входные параметры:
x0, x1, x2, x3, x4, x5, x6, x7 - настраиваются от 0 до 100 с шагом 1. Оптимизируются.
sl - стоплосс и тейк в пунктах. Например, для EURUSD на H1 для пятизнака можно взять от 100 до 1000 с шагом 50 (для четырехзнака у всех чисел убрать один нолик). Оптимизируется.
lots - объем в лотах, для оптимизации нужно ставить не менее 1 лота. Не оптимизируется.
mn - магический номер. Не оптимизируется.
d - количество знаков после запятой в размере лота. Т.е. если разрешено 0.01, то выставляем d = 2. Не оптимизируется.
Оптимизация по профитфактору, сортировка результатов оптимизации тоже по этому параметру.
На всякий случай в ZIP архиве выкладываю файл с настройками советника, как они у меня выставлены.
Интересный результат!
Юра, в анализе используются данные инструмента на который накинут советник?
Интересный результат!
Юра, в анализе используются данные инструмента на который накинут советник?
Да, т.е. другие инструменты не анализируются. ТА проводится только по ценам открытия.
В принципе, входы не такие уж и мудреные, т.ч. могу показать куски кода, где все это хозяйство вычисляется:
Спасибо.
Антиподгонка... Если повспоминать классику НС, то антиподгонка сводится к поиску минимума ошибки предсказания на форварде. Реализовать это можно набирая статистику по сотне-другой независимых прогонов с переобучением НС на каждом. Это понятно, но очень трудно реализуемо из-за конечной длины исходного ВР и его нестационарности.
Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...
Тебе это удалось?
Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...
Да не надо ее решать. Достаточно для конкретного случая найти достаточную длину обучающей выборки, делается это очень просто.
Да, и это не антиподгонка. Это подгонка второго уровня. Для подгонки n-го уровня должно быть n+1 выборок для тестирования, последняя контрольная.
Вот именно последней у Решетова никогда нет.
Как же - просто!
На каждую точку кривульки нужно набрать статистику. А где брать, если ценовой ряд уже через месяц полностью меняет свои характеристики?
Нет, ничего не понятно.
В Юрином случае обучение НС происходит путём простого перебора весов на заданном мной участке истории... так? Если так, то анализируется просто результат торгов на каждой итерации. И утверждение: "...Теперь успешные форвардные тесты не надо долго искать и зарываться вглубь результатов тестирования, а нужно пройтись по верхним строчкам результатов, там они где-то должны быть, вполне не исключено, что и в самой верхней строке...", неверно - успешные форварды могут быть где угодно и искать придётся везде.
Спасибо.
Антиподгонка... Если повспоминать классику НС, то антиподгонка сводится к поиску минимума ошибки предсказания на форварде. Реализовать это можно набирая статистику по сотне-другой независимых прогонов с переобучением НС на каждом. Это понятно, но очень трудно реализуемо из-за конечной длины исходного ВР и его нестационарности.
Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...
Тебе это удалось?
Что касается торговых систем, то тут возможна только подгонка под историю. В нейронных сетях сразу две гадости: подгонка и переобучение. Причем переобучение происходит и на стационарных данных.
Но с нейронными сетями, при адекватных входах немного проще, когда мы имеем дело с каким нибудь нейросетевым пакетом или с самопальной сеткой, если пользоваться методом, который озвучивал Леонид Величковский: делим обучающие примеры на две выборки: обучающую и тестовую и в процессе обучения вычисляем результаты по обоим выборкам, а обучаем сетку только по обучающей. Как только на тестовой выборке улучшение результатов застопорится, т.е. не будет дальше улучшаться, значит сеть обучена достаточно и на этом следует остановиться. Т.е. таким макаром, получаем сетку обученную наиболее адекватно - лучше уже не получится, хуже запросто. На сколько именно сеть переобучена или подогнана нас в данном случае не шибко волнует, т.к. мы имеем экстремум по тестовой выборке.
С генетическим алгоритмом, встроенным в терминал намного сложнее, т.к. мы не можем вычислять результаты на форвардных участках и вовремя остановить оптимизацию. Из-за этого приходится искать форварды в отсортированных по показателям результатах оптимизации вручную.
Я пошел немного другим путем:
1. Выяснил причину переобучения нейросетки и устранил ее. Т.е. если обучающие примеры стационарны и не содержат противоречий, то мой алгоритм не переобучается, но может запросто недообучиться, если количество примеров недостаточно для интерполяции.
2. С подгонкой было сложнее. Но проблема тоже оказалась разрешимой, т.к. подгонка в основном зависит от качества обучения, т.е. адекватности системы поощрений и наказаний, а иначе алгоритм пойдет по пути наименьшего сопротивления и будет обучаться так, как ему проще, а не так, как на самом деле адекватно. Вот я и ему эти самые пути наименьшего сопротивления устранил, т.е. заставил генетический алгоритм оценивать по качеству вычисления вероятностей исходов, а не по количеству пипсов.
3. Нестационарность. Ее побороть вообще не удалось, т.к. она зависит только от рынка, а не от алгоритма. Это единственное, что является реальной помехой для качества прогнозов. Но ее влияние, если устранить остальные недостатки обучения, уже не настолько велико, чтобы мешать зарабатывать.