エラー、バグ、質問 - ページ 276

 

迅速な対応ありがとうございました)

 

トピックについてもう少しでできたのですが、COUNTERが起動せず、ターミナルのログには


抜去

ロード成功


が効いた!!!!
 

ここにエラーがあります。

   v161_handle=iCustom(NULL,0,"ErolМТ5");                            
   v162_handle=iCustom(NULL,0,"ErolМТ5");
   Sum_handle=iCustom(NULL,0,"ErolМТ5");
この場合、同じインジケータを3回呼び出しているので、3つの変数はすべて同じハンドルを持っています。
 
sergey1294:

エラーが発生しました

この場合、同じインジケータを3回呼び出しているので、3つの変数がすべて同じハンドルになります。

そうなんですが、私の理解では、インジケータの 指標行の 値(3行の値)が

を乗り切ります。

CopyBuffer(v161_handle,1,0,3,Spr1Buffer)
CopyBuffer(v162_handle,2,0,3,Spr2Buffer)
CopyBuffer(Sum_handle,4,0,3,SumBuffer)

ここで、1、2、4はバッファに格納されている指標行のインデックス値です。

を比較検討します。

しかし、それは問題ではなく、これらの指標線指標では正しく計算されません

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 

どこに行けばいいのか、ここで何をすればいいのか、何かアドバイスはありますか?


void OnTick()
{  
   ArraySetAsSeries(Spr1Buffer,true);
   ArraySetAsSeries(Spr2Buffer,true);
   ArraySetAsSeries(SumBuffer,true);

   if(CopyBuffer(v161_handle,1,0,3,Spr1Buffer)<0 || CopyBuffer(v162_handle,2,0,3,Spr2Buffer)<0 || CopyBuffer(Sum_handle,4,0,3,SumBuffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      }
   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
   bool SellSum1 =(SumBuffer[1]>=Sp);
   if(SellSpr1 && SellSum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =(Spr1Buffer[1] < Spr2Buffer[1]);
   bool BuySum1 =(SumBuffer[1]>=Sp);
   if(BuySpr1 && BuySum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenBuy1();
      }
 
alexluek:

そうなんですが、私の理解では、インジケータの 指標行の 値(3行の値)が

を乗り切ります。

ここで、1、2、4はバッファに格納されている指標行のインデックス値です。

を比較検討します。

しかし、これらの指標線によると正しく計算されないので問題ありません

インジケーターのコピーを1つロードし、コピーバッファー経由で必要なバッファーインデックスをアドレス指定すれば十分です。
 
sergey1294:
インジケーターのコピーを1つロードし、コピーバッファーで目的のバッファーのインデックスをアドレス指定すれば十分です。

いいえ、そうではありません。2行目の値を取得することができません。

異なるバッファに格納された2つの行番号の値を比較するため。


   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
 
alexluek:

間違って、2行目の値を取得することはできません

異なるバッファに格納された2つの行番号の値を比較するため。


インジケータ自体にエラーがある可能性があります
 
sergey1294:
インジケータ自体にエラーがある可能性があります

インジケータが正しく表示される

 

溺れている人を助けるのは、溺れる人の仕事です。

今後、重宝するかもしれませんね。

現在のバーに対してEAで2つ以上のインジケータラインを 呼び出すには

1つのハンドルを選択し、インジケータを呼び出し、コピーバッファを使用してインデックス値を保存します。

を作成し、これらのバッファを使用して作業します。sergey1294 さん、ありがとうございます。

int OnInit()
  {
   v161_handle=iCustom(NULL,0,"LeroyMТ5");                            
   if(v161_handle<0)
     {
      Alert("Ошибка при создании индикаторов: ",GetLastError());
      return(-1);
     }
   return(0);
  }


void OnTick()
{  
   ArraySetAsSeries(Sp1Buffer,true);
   ArraySetAsSeries(Sp2Buffer,true);
   ArraySetAsSeries(Sp3Buffer,true);
   if(CopyBuffer(v161_handle,1,0,1,Sp1Buffer)<0 || CopyBuffer(v161_handle,2,0,1,Sp2Buffer)<0 || CopyBuffer(v161_handle,4,0,1,Sp3Buffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      return;
      }    
   bool SellSpr1 =( Sp1Buffer[0]> Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(SellSpr1  && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =( Sp1Buffer[0]< Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(BuySpr1 && !PositionSelect(_Symbol));   
      {
        PositionOpenBuy1();
      }
}