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

 
Jager:

usdjpyでテストしようとすると、次のようなメッセージが表示されます。

で、無限に続くようなので、3000になったところで消しました。2010.10.01~2010.10.10で切り替えを試したところ、オープニング価格のみと なりました。

ビルド401

また、別のリモートエージェントも起動できません。以下はそのログです。

昨日も同じようなパターンが観測されましたが...。全編にわたってオーバーロードしていたようで、どうやらその際に問題があったようです。

最後まで待つか、端末を再起動したようです。

昨日、面白いことを発見しました。EAを再コンパイルした後、ターミナルを再起動するまで、テスターで変更が効かないのです。

 
Im_hungry:
フルサポート - サービスデスクかも?(100回閉じる)
そんなことより、みんなよく知ってるんだから......。
 

昨日から、専門家たちのデジタルライフが始まっている。

テスト時にランダムフォーカスが出る・・・。OnInit()関数を 魔法のような方法でスキップし、DeInit()関数で範囲外の配列を生成してしまうのです。


同じパラメータで、テストが始まって全部実行されることもあれば、クラッシュすることもあるということです。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Im_hungry:

ここで、ポジションをクローズすると、インジケータのパラメータが1つ変化するので、それをダイナミックにすることが課題です。

さて、私の解決策です。

私はテストが別の結果を示すように、このコードが動作することを言うことができますが、それはt.s.を動作する理由は明らかではない、私はログを見た - 1週間すべてがそれが必要なように動作し、それがループし、バッファ内の同じ値を出力し、これは不可能ですが(2週間テスターログに同じ値)、ループしない場合は、ちょうどエラーを書き込みます。

アラートメッセージ

私が理解した限りでは、Expert Advisorは新しいバーが表示されたときに何らかのインジケータのハンドルを作成し、同時にこのインジケータのバッファをコピーする必要があります。しかし、これでは指標となるバッファの 計算に時間がかかる可能性がある場合、うまくいかない。つまり、インジケーターハンドルの作成は成功しても、インジケーターバッファの計算がまだ行われていないのです。
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
Yedelkin:
私が理解した限りでは、Expert Advisorは新しいバーが表示されたときに何らかのインジケータハンドルを作成し、同時にこのインジケータのバッファをコピーする必要があります。しかし、指標となるバッファの 計算に時間がかかる場合があり、うまくいっていない状況です。つまり、インジケーターハンドルの作成は成功しても、インジケーターバッファの計算がまだ行われていないのです。

そうですね。だから、このデザインに挑戦しました。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{ 
   if (isNewBar()==true && proverkaHANDLA()==true)
     {
      if (!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
  ArraySetAsSeries(Sp1Buffer,true);
  ArraySetAsSeries(Sp2Buffer,true);
//----------------------
  vhandle=iCustom(NULL,0,"МТ5",Symbol1,100,Lots,1,Close());
  if(vhandle<0)
    {
     Alert("Ошибка при создании индиката: ",GetLastError());
     return(0);
    }
  if(CopyBuffer(vhandle,0,0,50,Sp1Buffer)<0 || CopyBuffer(vhandle,1,0,50,Sp2Buffer)<0)
    {
     Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
     return(0);
    }
  return (true);
}

とりあえず動く!ご協力ありがとうございました

 

でも、たまに出るんですよ。

Alert: Ошибка копирования буферов индикатора номер ошибки:4806
 
Im_hungry:

そうですね。だから、このデザインに挑戦しました。

今のところうまくいっていますご協力ありがとうございました

この構成では、「ハンドルは作成されているが、インジケータ・バッファが まだ計算されていない」場合はスキップされます。構築自体は1周期に1回呼ばれるので、CopyBuffer() 関数を複数回呼んでみるのもよいでしょう。すなわち、CopyBuffer()<0 ならば、選択した期間が許す限り(選択した時間内)、繰り返し関数を呼び出す。
 
Im_hungry:

でも、たまにそうなるんです。

まあ、その通りなんですけどね。関数proverkaHANDLA()は独立したブロックであり、内部でCopyBuffer() を一度だけ参照しています。従って、バッファを計算しなければ、必ずまたポップアップします。今のところ、あなたの関数proverkaHANDLA()は、「ハンドルは作成されたが、インジケータバッファは まだ計算されていない」状況を処理せず、無視します。

 
Yedelkin:
この構造は、「ハンドルは作成されているが、インジケータ・バッファが まだ計算されていない」場合をスキップします。構築自体は1周期に1回呼ばれるので、CopyBuffer() 関数を繰り返し呼ぶようにすればよいでしょう。すなわち、CopyBuffer()<0 であれば、選択した期間が許す限り(選択した時間内)、関数を繰り返し呼び出す。

つまり、CopyBuffer>0の間に計算し、新しいパラメータ(Close()

はポジションの終了時に表示されます。つまり、Whileをループさせる必要があるのです。こんなふうになるんです。

if(!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
  {
   While (vhandle>0)
    {
     if(CopyBuffer(vhandle,0,0,50,Sp1Buffer)<0 || CopyBuffer(vhandle,1,0,50,Sp2Buffer)<0)
      {
       Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
       return(0);
      }
    }
  }
 
ヘルプのBarsCalculatedを 読んでみてください。ちなみに、正しい例を示しています。