Помогите разобраться с советником

 

Добрый день уважаемые форумчане, недавно начал изучать MQL4 и вот какой вопрос возник :

есть индикатор: 

//+------------------------------------------------------------------+
//| свечи.mq4 |
//| Evgenio |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Evgenio"
#property link "https://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Green

//-------------------Входные параметры-----------------------------------------------------------
extern int RSI_Per=6;
extern int MA_Per=12;
extern int SmoothType=0;
extern int normal=5; //до какого знака нормализовать данные
extern int rasst=350; //расстояние стрелок от графика

//----------буферы для индикаторов---------------------------------------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//----------переменные используемые в расчетах---------------------------------------------------
int up=71; //код стрелки вверх (рисуется на графике)
int down=72; //код стрелки вниз (рисуется на графике)
bool bay=true;
bool str,str1=false;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int init()
  {
  SetIndexStyle(0,DRAW_LINE,0,1);
  SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
  SetIndexLabel(0,"RSI("+RSI_Per+")");
  SetIndexStyle(1,DRAW_LINE,0,2);
  SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
  SetIndexLabel(1,"MA ("+MA_Per+"), ");
  return(0);
  }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int deinit()
  {
  return(0);
  }

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int start()
  {
  int counted_bars=IndicatorCounted();
  int limit,cnt;
  if (counted_bars==0) 
  {
  limit=Bars-RSI_Per-1;
  for(cnt=limit; cnt>=0; cnt--)
  {
  ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
  }
  for(cnt=limit-MA_Per; cnt>=0; cnt--)
  {
  ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
  }  
   
  }
 
// Первая свеча (вторая с лева)---------------------------------------
double H=NormalizeDouble(High[1],normal); 
double L=NormalizeDouble(Low[1],normal);
double C=NormalizeDouble(Close[1],normal); 
double Op=NormalizeDouble(Open[1],normal); 

// Вторая свеча (третья слева)---------------------------------------
double H_1=NormalizeDouble(High[2],normal); 
double L_1=NormalizeDouble(Low[2],normal);
double C_1=NormalizeDouble(Close[2],normal); 
double Op_1=NormalizeDouble(Open[2],normal);

// Третья свеча (четвертая слева)---------------------------------------
double H_2=NormalizeDouble(High[3],normal); 
double L_2=NormalizeDouble(Low[3],normal);
double C_2=NormalizeDouble(Close[3],normal); 
double Op_2=NormalizeDouble(Open[3],normal);

// Четвертая свеча (Пятая слева)---------------------------------------
double H_3=NormalizeDouble(High[4],normal); 
double L_3=NormalizeDouble(Low[4],normal);
double C_3=NormalizeDouble(Close[4],normal); 
double Op_3=NormalizeDouble(Open[4],normal);

// Пятая свеча (Шестая слева)---------------------------------------
double H_4=NormalizeDouble(High[5],normal); 
double L_4=NormalizeDouble(Low[5],normal);
double C_4=NormalizeDouble(Close[5],normal); 
double Op_4=NormalizeDouble(Open[5],normal);

//--------------
double par=NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),normal);
double par1=NormalizeDouble(iSAR(Symbol(),1440,0.02,0.2,0),normal);

// для коротких позиций******************************************************************  

// Медвежье поглощение----------------------------------------------------------------------------------------------------------------------
if (C_4-((C_4-Op_4)/2)<C_3-((C_3-Op_3)/2) && C_3-((C_3-Op_3)/2)<C_2-((C_2-Op_2)/2) && C_2-((C_2-Op_2)/2)<C_1-((C_1-Op_1)/2) && Op_1<C_1 && Op>C && Op>C_1 && C<Op_1)
  {
  //рисование стрелки-----------------------------------------------
  ObjectCreate("down"+Op, OBJ_ARROW, 0, Time[1], Open[1]+rasst*Point);
  ObjectSet("down"+Op, OBJPROP_ARROWCODE, down);
  ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
  //надпись---------------------------------------------------------
  ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa", "Фигура разворота", 12, "Times New Roman", Yellow);
  ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
  ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa1", "Медвежье поглощение", 12, "Times New Roman", Yellow);
  ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
  bay=false;
  str1=true;
  }

// для длинных позиций******************************************************************  

