Прошу помочь вынуть сигналы из индикатора.

 

Здравствуйте!

Помогите пожалуйста, кто может. Есть индикатор, очень хочется потестировать его сигналы, но никак не могу понять, где в самом индикаторе отрабатывается условия отображения стрелки на buy и sell. А хочется выдернуть их в советника. Бьюсь уже 2 недели, но так ничего и не получилось (только осваиваю mql). Если несложно, укажите пожалуйста место из которого добыть этот самый сигнал или пример функции, которая передавала бы его в советник. А то в ручном режиме уже сил нет тестировать его сиглалы. Код прилагаю.

#property copyright "Copyright © 2008, HomeSoft-Tartan Corp."
#property link      "spiky@transkeino.ru"
 
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Magenta
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_color5 Aqua
#property indicator_color6 Gold
 
//---- indicator parameters
extern int    SnakeRange   = 3; 
extern int    FilterPeriod = 21; 
extern double MartFiltr    = 2.0;
extern int    PriceConst   = 6;
extern int LDepth=20;
extern int BDepth=30;
extern int Deviation=5;
extern int Backstep=3;
extern int Alerts=0;
extern int kb=1;
extern int nBars=500;
 
double BZZBuff[],LZZBuff[],StartBuff[],StopBuff[],UpBuff[],DnBuff[],ssrone,ssrnul,bzz,lzz,ibzz,ilzz,bbzz,
       llzz,zz,zzold,sd,zzb,lzold;
int shift,zzbar,i,fs,fb,pr,k,ns,nb,bbar;
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,BZZBuff);
   SetIndexBuffer(1,LZZBuff);
   SetIndexBuffer(2,StartBuff);
   SetIndexBuffer(3,StopBuff);  
   SetIndexBuffer(4,UpBuff); 
   SetIndexBuffer(5,DnBuff);   
    
   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Magenta);
   SetIndexStyle(1,DRAW_SECTION,STYLE_DOT,0,Red);   
   SetIndexStyle(2, DRAW_LINE, STYLE_SOLID,2,Lime);
   SetIndexStyle(3, DRAW_LINE, STYLE_SOLID,2,Red);
   SetIndexStyle(4,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(4,241); 
   SetIndexStyle(5,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(5,242);
   
   SetIndexEmptyValue(0,0.0);  
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);  
   SetIndexEmptyValue(3,0.0); 
   SetIndexEmptyValue(4,0.0);
   SetIndexEmptyValue(5,0.0);
   
if (Period()==5) sd=1;  
if (Period()==15) sd=3;  
if (Period()==30) sd=5;   
if (Period()==60) sd=10;
if (Period()==240) sd=15;  
if (Period()==1440) sd=20;
if (Period()>1440) sd=25;
     
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
 
   if (Period()<5) {Comment("\n","  Работать можно на ТФ=M5 и выше. Смените ТФ!");return(0);}
 
  for (shift=nBars;shift>=0;shift--)
   {   
   if (bzz!=0 && lzz!=0 && bzz!=zzold && lzz!=zzold && bzz==lzz) zzold=bzz;
   
       bzz=iCustom(NULL,0,"ZZSA",BDepth,Deviation,Backstep,Alerts,nBars,0,shift+1);
       bbzz=iCustom(NULL,0,"ZZSA",BDepth,Deviation,Backstep,Alerts,nBars,0,shift);  
       BZZBuff[shift]=bbzz; 
   if (lzz!=0 && lzold!=lzz) lzold=lzz; 
       lzz=iCustom(NULL,0,"ZZS",LDepth,Deviation,Backstep,nBars,0,shift+1);
       llzz=iCustom(NULL,0,"ZZS",LDepth,Deviation,Backstep,nBars,0,shift);
       LZZBuff[shift]=llzz;
         
       ssrone=iCustom(NULL,0,"SSRC",SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,shift+1);
       ssrnul=iCustom(NULL,0,"SSRC",SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,shift);   
       
  for (i=1;i<nBars;i++)
   {
       zzb=iCustom(NULL,0,"ZZSA",BDepth,Deviation,Backstep,Alerts,nBars,0,i);
   if (zzb!=0) {bbar=i;break;}         
   }
   if (bzz!=0 && lzz!=0) k=0;     
      
   if (k==0) 
   {   k=1; 
   if (bzz!=zzold && zzold>bzz) {fb=1;fs=0;nb=0;zzbar=shift+1;}
   if (bzz!=zzold && zzold<bzz) {fs=1;fb=0;ns=0;zzbar=shift+1;}
   }
   
   if (fs==1 && ssrone>ssrnul && ssrone>0 && ns==0 && bbar>=kb &&  
       Close[shift]<=zzold-3*sd*Point && Close[shift]<Open[shift])  
   {    
        ns=1;DnBuff[shift]=High[shift]+2*sd*Point; if (DnBuff[shift+1]!=0) DnBuff[shift+1]=0;
   }
   
   if (fb==1 && ssrone<ssrnul && ssrone<0 && nb==0 && bbar>=kb && 
       Close[shift]>=zzold+3*sd*Point && Close[shift]>Open[shift]) 
   { 
        nb=1;UpBuff[shift]=Low[shift]-2*sd*Point; if (UpBuff[shift+1]!=0) UpBuff[shift+1]=0;
   }
 
   if (fb==1 && k==1 && lzold==zzold)
   {   
  for (i=zzbar;i>=zzbar-10;i--) 
   {   
   if (i>3) {StartBuff[i+1]=zzold+3*sd*Point;StopBuff[i+1]=zzold-sd*Point;}
   } 
       Comment("\n"," Покупай по сигналу при цене от ",zzb+3*sd*Point," после закрытия бара");
       StopBuff[i]=0;StartBuff[i]=0; 
   }  
        
   if (fs==1 && k==1 && lzold==zzold)
   {
  for (i=zzbar;i>=zzbar-10;i--) 
   {
   if (i>3) {StartBuff[i+1]=zzold-3*sd*Point;StopBuff[i+1]=zzold+sd*Point;}//zzold-zzb
   }
       Comment("\n"," Продавай по сигналу при цене от ",zzb-3*sd*Point," посде закрытия бара"); 
       StopBuff[i]=0;StartBuff[i]=0;   
   }
   
  for (i=zzbar+1;i<zzbar+nBars;i++) {StartBuff[i]=0;StopBuff[i]=0;} //????
   
   if ((fb==1 && Ask>zzold+3*sd*Point && ssrone<=ssrnul && ssrnul>0) || 
       (fs==1 && Bid<zzold-3*sd*Point && ssrone>=ssrnul && ssrnul<0))
   {
       Comment("\n","  Можешь торговать на свой страх и риск!  Но!!!",
               "\n","  Продажа возможна=",fs,"  Покупка возможна=",fb);StopBuff[i]=0;StartBuff[i]=0;
   }            
   }           
   //----
   return(0);
   }
//+------------------------------------------------------------------+
Заранее благодарю за помощь.
 

за стрелки отвечают буфера UpBuf и DnBuf

Места где элементам этих массивов присваиваются значения и есть твои искомые.

 
sergeev:

за стрелки отвечают буфера UpBuf и DnBuf

Места где элементам этих массивов присваиваются значения и есть твои искомые.

Спасибо за ответ! Но то ли я тупой, то ли руки не оттуда растут. Пробовал ставить принты после мест, где присваивается значения элементам буферов UpBuff и DnBuff, он начинает просто поочередно, на каждом тике выбрасывать значения то покупки, то продажи, а стрелок там и в помине нет. Может я что-то делаю не так?

 
Бросьте эту идею. Если вы заставите советник обращаться к этому индикатору, он будет (если будет) делать тест, с такими тормозами, что у Вас волосы дыбом встанут, а оптимизация за более-менее нормальный период не произведется,скорее всего, даже за тот же реальный период времени.
 
D500_Rised:
Бросьте эту идею. Если вы заставите советник обращаться к этому индикатору, он будет (если будет) делать тест, с такими тормозами, что у Вас волосы дыбом встанут, а оптимизация за более-менее нормальный период не произведется,скорее всего, даже за тот же реальный период времени.

Благодарю за совет. Да, действительно нагружать машину такой тандем будет прилично, но бросить не могу, уж очень неплохое соотношение профитных и лоссовых сигналов дает индикатор на H1. Если система окажется действительно рабочей, готов тратить на нее времени столько, сколько потребуется для того, чтобы она корректно заработала. Пока буду продолжать тестировать в ручном режиме и мучить код своими, пока что непрямыми руками. :-)

 
StSpirit:
D500_Rised:
Бросьте эту идею. Если вы заставите советник обращаться к этому индикатору, он будет (если будет) делать тест, с такими тормозами, что у Вас волосы дыбом встанут, а оптимизация за более-менее нормальный период не произведется,скорее всего, даже за тот же реальный период времени.

Благодарю за совет. Да, действительно нагружать машину такой тандем будет прилично, но бросить не могу, уж очень неплохое соотношение профитных и лоссовых сигналов дает индикатор на H1. Если система окажется действительно рабочей, готов тратить на нее времени столько, сколько потребуется для того, чтобы она корректно заработала. Пока буду продолжать тестировать в ручном режиме и мучить код своими, пока что непрямыми руками. :-)

Вы на тестере проверили он не перерисовывается ?

 
А что это за индикатор не скажишь?
 
artem писал (а): А что это за индикатор не скажишь?

Это индикатор Тартана (здесь - Gep), построен на идее совпадения разных ZZ, подробности у него на сайте.

Для него описана стратегия, которая несколько сложнее, чем просто работать по сигналам из буферов.

Конечно, перерисовывается, но при подборе параметров реже, чем одинарный ZZ.

Хороший пример того, как индикатор можно использовать вручную, но нельзя в эксперте. То есть, эксперт-то сделать 

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

 
YuraZ:
StSpirit:
D500_Rised:
Бросьте эту идею. Если вы заставите советник обращаться к этому индикатору, он будет (если будет) делать тест, с такими тормозами, что у Вас волосы дыбом встанут, а оптимизация за более-менее нормальный период не произведется,скорее всего, даже за тот же реальный период времени.

Благодарю за совет. Да, действительно нагружать машину такой тандем будет прилично, но бросить не могу, уж очень неплохое соотношение профитных и лоссовых сигналов дает индикатор на H1. Если система окажется действительно рабочей, готов тратить на нее времени столько, сколько потребуется для того, чтобы она корректно заработала. Пока буду продолжать тестировать в ручном режиме и мучить код своими, пока что непрямыми руками. :-)

Вы на тестере проверили он не перерисовывается ?

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

 
granit77:
artem писал (а): А что это за индикатор не скажишь?

Это индикатор Тартана (здесь - Gep), построен на идее совпадения разных ZZ, подробности у него на сайте.

Для него описана стратегия, которая несколько сложнее, чем просто работать по сигналам из буферов.

Конечно, перерисовывается, но при подборе параметров реже, чем одинарный ZZ.

Хороший пример того, как индикатор можно использовать вручную, но нельзя в эксперте. То есть, эксперт-то сделать 

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

Стратегию Тартана не видел, а индикатор очень нравится. Сейчас пробую по разному фильтровать и думаю создам свою, в основу которой ляжет его индикатор.

 
Спасибо за ответ