А что разве оптимальный период нельзя найти при оптимизации советника?
В описанном мной варианте оптимизация происходит автоматически с каждым новым баром!!! И советника при этом не надо оптимизировать.
У вас остался еще один параметр, период за который вы набирате статистику положительных и отрицательных результатов. По сути это период оптимизации. Как вы избавляетесь от этого параметра?
И главная проблема это постулат о том, что история повторяется, т.е. что полученные вами статистические результаты можно применять в будущем.
У вас остался еще один параметр, период за который вы набирате статистику положительных и отрицательных результатов. По сути это период оптимизации. Как вы избавляетесь от этого параметра?
И главная проблема это постулат о том, что история повторяется, т.е. что полученные вами статистические результаты можно применять в будущем.
В результате поиска на истории периода Standard Deviation находим этот параметр, при котором соотношение +/- больше 1. Говорю же, что на истории от 50 дней до 250 (год) период не изменяется или почти не изменяется. Я вставил 125 (ни ваши ни нашим). С каждым следующим баром этот параметр тоже почти не изменяется, хотя все-таки он меняется И ДОЛЖЕН меняться. И Это хорошо! Т.е. Standard Deviation постоянно подстраивается. А будущее оно не когда-то, а сейчас. Надо сегодня определиться с параметрами Standard Deviation, которым можно доверять, и при которых, как предполагается, количество выигрышных ситуаций больше количества проигрышных
Подбор периода Standard Deviation Вы производите, анализируя предыдущую историю при открытии нового бара. Возникают вопросы.
- глубина анализируемой истории ограничена? Это внешний параметр, или вы прогоняете цикл по все доступной истории?
- если внешний, допустим N баров, то оптимизируется ли этот параметр?
- влияет ли он (N, глубина анализируемой истории) на результаты?
то TheXpert:
Думаю, что ты не прав, автор действительно хочет обсудить, а не втюхать.
Не дали ответ на вопрос sand'а.
. - вроде как дал
- глубина анализируемой истории - это внешний параметр, или вы прогоняете цикл по все доступной истории?
. - был внешним параметром. Но оказалось он не нужен. Взял историю пол года 125 (из 250 рабочих дней)
- если внешний, допустим N баров, то оптимизируется ли этот параметр?
. - когда был параметром - оптимизировал. Бестолку
- влияет ли он (N, глубина анализируемой истории) на результаты?
. - практически не влияет.
Но главное, чему удивляюсь, и из-за чего пишу: оказывается Standard Deviation на участках, где он растет - ТРЭНД, где падает - ФЛЭТ. Вернее не совсем так, а так, что если ТРЭНД считать трендом, то количество случаев, когда свеча повторится по направлению существенно больше обратных случает. То же и для ФЛЭТА !!!???
Обдумать надо. Автор код не выкладывает, но описано достаточно подробно, чтобы написать самому. Только время найти... :))
Ну вот две главные функции. Сам советник пока не ахти.
//-------------------------------------------------------------- 12 -- int GetPeriod(int History=140, int MaPerBegin=4, int MaPerEnd=24) { double max = 0.0; for (int period = MaPerBegin; period <= MaPerEnd; period++) { double ok_p = 0; double ok_m = 0; for (int i=History; i>=0; i--) { bool white_0 = false; bool black_0 = false; bool white_1 = false; bool black_1 = false; if (Close[i] >Open[i]) white_0 = true; if (Close[i] <Open[i]) black_0 = true; if (Close[i+1]>Open[i+1]) white_1 = true; if (Close[i+1]<Open[i+1]) black_1 = true; bool flat = true; if (iStdDev(NULL,0,period,0,0,1,i) > iStdDev(NULL,0,period,0,0,1,i+1)) flat = false; if (((flat && ((white_0 && black_1) || (black_0 && white_1)))) || ((!flat && ((white_0 && white_1) || (black_0 && black_1))))) ok_p = ok_p + 1; else ok_m = ok_m + 1; } if (ok_p/ok_m >= max) { max = ok_p/ok_m; int per = period; } } return(per); } //-------------------------------------------------------------- 13 -- double GetDirection(int prd) { double stdv = iStdDev(NULL,0,prd,0,0,1,0) - iStdDev(NULL,0,prd,0,0,1,1); if (stdv > 0) { if (iClose(0,0,1) > iOpen(0,0,1)) return(1); if (iClose(0,0,1) < iOpen(0,0,1)) return(-1); } if (stdv < 0) { if (iClose(0,0,1) > iOpen(0,0,1)) return(-1); if (iClose(0,0,1) < iOpen(0,0,1)) return(1); } if (stdv == 0) { return(0); } }
Получается, у этого советника нет изменяемых входных параметров. Так же нет SL и TP, так как в начале нового бара, предыдущая позиция закрывается (в плюс или минус). Общи же результат на не коротком периоде - ПОЛОЖИТЕЛЕН!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Стандартный индикатор Standard Deviation, как известно, - индикатор волатильности рынка.
Замечено (не мной одним), что когда Standard Deviation падает, тогда - ФЛЭТ. Очевидно, если не ФЛЭТ, то ТРЭНТ (второе состояние рынка).
ФЛЭТ предполагает чередование "белых" и "черных" свечей. ТРЭНТ предполагает следование друг за другом одинаковых свечей: "белых" или "черных".
Только вот незадача: входные параметры Standard Deviation, частности, "Период" сильно влияют на то, попадают ли показания Standard Deviation, например, о ФЛЭТЕ с реальным ФЛЭТОМ или нет.
Так вот идея заключается в следующем:
- необходимо посчитать на определенной истории количество случаев, когда Standard Deviation "отгадывал" поведение свечей, а именно:
- если на текущем баре Standard Deviation падал, то текущая свеча противоположна предыдущей (например, текущая белая, предыдущая - черная). Значит отгадал.
- если на текущем баре Standard Deviation рос, то текущая свеча аналогична предыдущей (например, текущая белая, предыдущая тоже белая). Значит отгадал.
- если на этой истории число положительных результатов больше числа отрицательных результатов, значит параметры Standard Deviation правильны и его показаниям можно доверять. То есть в реале поступать так:
- если на текущем баре Standard Deviation стал меньше предыдущего (упал), то предполагаем, что следующая свеча будет противоположна предыдущей
- если на текущем баре Standard Deviation стал больше предыдущего (вырос), то предполагаем, что следующая свеча будет аналогична предыдущей
- соответственно входим в рынок. Положительный результат должен быть в такой же пропорции как и на истории.
Мной проведены "исследования". Для D1 история бралась от 50 до 250 дней. Оказалось, от истории результат зависит очень, очень слабо. При правильном подборе значений Standard Deviation, отношение числа положительных результатов к числу отрицательных результатов составляет, обычно, 1.15 - 1.25 раз. А это очень оптимистично! Осталось только подобрать период Standard Deviation.
Разработан советник на этом принципе - результаты мне понравились.
Алгоритм подбора периода Standard Deviation такой:
- в стандартных настройках параметров Standard Deviation применяется цена Close. Меняем её на Open, потому, что у текущего бара Open неизменен.
- в цикле изменяем период для Standard Deviation.
- для каждого значения периода считаем число положительных (см. выше) и отрицательных результатов
- если отношение положительных результатов к отрицательным больше единицы и больше предыдущего максимального значения - запоминаем его и период, при котором это случилось
- по завершении цикла получаем значение периода, при котором вероятность положительных результатов над отрицательными больше единицы.
- этот период используем как входной параметр для Standard Deviation.
- изменение (рост, падение) Standard Deviation и характер предыдущей свечи ("белая", "черная") влияют на принятие решения о входе в рынок (см.выше)
Как уже говорил, полученное значение периода Standard Deviation в очень малой степени зависит от истории, на которой он подбирается. Так же мало зависит от максимального и минимального значения периода, внутри которых организован цикл.
Получается, у этого советника нет изменяемых входных параметров. Так же нет SL и TP, так как в начале нового бара, предыдущая позиция закрывается (в плюс или минус). Общи же результат на не коротком периоде - ПОЛОЖИТЕЛЕН!