// Бычье поглощение--------------------------------------------------
if (Op_4-((Op_4-C_4)/2)>Op_3-((Op_3-C_3)/2) && Op_3-((Op_3-C_3)/2)>Op_2-((Op_2-C_2)/2) && Op_2-((Op_2-C_2)/2)>Op_1-((Op_1-C_1)/2) && Op_1>C_1 && Op<C && Op<C_1 && C>Op_1)
  {
  //рисование стрелки-----------------------------------------------
  ObjectCreate("up"+Op, OBJ_ARROW, 0, Time[1], Open[1]-rasst*Point);
  ObjectSet("up"+Op, OBJPROP_ARROWCODE, up);
  ObjectSet("up"+Op, OBJPROP_COLOR, Aqua);
  //надпись---------------------------------------------------------
  ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa", "Фигура разворота", 12, "Times New Roman", Aqua);
  ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
  ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa1", "Бычье поглощение", 12, "Times New Roman", Aqua);
  ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
  bay=true;
  str=true;
  }


//++++++++++++++++++++++++++++++++++++++++++++

//здесь рисуются стрелки на RSI


  if (str==true && bay==true && ExtMapBuffer1[cnt]>ExtMapBuffer2[cnt] && par<H-((H-L)/2) && par1<H-((H-L)/2)) 
  {
  ObjectCreate("up1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]-10);
  ObjectSet("up1xv"+Op, OBJPROP_ARROWCODE, 225);
  str=false;
  ObjectSet("up1xv"+Op, OBJPROP_COLOR, Aqua);
  }
  if (str1==true && bay==false && ExtMapBuffer1[cnt]<ExtMapBuffer2[cnt] && par>H-((H-L)/2) && par1>H-((H-L)/2)) 
  {
  ObjectCreate("down1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]+10);
  ObjectSet("down1xv"+Op, OBJPROP_ARROWCODE, 226);
  str1=false;
  ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
   
  }

  return(0);
  }
//+------------------------------------------------------------------+


хочу написать советника по этому индикатору, пытаюсь воспользоваться функцией iCstom

//+------------------------------------------------------------------+
//| олол.mq4 |
//| Evgenio |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Evgenio"
#property link "https://www.metaquotes.net"

//+------------------------------------------------------------------+
int start()
  {
double val=iCustom(NULL,60,"qw",0,0); // double val=iCustom(NULL,60,"qw",6,12,0,350,0,0);
Print (val);
  return(0);
  }
//+------------------------------------------------------------------+


в журнал пишется следующее

2009.07.21 11:52:34 TestGenerator: unmatched data error (volume limit 4249 at 2009.06.16 16:00 exceeded)

а потом 

2009.07.21 11:52:43 2009.06.02 11:16 олол AUDUSD,H1: 

в чем проблема подскажите ????

С уважением !

 
 

почитал спасибо!

но вот еще вопрос, переписал код и добавил еще один буфер специально для советника 

//+------------------------------------------------------------------+
//| свечи.mq4 |
//| Evgenio |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Evgenio"
#property link "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green

//-------------------Входные параметры-----------------------------------------------------------
extern int test=1;
extern int RSI_Per=6;
extern int MA_Per=12;
extern int SmoothType=0;
extern int normal=5; //до какого знака нормализовать данные
extern int rasst=350; //расстояние стрелок от графика

//----------буферы для индикаторов---------------------------------------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];

//----------переменные используемые в расчетах---------------------------------------------------
int up=71; //код стрелки вверх (рисуется на графике)
int down=72; //код стрелки вниз (рисуется на графике)
bool bay=true;
bool str,str1=false;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int init()
  {
  SetIndexStyle(0,DRAW_LINE,0,1);
  SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
  SetIndexLabel(0,"RSI("+RSI_Per+")");
  SetIndexStyle(1,DRAW_LINE,0,2);
  SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
  SetIndexLabel(1,"MA ("+MA_Per+"), ");
  SetIndexBuffer(2,ExtMapBuffer3);//Свойства MA

  return(0);
  }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int deinit()
  {
  return(0);
  }

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int start()
  {
  int counted_bars=IndicatorCounted();
  int limit,cnt;
  ExtMapBuffer3[test]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,test);
  if (counted_bars==0) 
  {
  limit=Bars-RSI_Per-1;
  for(cnt=limit; cnt>=0; cnt--)
  {
  ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
  }
  for(cnt=limit-MA_Per; cnt>=0; cnt--)
  {
  ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
  }  
   
  }
 
// Первая свеча (вторая с лева)---------------------------------------
double H=NormalizeDouble(High[1],normal); 
double L=NormalizeDouble(Low[1],normal);
double C=NormalizeDouble(Close[1],normal); 
double Op=NormalizeDouble(Open[1],normal); 

// Вторая свеча (третья слева)---------------------------------------
double H_1=NormalizeDouble(High[2],normal); 
double L_1=NormalizeDouble(Low[2],normal);
double C_1=NormalizeDouble(Close[2],normal); 
double Op_1=NormalizeDouble(Open[2],normal);

// Третья свеча (четвертая слева)---------------------------------------
double H_2=NormalizeDouble(High[3],normal); 
double L_2=NormalizeDouble(Low[3],normal);
double C_2=NormalizeDouble(Close[3],normal); 
double Op_2=NormalizeDouble(Open[3],normal);

// Четвертая свеча (Пятая слева)---------------------------------------
double H_3=NormalizeDouble(High[4],normal); 
double L_3=NormalizeDouble(Low[4],normal);
double C_3=NormalizeDouble(Close[4],normal); 
double Op_3=NormalizeDouble(Open[4],normal);

// Пятая свеча (Шестая слева)---------------------------------------
double H_4=NormalizeDouble(High[5],normal); 
double L_4=NormalizeDouble(Low[5],normal);
double C_4=NormalizeDouble(Close[5],normal); 
double Op_4=NormalizeDouble(Open[5],normal);

//--------------
double par=NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),normal);
double par1=NormalizeDouble(iSAR(Symbol(),1440,0.02,0.2,0),normal);

