SpearmanRankCorrelation со старших ТФ

 

В Коде Базе что-то не получилось добавить реплику...

Кажется - удобно даже на малых ТФ.

To Rosh и все, все, все... кто заинтересуется и сможет: приведите код в божеский вид, плиzzzz. Иногда глючит, приходится перекомпилировать.

Файлы:
srcx3tf.mq4  8 kb
 
Я не стал вникать в код, просто сделал код в start() так, как я бы это сделал. Дополнительные проверки можете вставить сами, я просто пивел пример.

//+------------+-----------------------------------------------------+
//| v.14.03.07 |                                      SRCx3TF v2.mq4 |
//+------------Spearman,Rosh и Bookkeeper, 2007, yuzefovich@gmail.com|
//+------------+-----------------------------------------------------+
// http://www.improvedoutcomes.com/docs/WebSiteDocs/Clustering/
// Clustering_Parameters/Spearman_Rank_Correlation_Distance_Metric.htm
// http://www.infamed.com/stat/s05.html
// https://www.metaquotes.net/
// 'Коэффициент ранговой корреляции Спирмена - Spearman's Rank Correlation'
/********************************************************************/ 
/**************** With "SpearmanRankCorr.mq4" only ******************/ 
/********************************************************************/ 
#property copyright ""
#property link      ""
//----
#property indicator_separate_window
#property indicator_maximum  1.3
#property indicator_minimum -1.3
#property indicator_level1   0.8
#property indicator_level2  -0.8
#property indicator_level3   1.0
#property indicator_level4  -1.0
#property indicator_buffers  3
#property indicator_color1   Crimson 
#property indicator_color2   Purple 
#property indicator_color3   Blue 
/********************************************************************/ 
extern int    rangeN=14;
extern int    CalculatedBars=400;
extern int    Maxrange=30;
/********************************************************************/ 
double SRC1[];
double SRC2[];
double SRC3[];
/********************************************************************/ 
int    p1,p2,p3;
/********************************************************************/ 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit() 
   {
   return; 
   }
/********************************************************************/ 
void init() { IndicatorBuffers(4); 
SetIndexBuffer(0,SRC1);  SetIndexStyle(0,DRAW_LINE,EMPTY,2);
SetIndexBuffer(1,SRC2);  SetIndexStyle(1,DRAW_LINE,EMPTY,2);
SetIndexBuffer(2,SRC3);  SetIndexStyle(2,DRAW_LINE,EMPTY,2);
if(Period()>60) { Alert("For H1 maximum!"); return; }
if(Period()==1) { p1=5; p2=15; p3=30;
 IndicatorShortName("SRC x3TF ( M5, M15, M30 ) "); }
if(Period()==5) { p1=15; p2=30; p3=60;
 IndicatorShortName("SRC x3TF ( M15, M30, H1 ) "); }
if(Period()==15) { p1=30; p2=60; p3=240;
 IndicatorShortName("SRC x3TF ( M30, H1, H4 ) "); }
if(Period()==30) { p1=60; p2=240; p3=1440;
 IndicatorShortName("SRC x3TF ( H1, H4, D1 ) "); }
if(Period()==60) { p1=240; p2=1440; p3=0;
 IndicatorShortName("SRC x2TF ( H4, D1 ) "); }
return; }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() 
{ int counted_bars=IndicatorCounted();
  if(CalculatedBars<50) CalculatedBars=50;
  if(counted_bars<0) return(-1); 
/*
  if(counted_bars==0) max=Bars-1; 
  if(counted_bars>0) max=Bars-counted_bars+2*p3/Period()+1; 
  if(counted_bars>0) max=Bars-counted_bars; 
  if(max>CalculatedBars) max=CalculatedBars;
*/
   int n,n1,n2,n3,limit=Bars-counted_bars;   
   for(n=limit;n>=0;n--)
      {
      n1=iBarShift(Symbol(),p1,Time[n]);
      n2=iBarShift(Symbol(),p1,Time[n]);
      n3=iBarShift(Symbol(),p1,Time[n]);
      SRC1[n]=iCustom(NULL,p1,"SpearmanRankCorr",
               rangeN,CalculatedBars,Maxrange,0,n1);
      SRC2[n]=iCustom(NULL,p2,"SpearmanRankCorr",
               rangeN,CalculatedBars,Maxrange,0,n2);
      SRC3[n]=iCustom(NULL,p3,"SpearmanRankCorr",
             rangeN,CalculatedBars,Maxrange,0,n3);
      }
       
   return; 
   }
