Изучаем и пишем вместе на MQL5 - страница 11

 
m_a_sim:

получается, что все дело в индикаторах? тестер мне пишет ошибку

2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3_5.mq5' (83,9)

 

Выход за пределы массива.

Смотрите код  'trend_v3.mq5'. Даже конкретные строки указаны.

 
m_a_sim:

получается, что все дело в индикаторах? тестер мне пишет ошибку

2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3_5.mq5' (83,9)

 


alexvd:

Выход за пределы массива.

Смотрите код  'trend_v3.mq5'. Даже конкретные строки указаны.

Интересно а сами по себе индюки работают?
 
alexvd:

Выход за пределы массива.

Смотрите код  'trend_v3.mq5'. Даже конкретные строки указаны.

скорее всего дело в индикаторе, я его переделал, c mql4, он прорисовывается, но ошибку выдает, еще не считается новый бар, не могу понять, как грамотно сделать, чтобы не было конфликтов с mql5

вот trend_v3. Вы имеете ввиду 9 строку?

//+------------------------------------------------------------------+
//|                                                     trend_v3.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window


#property  indicator_buffers 1
#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property  indicator_color1  Blue


input int period =20;

double A[];
//+--------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

 SetIndexBuffer(0,A, INDICATOR_DATA);
   ArraySetAsSeries(A,true);

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
  //int    counted_bars=IndicatorCounted();
   int   i, j, k, q, limit;
   double X[4][4], Y[4], B[4], x[4][2000], y[2000], a;
   
   // int Bar=Bars("EURUSD",_Period);
    ArraySetAsSeries(close,true);
 // limit=BarsCalculated-counted_bars;
 for(q=prev_calculated;q<rates_total;q++)
     {
  //for(q=0; q<Bar; q++)
  // {
     
   ArrayInitialize(X,0);
   ArrayInitialize(Y,0);   
   ArrayInitialize(B,0);   
   ArrayInitialize(x,0);
   ArrayInitialize(y,0);  
//===========================================
for (i=0; i<=period; i++) {

x[0][i]=1;
x[1][i]=i+q;
y[i]=   close[i+q];
}
//===========================================
  for (k=1; k<=period; k++) {
  for (j=0; j<=1; j++) {
  for (i=0; i<=1; i++) { 
   X[i][j]=x[j][k]*x[i][k]+X[i][j];   
   }
   Y[j]=y[k]*x[j][k]+Y[j];
   }}  
//===========================================  
k=0; 
 j=1; 
  a=X[k][j]/X[k][k];
  for (i=0; i<=3; i++){
  X[i][j]=X[i][j]-X[i][k]*a; 
  }
  Y[j]=Y[j]-Y[k]*a;

//==========================================  
for (k=2; k>=1; k--){
a=0;
for (i=1; i>=k; i--){
a=X[i][k-1]*B[i]+a;
}
B[k-1]=(Y[k-1]-a)/X[k-1][k-1];
}
//=========================================


   A[q]=B[0]+B[1]*q;
   }

//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Ограничения и проверки в экспертах
Ограничения и проверки в экспертах
  • 2010.08.02
  • MetaQuotes Software Corp.
  • www.mql5.com
Можно ли торговать этим инструментом в понедельник? Хватит ли денег на открытие позиции? Какой размер убытка мы получим, если сработает Stop Loss? Как ограничить количество отложенных ордеров? Была ли выполнена торговая операция на этом баре или это было на предыдущем? Если торговый робот не может сделать подобные проверки, то любая прибыльная торговая система может превратиться в проигрышную. В этой статье показаны примеры проверок, которые пригодятся в любом эксперте.
 
m_a_sim:

скорее всего дело в индикаторе, я его переделал, c mql4, он прорисовывается, но ошибку выдает, еще не считается новый бар, не могу понять, как грамотно сделать, чтобы не было конфликтов с mql5

вот trend_v3. Вы имеете ввиду 9 строку?

 


71 стока, 9 символ...

Как я понял вот на это место ругается

y[i]=   close[i+q];
 
Interesting:

71 стока, 9 символ...

Как я понял вот на это место ругается

а есть программный способ искать номер строка и символ, а не вручную считать?
 
m_a_sim:
а есть программный способ искать номер строка и символ, а не вручную считать?

Конечно есть. Меню "Правка", пункт "Перейти к строке" (Ctrl+G)...

PS

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

 
Interesting:

Конечно есть. Меню "Правка", пункт "перейти к строке"...

PS

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


и чем ему close не понравился?
 
m_a_sim:
и чем ему close не понравился?
Проверьте размерность массива. Но для начала я бы добавил проверку на инвалидность и доступность данных в сам эксперт...
Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - Документация по MQL5
 
Interesting:
Проверьте размерность массива. Но для начала я бы добавил проверку на инвалидность и доступность данных в сам эксперт...
можно поподробнее, что значит на инвалидность и доступность данных?
 
m_a_sim:
можно поподробнее, что значит на инвалидность и доступность данных?

Что-то вроде этого

void OnTick()
{
//----------------------------------------------------------------------------//
//Work variables
MqlTradeRequest mrequest;  
MqlTradeResult mresult;
MqlTick latest_price;   

int i, j,jj, k, g, q, ticket,l;
double stop;
//----------------------------------------------------------------------------//

ArraySetAsSeries(ind1,true);
ArraySetAsSeries(ind2,true);

  if(hind1==INVALID_HANDLE||hind2==INVALID_HANDLE)
  {
  Print("Ошибка!!!");
  }
  else
  {
  MAX = CopyBuffer(hind1,2,0,3,ind1);
  MIN = CopyBuffer(hind2,0,0,3,ind2);
  }
//----------------------------------------------------------------------------//  
}

PS

Я бы еще оформил всю работ с индюками в виде класса...

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