// для коротких позиций******************************************************************  

// Медвежье поглощение----------------------------------------------------------------------------------------------------------------------
if (C_4-((C_4-Op_4)/2)<C_3-((C_3-Op_3)/2) && C_3-((C_3-Op_3)/2)<C_2-((C_2-Op_2)/2) && C_2-((C_2-Op_2)/2)<C_1-((C_1-Op_1)/2) && Op_1<C_1 && Op>C && Op>C_1 && C<Op_1)
  {
  //рисование стрелки-----------------------------------------------
  ObjectCreate("down"+Op, OBJ_ARROW, 0, Time[1], Open[1]+rasst*Point);
  ObjectSet("down"+Op, OBJPROP_ARROWCODE, down);
  ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
  //надпись---------------------------------------------------------
  ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa", "Фигура разворота", 12, "Times New Roman", Yellow);
  ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
  ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa1", "Медвежье поглощение", 12, "Times New Roman", Yellow);
  ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
  bay=false;
  str1=true;
  }

// для длинных позиций******************************************************************  

// Бычье поглощение--------------------------------------------------
if (Op_4-((Op_4-C_4)/2)>Op_3-((Op_3-C_3)/2) && Op_3-((Op_3-C_3)/2)>Op_2-((Op_2-C_2)/2) && Op_2-((Op_2-C_2)/2)>Op_1-((Op_1-C_1)/2) && Op_1>C_1 && Op<C && Op<C_1 && C>Op_1)
  {
  //рисование стрелки-----------------------------------------------
  ObjectCreate("up"+Op, OBJ_ARROW, 0, Time[1], Open[1]-rasst*Point);
  ObjectSet("up"+Op, OBJPROP_ARROWCODE, up);
  ObjectSet("up"+Op, OBJPROP_COLOR, Aqua);
  //надпись---------------------------------------------------------
  ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
  ObjectSetText(

"zavesa", "Фигура разворота", 12, "Times New Roman", Aqua);
  ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
  ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
  ObjectSetText("zavesa1", "Бычье поглощение", 12, "Times New Roman", Aqua);
  ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
  ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
  bay=true;
  str=true;
  }

//++++++++++++++++++++++++++++++++++++++++++++

//здесь рисуются стрелки на RSI


  if (str==true && bay==true && ExtMapBuffer1[cnt]>ExtMapBuffer2[cnt] && par<H-((H-L)/2) && par1<H-((H-L)/2)) 
  {
  ObjectCreate("up1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]-10);
  ObjectSet("up1xv"+Op, OBJPROP_ARROWCODE, 225);
  str=false;
  ObjectSet("up1xv"+Op, OBJPROP_COLOR, Aqua);
  }
  if (str1==true && bay==false && ExtMapBuffer1[cnt]<ExtMapBuffer2[cnt] && par>H-((H-L)/2) && par1>H-((H-L)/2)) 
  {
  ObjectCreate("down1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]+10);
  ObjectSet("down1xv"+Op, OBJPROP_ARROWCODE, 226);
  str1=false;
  ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
   
  }

  return(0);
  }
//+------------------------------------------------------------------+

советник тотже что и посте выше 

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

2. почему в буфере всегда 0 ведь вроде должно быть значение RSI ?


Будет ли профит ))))

С уважением!

 
ну кто нибудь подскажет ?
 

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

 

придется переделывать с помощью вот этого https://www.mql4.com/ru/search/?keyword=%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81

поиск - "перенос"

 
DDFedor >>:

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

а что искать то хоть 

 

да... поставить правильный вопрос - бОльшая часть решения этого вопроса...

ЧТО хотите отыскать... то и искать надо... имхо...

Причина обращения: