Разностное исчисление, примеры. - страница 10

 
Aleksey Panfilov:

Чтобы посмотреть динамику.

Тот же эксперт на М15.



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


По картинкам, то ценное по моему мнению

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

 

Тот же эксперт на М5. История короче примерно в два раза.


Файлы:
2018_02_05.zip  219 kb
 
СанСаныч Фоменко:

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


По картинкам, то ценное по моему мнению

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

Спасибо.

Согласен с Вами. Видимо на М30 и теперь еще на М5 индикатор лучше синхронизируется с поведением цены. 

И конечно,  пока это оценочный, очень "грубый" подход. 

 

Хочу обратить внимание, что выделенное желтым ресурсосберегающее условие в приложенных индикаторах обнулено, чтобы не перерисовываемая линия отображалась на всем графике.

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;
      a5_Buffer[i+92]=a1_Buffer[i];   if(i>=0) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  4*a5_Buffer[i+1+z]  -  6*a5_Buffer[i+2+z]  +  4*a5_Buffer[i+3+z]  - 1*a5_Buffer[i+4+z];  }}
      a2_Buffer[i+92-leverage]=a5_Buffer[i+92-leverage]; 

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

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;
      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=0) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  4*a5_Buffer[i+1+z]  -  6*a5_Buffer[i+2+z]  +  4*a5_Buffer[i+3+z]  - 1*a5_Buffer[i+4+z];  }}
      a2_Buffer[i+92-leverage]=a5_Buffer[i+92-leverage]; 

Или определенным числом последних.

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;
      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1000) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  4*a5_Buffer[i+1+z]  -  6*a5_Buffer[i+2+z]  +  4*a5_Buffer[i+3+z]  - 1*a5_Buffer[i+4+z];  }}
      a2_Buffer[i+92-leverage]=a5_Buffer[i+92-leverage]; 

Но при этом индикатор при визуализации, на всем графике, не будет соответствовать просчитанному.

 

Добавил к индикатору возможность выбора степени экстраполяции:

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      if(line_power ==1)   {    a5_Buffer[i+92]=a1_Buffer[i];   if(i>=0) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z];  }}}
      if(line_power ==2)   {    a5_Buffer[i+92]=a1_Buffer[i];   if(i>=0) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  3*a5_Buffer[i+1+z]  -  3*a5_Buffer[i+2+z]  +  1*a5_Buffer[i+3+z];  }}}
      if(line_power ==3)   {    a5_Buffer[i+92]=a1_Buffer[i];   if(i>=0) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  4*a5_Buffer[i+1+z]  -  6*a5_Buffer[i+2+z]  +  4*a5_Buffer[i+3+z]  - 1*a5_Buffer[i+4+z];  }}}
      if(line_power ==4)   {    a5_Buffer[i+92]=a1_Buffer[i];   if(i>=0) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  5*a5_Buffer[i+1+z]  - 10*a5_Buffer[i+2+z]  +  10*a5_Buffer[i+3+z] - 5*a5_Buffer[i+4+z]  +  1*a5_Buffer[i+5+z];  }}}

      a2_Buffer[i+92-leverage]=a5_Buffer[i+92-leverage]; 
 

И соответственно в эксперте.

 ma_1=iCustom(NULL,0,"2018_02_08_EMA_Polynom_s4_s1_4_p72_v.2",line_1_power,leverage_1,300,3,0);
 ma_2=iCustom(NULL,0,"2018_02_08_EMA_Polynom_s4_s1_4_p72_v.2",line_2_power,leverage_2,300,3,0);
 ma_1_P=iCustom(NULL,0,"2018_02_08_EMA_Polynom_s4_s1_4_p72_v.2",line_1_power,leverage_1,300,3,1);
 ma_2_P=iCustom(NULL,0,"2018_02_08_EMA_Polynom_s4_s1_4_p72_v.2",line_2_power,leverage_2,300,3,1);
 

Оптимизация на пересечение линией экстраполированной полиномом четвертой степени (при плече экстраполяции 72, это цена открытия бара), линии экстраполированной полиномом третей степени.


Файлы:
2018_02_08_2.zip  211 kb
 

Просматривал ветку и обратил внимание, что не заслуженно погиб комментарий из сообщения 64. ))

Уважаемые модераторы, можно ли его восстановить, на прежнем месте в соответствующем контексте? Или открыть мне для редактирования ? (ниже, сам комментарий )

Aleksey Panfilov 2018.01.30 21:41    RU
Aleksey Panfilov:

Да.

На прямую связано с биномом Ньютона. И треугольником Паскаля.  Добавлено  30.01.2018  

Для равноотстоящих точек справедливо:

         1*Y1-2*Y2+1*Y3=0 -  разностное уравнение прямой. 

     1*Y1-3*Y2+3*Y3-1*Y4 =0 - разностное уравнение параболы второй степени.

1*Y1-4*Y2+6*Y3-4*Y4 + 1*Y5 =0 - разностное уравнение параболы третьей степени.

Так же пересекается с темами:

 https://www.mql5.com/ru/forum/61389/page48#comment_5633264

 https://www.mql5.com/ru/forum/211220/page2#comment_5632736 .

1*Y1-5*Y2+10*Y3-10*Y4 + 5*Y5 -1*Y6=0 - разностное уравнение параболы четвертой степени.

1*Y1-6*Y2+15*Y3-20*Y4 + 15*Y5 -6*Y6 + 1*Y7=0 - разностное уравнение параболы пятой степени.

1*Y1-7*Y2+21*Y3-35*Y4 + 35*Y5 -21*Y6 + 7*Y7 -1*Y8=0 - разностное уравнение параболы шестой степени.


Непосредственно из  уравнений для равноотстоящих точек вытекают интерполяционные формулы с плечом 1 интервал.

 3*Y2 =1*Y1+3*Y3-1*Y4  - интерполяция параболой второй степени.

 4*Y2 =1*Y1+6*Y3-4*Y4 + 1*Y5  - интерполяция параболой третьей степени.

 5*Y2=1*Y1+10*Y3-10*Y4 + 5*Y5 -1*Y6 - интерполяция параболой  четвертой степени.

 6*Y2=1*Y1+15*Y3-20*Y4 + 15*Y5 -6*Y6 + 1*Y7 - интерполяция параболой пятой степени.

 7*Y2=1*Y1+21*Y3-35*Y4 + 35*Y5 -21*Y6 + 7*Y7 -1*Y8 - интерполяция параболой шестой степени.

В виде кода:

 
      a1_Buffer[i]=(open[i]   +3*a1_Buffer[i+1 ]   -1*a1_Buffer[i+2 ]  )/3;
      a2_Buffer[i]=(open[i]   +6*a2_Buffer[i+1 ]   -4*a2_Buffer[i+2 ]   +1*a2_Buffer[i+3 ]  )/4;
      a3_Buffer[i]=(open[i]   +10*a3_Buffer[i+1 ]  -10*a3_Buffer[i+2 ]  +5*a3_Buffer[i+3 ]  -1*a3_Buffer[i+4 ])/5;
      a4_Buffer[i]=(open[i]   +15*a4_Buffer[i+1 ]  -20*a4_Buffer[i+2 ]  +15*a4_Buffer[i+3 ]  -6*a4_Buffer[i+4 ]  +1*a4_Buffer[i+5 ])/6;
      a5_Buffer[i]=(open[i]   +21*a5_Buffer[i+1 ]  -35*a5_Buffer[i+2 ]  +35*a5_Buffer[i+3 ]  -21*a5_Buffer[i+4 ]  +7*a5_Buffer[i+5 ]  -1*a5_Buffer[i+6 ])/7;

На рисунке отображено начало графика.

И хорошо видно, что линии построенные полиномами 2-4 степеней (серая, синяя, зеленая) уверенно держаться около графика.

А линии построенные полиномами 5,6 степеней (красная, желтая), попадают в нечто похожее на резонанс или автоколебания, и постепенно накапливают амплитуду. Увеличение плеча для полиномов 5 и больше степеней  не меняют ситуацию.


Интерполяция разностным уравнением функции, составленной из суммы синусоид заданных периодов, позволяет повысить "как бы степень полинома", например до 12 степени (это вроде 6 синусоид около константы).

И вместе стем, с подобной ситуацией (резонансом) можно столкнуться и интерполируя функцией одной синусоиды около константы (аналог полинома второй степени), при определенном сочетании плеча и периода.

Аналогия с полиномами проводится по числу минимально необходимых точек.

Файлы:
 

Оптимизация индикатора Nikolai Semko Banzai.mq4  из сообщения 57 этой ветки.

Эксперт тот же, оптимизируемый параметр сдвиг линии в право.

 ma_1=iCustom(NULL,0,"Banzai",leverage_1, 0,leverage_1);
 ma_2=iCustom(NULL,0,"Banzai",leverage_2, 0,leverage_2);
 ma_1_P=iCustom(NULL,0,"Banzai",leverage_1, 0,leverage_1+1);
 ma_2_P=iCustom(NULL,0,"Banzai",leverage_2, 0,leverage_2+1);

Результаты:


Файлы:
2018_02_09.zip  245 kb
 

Оптимизация индикатора Nikolai Semko Banzai.mq4  из сообщения 57 этой ветки.

 Тот же на  М15:


Файлы:
2018_02_09_2.zip  212 kb
 

На большинстве графиков оптимизации хорошо видна граница "реверса" сигнала (красная линия), и соответственно определенная "зеркальность" результатов (пример выделен желтой линией).