/********************************************************************/
Верхний индикатор - Ваш, нижний - мой вариант. Где-то есть ошибка в алгоритме, думаю, что у Вас. Последние данные совпадают (значения индикатора на нулевом баре).

 
Еще две сигнальные сделал
Файлы:
 
Спасибо, смотрю...

Пока не понял.
Чем отличаются n1, n2 и n3:

n1=iBarShift(Symbol(),p1,Time[n]);
n2=iBarShift(Symbol(),p1,Time[n]);
n3=iBarShift(Symbol(),p1,Time[n]);

n1=n2=n3 ? а если ничем, то что считается тута:

SRC1[n]=iCustom(NULL,p1,"SpearmanRankCorr",
rangeN,CalculatedBars,Maxrange,0,n1);
SRC2[n]=iCustom(NULL,p2,"SpearmanRankCorr",
rangeN,CalculatedBars,Maxrange,0,n2);
SRC3[n]=iCustom(NULL,p3,"SpearmanRankCorr",
rangeN,CalculatedBars,Maxrange,0,n3);

Кажется идет сравнение значений на барах с одинаковыми номерами, а не с одинаковым временем? или я опять?

Все х'окей!

n1=iBarShift(Symbol(),p1,Time[n]);
n2=iBarShift(Symbol(),p2,Time[n]);
n3=iBarShift(Symbol(),p3,Time[n]);

и картинки стали одинаковыми. Rosh - спасибо за красивый код! SpearmanRankCorr действительно очень удобен. Слив сокращает резко, по принципу "здесь не входи".
 
Integer писал (а):
Еще две сигнальные сделал

Спасибо, гляну. Вам тоже понравилось? Я его с уровнями на пробой\отскок - кажется даже с Акселем улобно стало. А уж в каналах...
 
Bookkeeper:
br>Кажется идет сравнение значений на барах с одинаковыми номерами, а не с одинаковым временем? или я опять?

Все х'окей!

n1=iBarShift(Symbol(),p1,Time[n]);
n2=iBarShift(Symbol(),p2,Time[n]);
n3=iBarShift(Symbol(),p3,Time[n]);

и картинки стали одинаковыми. Rosh - спасибо за красивый код! SpearmanRankCorr действительно очень удобен. Слив сокращает резко, по принципу "здесь не входи".

Да, при копировании забыл изменить периоды, Вы все правильно исправили. Все таки ошибка была у меня :)
 

И еще - какие CalculatedBars надо подставлять в iCustom в данном случае? и как это влияет на работу индюка (первый раз употребляю iCustom :).

 
Integer:
Еще две сигнальные сделал
Сигнальные, это, конечно, хорошо, но не принципиально.

А, вот сам индикатор NTF очень хорошо работает, в том числе и при визуальном тестировании на истории. Чей он? В коде авторства нет, NTF смахивает на MTF, но ранее не встречалось.

Спасибо, Integer.
 
granit77:
Integer:
Еще две сигнальные сделал
Сигнальные, это, конечно, хорошо, но не принципиально.

А, вот сам индикатор NTF очень хорошо работает, в том числе и при визуальном тестировании на истории. Чей он? В коде авторства нет, NTF смахивает на MTF, но ранее не встречалось.

Спасибо, Integer.




Мое производство;-) NTF это Next TimeFrame
 
Как водится, один грамотный напишет, а сотня неграмотных бросятся «улучшать». Мне кажется, окраска базовой линии индикатора значительно информативнее, чем сигнальные линии. Вот примитивный вариант цветного NTF и картинка для сравнения с авторским индикатором. Кроме того, использован оригинальный индикатор Rosh’a SpearmanRankCorr, он дает меньшее отставание, чем SpearmanRankCorrS, что видно на картинке. Надеюсь, что автор сделает раскраску получше, моя работает не совсем корректно. Кроме того, индикатор явно нуждается в сглаживании с минимальным запаздыванием, тогда ему цены не будет.