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 'trend_v3.mq5' の配列が範囲外 (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 'trend_v3_5.mq5' で配列が範囲外 (83,9)


alexvd:

アレイオーバーラン。

コード 'trend_v3.mq5' を参照してください。具体的な線まで指定しています。

耽溺者自身は働いているのだろうか。
 
alexvd:

配列の範囲外である。

コード 'trend_v3.mq5' を参照してください。具体的な線まで表示しています。

インジケーターの可能性が高いです。mql4でやり直したところ、うまくいきましたが、新しいバーが まだ考慮されていないというエラーが発生しました。

こちらが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)...

追記

行番号と位置は下部に書かれています。また、(機能名で)すぐにジャンプできる方法もあります...

 
Interesting:

もちろん、ありますよ。編集]メニューから[行番号]を選択...

追記

行番号と位置は下部に書かれています。また、(機能名で)すぐにジャンプできる方法もあります...


とか、何がいけないの?
 
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);
  }
//----------------------------------------------------------------------------//  
}

追記

七面鳥との作業もすべてクラスとして正式なものにする...。