Советник для статьи. Тестирование для всех желающих. - страница 4

 
Reshetov:


Доработал советник так, чтобы он из торговых сигналов вычислял вероятность для будущей короткой позы. Соответственно если вероятность более 0.5 - открываем короткую, а иначе длинную.



Сделал тейки и лоси фиксированными, т.е. более не переворачивается по сигналам. Это нужно для того, чтобы можно было прикрутить ММ.

Получается такая картинка: первые 136 сделок - оптимизация, остальное OOS.


Поскольку данный топик трейдерам не интересен, а сюда сбегаются лишь флудерасты для обсуждения личности топикстатера, то модифицированный код советника не прилагаю.


Юрий, не слушайте вы их. Выложите, пожалуйста, модифицированный советник.
 
Andru80:
Юрий, не слушайте вы их. Выложите, пожалуйста, модифицированный советник.

Будет статья, будет и советник. Посмотрим что к чему... С некоторым опытом и тестов ненадо, что бы оценить идею. Подождем.
 
Figar0:

Будет статья, будет и советник. Посмотрим что к чему... С некоторым опытом и тестов ненадо, что бы оценить идею. Подождем.

Советник выкладываю до статьи, дабы его могли протестировать все желающие и высказаться (хотя не исключено, что скорее всего опять начнут обсуждать мою личность?).


Суть даже не в советнике, а в алгоритме антиподгонки, который я в него добавил.

Теперь успешные форвардные тесты не надо долго искать и зарываться вглубь результатов тестирования, а нужно пройтись по верхним строчкам результатов, там они где-то должны быть, вполне не исключено, что и в самой верхней строке.

Результаты тестов и результаты оптимизации могут сильно отличаться, т.к. антиподгонка включается только во время оптимизации, а в остальное время отключается.

Вот график верхней строчки результатов тестирования (первые 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 архиве выкладываю файл с настройками советника, как они у меня выставлены.

Файлы:
rnn_v3_1.ex4  7 kb
rnn_v3.zip  1 kb
 

Интересный результат!

Юра, в анализе используются данные инструмента на который накинут советник?

 
Neutron:

Интересный результат!

Юра, в анализе используются данные инструмента на который накинут советник?

Да, т.е. другие инструменты не анализируются. ТА проводится только по ценам открытия.


В принципе, входы не такие уж и мудреные, т.ч. могу показать куски кода, где все это хозяйство вычисляется:


   // Считываем показания индикаторов
   double a1 = input(9, 0);
   double a2 = input(9, 1);
   double a3 = input(9, 2);

   // Вычисляем вероятность торгового сигнала для короткой позиции
   double result = getProbability(a1, a2, a3);

   ...

// Показания индикаторов, должны быть в диапазоне от 0 до 1
// p - период индикатора
// shift - смещение вглубь истории в периодах индикатора
double input(int p, int shift) { 
  return (iRSI(Symbol(), 0, p, PRICE_OPEN, p * shift) / 100.0);
}
 

Спасибо.

Антиподгонка... Если повспоминать классику НС, то антиподгонка сводится к поиску минимума ошибки предсказания на форварде. Реализовать это можно набирая статистику по сотне-другой независимых прогонов с переобучением НС на каждом. Это понятно, но очень трудно реализуемо из-за конечной длины исходного ВР и его нестационарности.

Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...

Тебе это удалось?

 
Neutron:

Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...

Да не надо ее решать. Достаточно для конкретного случая найти достаточную длину обучающей выборки, делается это очень просто.

Да, и это не антиподгонка. Это подгонка второго уровня. Для подгонки n-го уровня должно быть n+1 выборок для тестирования, последняя контрольная.

Вот именно последней у Решетова никогда нет.

 

Как же - просто!

На каждую точку кривульки нужно набрать статистику. А где брать, если ценовой ряд уже через месяц полностью меняет свои характеристики?

 

Нет, ничего не понятно.

В Юрином случае обучение НС происходит путём простого перебора весов на заданном мной участке истории... так? Если так, то анализируется просто результат торгов на каждой итерации. И утверждение: "...Теперь успешные форвардные тесты не надо долго искать и зарываться вглубь результатов тестирования, а нужно пройтись по верхним строчкам результатов, там они где-то должны быть, вполне не исключено, что и в самой верхней строке...", неверно - успешные форварды могут быть где угодно и искать придётся везде.

 
Neutron:

Спасибо.

Антиподгонка... Если повспоминать классику НС, то антиподгонка сводится к поиску минимума ошибки предсказания на форварде. Реализовать это можно набирая статистику по сотне-другой независимых прогонов с переобучением НС на каждом. Это понятно, но очень трудно реализуемо из-за конечной длины исходного ВР и его нестационарности.

Другой способ, это получить оценку на оптимальную длину обучающей выборки. Насколько я знаю, эту задачу в общем виде никто пока не решил...

Тебе это удалось?

Что касается торговых систем, то тут возможна только подгонка под историю. В нейронных сетях сразу две гадости: подгонка и переобучение. Причем переобучение происходит и на стационарных данных.

Но с нейронными сетями, при адекватных входах немного проще, когда мы имеем дело с каким нибудь нейросетевым пакетом или с самопальной сеткой, если пользоваться методом, который озвучивал Леонид Величковский: делим обучающие примеры на две выборки: обучающую и тестовую и в процессе обучения вычисляем результаты по обоим выборкам, а обучаем сетку только по обучающей. Как только на тестовой выборке улучшение результатов застопорится, т.е. не будет дальше улучшаться, значит сеть обучена достаточно и на этом следует остановиться. Т.е. таким макаром, получаем сетку обученную наиболее адекватно - лучше уже не получится, хуже запросто. На сколько именно сеть переобучена или подогнана нас в данном случае не шибко волнует, т.к. мы имеем экстремум по тестовой выборке.

С генетическим алгоритмом, встроенным в терминал намного сложнее, т.к. мы не можем вычислять результаты на форвардных участках и вовремя остановить оптимизацию. Из-за этого приходится искать форварды в отсортированных по показателям результатах оптимизации вручную.

Я пошел немного другим путем:

1. Выяснил причину переобучения нейросетки и устранил ее. Т.е. если обучающие примеры стационарны и не содержат противоречий, то мой алгоритм не переобучается, но может запросто недообучиться, если количество примеров недостаточно для интерполяции.

2. С подгонкой было сложнее. Но проблема тоже оказалась разрешимой, т.к. подгонка в основном зависит от качества обучения, т.е. адекватности системы поощрений и наказаний, а иначе алгоритм пойдет по пути наименьшего сопротивления и будет обучаться так, как ему проще, а не так, как на самом деле адекватно. Вот я и ему эти самые пути наименьшего сопротивления устранил, т.е. заставил генетический алгоритм оценивать по качеству вычисления вероятностей исходов, а не по количеству пипсов.

3. Нестационарность. Ее побороть вообще не удалось, т.к. она зависит только от рынка, а не от алгоритма. Это единственное, что является реальной помехой для качества прогнозов. Но ее влияние, если устранить остальные недостатки обучения, уже не настолько велико, чтобы мешать зарабатывать.