初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 86

 
fyords:
ObjectCreateの結果を表示してください。もしかしたら、そこにエラーがあるかもしれません。

ありがとうございます。必ず確認しますが、新たな問題を解決してからにします。EAはしばらくの間動作しましたが、現在は自動的にチャートから削除されています。アレイがいっぱいですと言われて戻せません。

void CreateLevels()
   {
      double High[];
      ArrayResize(High,0);
      ArraySetAsSeries(High,true);
      CopyHigh(_Symbol,_Period,0,Candle,High);

      for(int j=Nachalo;j<=Candle;j++)
         {
          //--- поиск макс -----------------------------------
          if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
            {
             double H=High[j];
            }
int iHighest(string symbol,int tf,int type,int count,int start)
  {
   if(start<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(count<=0) count=Bars(symbol,timeframe);
   if(type==10)                                 // MODE_HIGH
     {
      double High[];
      ArraySetAsSeries(High,true);
      CopyHigh(symbol,timeframe,start,count,High);
      return(ArrayMaximum(High,0,count)+start);
     }
   return(0);
  }

Candle=1000。コンパイラはどこにも悪態をつかず、デバッガにも何も表示されません。解決策をご提案ください

 
次のビルドでは、信号を使わなければ、ごくまれに信号を要求してきます。

これはすでに修正されています。
 
Renat:
次のビルドでは、信号を使わなければ、ごくまれに信号を要求してきます。

これはすでに修正されています。
その答えは、私にはないものと受け止めています。
 
チャート上にEAを設定しようとすると、テクニカルエラーが発生するようになりました。エラーの詳細はどこに送ればよいのですか?
 
WindSW:

なぜArrayResize=0なのか?

そして、ArrayInitializeは その前に追加する必要があるようです。

И

double H

ループの中で毎回初期化されているか?

関数の前に宣言してください。

を更新し、括弧を再確認してください。

CreateLevels
 
Silent:

なぜArrayResize=0なのか?

配列のゼロ点化 High[]
 
WindSW:
配列のゼロ点化 High[]
いいえ、そのサイズを0に設定します。
 
Silent:
いいえ、そのサイズを0に設定します。
情報はサイズ0のままですか?リセットの正しい方法を教えてください。
 
WindSW:
情報はサイズ0のままですか?ゼロインはどのように行うのが正しいのでしょうか?

サイズを0にしてから、そこに配列をコピーするのです。

試してみてください。

void CreateLevels()
  {
   double High[];
   ArrayResize(High,Candle); // размер = Candle
   ArrayInitialize(High,NULL); // инициализация нулем
   ArraySetAsSeries(High,true);
   CopyHigh(_Symbol,_Period,0,Candle,High);

   double H; // вынес
   int j;    // вынес
   for(j=Nachalo;j<=Candle;j++)
     {
      //--- поиск макс -----------------------------------
      if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
        {
         H=High[j];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
コードを修正し、int jも修正しました。
 
WindSW:
また、サイズ0では情報は残らないのですか?

そして、それを殺すと、おそらくArrayResizeを2回呼ぶことができます、0と、そして正しい配列 サイズで。

もっと速いかもしれない...メモリ割り当て的にどうなるかはわからないけれども。

理由: