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

 

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

 
ikatsko:

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


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

 

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

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

 
sand:

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

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



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

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

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

 
Буду рад, Виктор, если это так, но пока обсуждать особо нечего.
 
granit77:

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

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

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

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

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

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

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

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

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


Но главное, чему удивляюсь, и из-за чего пишу: оказывается Standard Deviation на участках, где он растет - ТРЭНД, где падает - ФЛЭТ. Вернее не совсем так, а так, что если ТРЭНД считать трендом, то количество случаев, когда свеча повторится по направлению существенно больше обратных случает. То же и для ФЛЭТА !!!???
 
Обдумать надо. Автор код не выкладывает, но описано достаточно подробно, чтобы написать самому. Только время найти... :))
 
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);
   }
}
 
ikatsko:

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

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