在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 核心 1 2010.06.01 00:00:01 在'trend_v3.mq5'中阵列超出范围 (71,9)
2010.09.01 19:44:36 核心 1 2010.06.01 00:00:01 在'trend_v3_5.mq5'中阵列超出范围 (83,9)


alexvd:

阵列超限。

见代码'trend_v3.mq5'。甚至指定了具体的线路。

我不知道这些放纵者自己是否工作?
 
alexvd:

超出阵列的范围。

见代码'trend_v3.mq5'。甚至还指出了具体的线路。

很可能是指标的问题,我用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:

很可能是指标的问题,我用mql4重新设计了它,它被画出来了,但是有一个错误,新的条形图 还没有被考虑,我不明白如何正确地做它,以便与mql5没有冲突。

这里是trend_v3。你是指第9行吗?


71只股票,9个字符...

在我看来,这是一个让人恼火的地方。

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

71座,9个字符...

根据我的理解,这是它犯错的地方

有没有一种程序化的方法来寻找行号和字符,而不是手动计数?
 
m_a_sim:
有没有一种软件方法可以查找行号和字符,而不是手动计数?

当然是有的。编辑菜单,转到行(Ctrl+G)...

PS

行号和位置写在底部。还有一种快速跳转到函数的方法(通过其名称)...

 
Interesting:

当然是有的。编辑菜单,转到行项目...

PS

行号和位置写在底部。还有一种快速跳转到函数的方法(通过其名称)...


又有什么问题呢?
 
m_a_sim:
又有什么问题呢?
检查数组的尺寸。但首先,我会给EA本身增加一个残疾和数据可用性检查...
Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - Документация по MQL5
 
Interesting:
检查数组的尺寸。但首先,我会给EA本身增加一个残疾和数据可用性检查...
你能不能更具体一点,你说的残疾和数据可用性是什么意思?
 
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

我也会把所有与火鸡有关的工作正式定为一个班级......