Скачать MetaTrader 5

Есть интересная идея!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Публикуй программы в Маркете. Зарабатывай с помощью своих знаний!
Ivan Katsko
557
Ivan Katsko 2011.04.21 09:12 

Стандартный индикатор 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, так как в начале нового бара, предыдущая позиция закрывается (в плюс или минус). Общи же результат на не коротком периоде - ПОЛОЖИТЕЛЕН!

khorosh
8199
khorosh 2011.04.21 10:40  
ikatsko:

А что разве оптимальный период нельзя найти при оптимизации советника?
Ivan Katsko
557
Ivan Katsko 2011.04.21 11:24  
khorosh:
А что разве оптимальный период нельзя найти при оптимизации советника?


В описанном мной варианте оптимизация происходит автоматически с каждым новым баром!!! И советника при этом не надо оптимизировать.

sand
963
sand 2011.04.21 11:31  

У вас остался еще один параметр, период за который вы набирате статистику положительных и отрицательных результатов. По сути это период оптимизации. Как вы избавляетесь от этого параметра?

И главная проблема это постулат о том, что история повторяется, т.е. что полученные вами статистические результаты можно применять в будущем.

Ivan Katsko
557
Ivan Katsko 2011.04.21 11:43  
sand:

У вас остался еще один параметр, период за который вы набирате статистику положительных и отрицательных результатов. По сути это период оптимизации. Как вы избавляетесь от этого параметра?

И главная проблема это постулат о том, что история повторяется, т.е. что полученные вами статистические результаты можно применять в будущем.



В результате поиска на истории периода Standard Deviation находим этот параметр, при котором соотношение +/- больше 1. Говорю же, что на истории от 50 дней до 250 (год) период не изменяется или почти не изменяется. Я вставил 125 (ни ваши ни нашим). С каждым следующим баром этот параметр тоже почти не изменяется, хотя все-таки он меняется И ДОЛЖЕН меняться. И Это хорошо! Т.е. Standard Deviation постоянно подстраивается. А будущее оно не когда-то, а сейчас. Надо сегодня определиться с параметрами Standard Deviation, которым можно доверять, и при которых, как предполагается, количество выигрышных ситуаций больше количества проигрышных
Виктор
Модератор
6559
Виктор 2011.04.21 12:03  
Не дали ответ на вопрос sand'а.
Подбор периода Standard Deviation Вы производите, анализируя предыдущую историю при открытии нового бара. Возникают вопросы.
- глубина анализируемой истории ограничена? Это внешний параметр, или вы прогоняете цикл по все доступной истории?
- если внешний, допустим N баров, то оптимизируется ли этот параметр?

- влияет ли он (N, глубина анализируемой истории) на результаты?

то TheXpert:
Думаю, что ты не прав, автор действительно хочет обсудить, а не втюхать.

Комбинатор
15924
Комбинатор 2011.04.21 12:11  
Буду рад, Виктор, если это так, но пока обсуждать особо нечего.
Ivan Katsko
557
Ivan Katsko 2011.04.21 12:14  
granit77:

Не дали ответ на вопрос sand'а.

. - вроде как дал

Подбор периода Standard Deviation Вы производите, анализируя предыдущую историю на каждом новом баре. Возникают вопросы.

- глубина анализируемой истории - это внешний параметр, или вы прогоняете цикл по все доступной истории?

. - был внешним параметром. Но оказалось он не нужен. Взял историю пол года 125 (из 250 рабочих дней)

- если внешний, допустим N баров, то оптимизируется ли этот параметр?

. - когда был параметром - оптимизировал. Бестолку

- влияет ли он (N, глубина анализируемой истории) на результаты?

. - практически не влияет.


Но главное, чему удивляюсь, и из-за чего пишу: оказывается Standard Deviation на участках, где он растет - ТРЭНД, где падает - ФЛЭТ. Вернее не совсем так, а так, что если ТРЭНД считать трендом, то количество случаев, когда свеча повторится по направлению существенно больше обратных случает. То же и для ФЛЭТА !!!???
Виктор
Модератор
6559
Виктор 2011.04.21 14:47  
Обдумать надо. Автор код не выкладывает, но описано достаточно подробно, чтобы написать самому. Только время найти... :))
Ivan Katsko
557
Ivan Katsko 2011.04.21 15:17  
granit77:
Обдумать надо. Автор код не выкладывает, но описано достаточно подробно, чтобы написать самому. Только время найти... :))

Ну вот две главные функции. Сам советник пока не ахти.

//-------------------------------------------------------------- 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);
   }
}
Актер
2301
Актер 2011.04.21 15:44  
ikatsko:

Получается, у этого советника нет изменяемых входных параметров. Так же нет SL и TP, так как в начале нового бара, предыдущая позиция закрывается (в плюс или минус). Общи же результат на не коротком периоде - ПОЛОЖИТЕЛЕН!

Результат по количеству угаданных свечей положительный. Но свечи, как известно, все разные, одна короткая, другая на 300 пунктов, третья - вообще дожи. И как в этом случае спрогнозировать, на какую свечу попадет профит, а на какую лось? Никак.
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий