クラウド同期エラー - ページ 3

 
Clock:

これはいいアイデアだと思うし、そのヒントはありがたい。

ただし、それについて3点。

1) 上で述べたように、私も「無限」ループの問題を抱えていますが、このスレッドで「無限ループ」は「一つのイベントが10分以上かかった」ことに対する最良の推測に過ぎないと理解したので、それは私のコードかもしれないと受け止めています。私は非常に複雑な指標を使用しており、(少なくとも私はそう思う)ハンドルが作成されるとき、彼らは彼らの全体の履歴を計算するので、これは(遅いコンピュータ上で)10分以上かかる場合があります。

2) しかし!通常、私のクラウドは10-15分後にクラッシュします。しかし、昨晩は8時間完璧に動きました。コードを全く変えていないのに、一度もクラッシュしませんでした。不思議です。

3) そして、最も重要なことは、あなたのアプローチに関連することです。メモリに基づいてエージェントを拒否する場合、エージェント(そしてクラウド全体)はクラッシュしない、それはわかります。しかし、より強力なマシンが同じパラメータセットを再度試すとは思えないので、基本的に最適化のデータポイントを失うことになりますね。これは、私たちが支払わなければならない代償と言えるでしょうか?


私が仕事から戻ったら、私のエージェントがまだ使えるかどうか、見てみたいですね。

こんにちは、時計さん。

1) まず、10年分の1MのデータでIndicatorを使用していて、Indicatorが非常に複雑でない限り、処理能力の高い今日、通常のシステムで5分もかかるとはとても思えません。ここで正常と強調したのは、クラウドには、極端に負荷の高いマシンや、単にWindows(心的外傷後ストレス)のスローダウンでひどい状態になっているマシン上で動作しているエージェントが多数存在すると思われるからです。そして、たった1つの不運なエージェントが最適化を台無しにしてしまうのです...。

2) 私もあなたと全く同じでした。つまり、最適化を開始した後、いくつかのクラウドエージェントは何の問題もなく結果を返しました。その後、5-20分、時にはそれ以上経ってから、あるエージェントが恐ろしいエラーを投げて、バーン - 最適化が終了しました。また、時折、何の問題もなく最適化が完了することもありました。エージェントのログファイル、システムの詳細、CPU使用率などに全くアクセスできないので、何が起こっているのかがわからず、非常にイライラします。

3) それは非常に興味深い指摘ですね。私の理解では、オプティマイザーは、特定のパラメータの 組み合わせの結果を得たときのみ、その組み合わせを「使用した」と見なしますが、これは間違っているかもしれません。この点については、MetaQuotesの誰かがコメントしてくれるかもしれませんね。

とにかく、あなたが前進していることを願っています。:)

 
angevoyageur:
32G RAM 未満の エージェントをすべて拒否 した場合、利用可能な エージェントはいくつに なりますか?

こんにちは。

民生用PCのRAM容量としては大きいように思えますが、クラウドではこのスペックのマシンを見つけるのに何の問題もないようです。最適化を開始すると、オプティマイザーは簡単に最初の64エージェントを見つけ、その後128までかなり速く上昇します(もちろんパラメータ セットの設定によりますが)。最初は8GBを試しましたが、最適化は長く続き、しばしば完了しましたが、それでも定期的にエージェントがエラーを出し、その結果、最適化が停止しました。その後、16GBを試しましたが、やはり改善されましたが、完璧ではありませんでした。24GBを試すのは面倒だったので、そのまま32GBにして様子を見ようと思いました。)そして、完璧な最適化が行われました。

もっと遊んで、エージェントの設定要件をもう少し磨きたかったのですが、遊んでいるだけで課金されるとなると、その意欲はすぐに失せてしまいますね。)

 
cowil:

こんにちは。

民生用PCのRAM容量としては大きいように思えますが、クラウドではこのスペックのマシンを見つけるのに何の問題もないようです。最適化を開始すると、オプティマイザーは簡単に最初の64エージェントを見つけ、その後128までかなり速く上昇します(もちろんパラメータセットの設定によりますが)。最初は8GBを試しましたが、最適化は長く続き、しばしば完了しましたが、それでも定期的にエージェントがエラーを出し、その結果、最適化が停止しました。その後、16GBを試しましたが、やはり改善されましたが、完璧ではありませんでした。24GBを試すのは面倒だったので、そのまま32GBにして様子を見ようと思いました。)そして、完璧な最適化が行われました。

もっといろいろ遊んで、エージェントの設定条件をもう少し改善できないか試してみたかったのですが、遊んでいるだけでお金を取られるのでは、その意欲もすぐに失せてしまいますね :)

Metaquotesから何らかのリターンがあると面白いんですけどね。もし、16G RAMのマシンが最適化を実行するのに十分でないなら、何か調査する必要がありますね。もし私がよく理解していれば、ローカルで最適化を実行するときは何の問題もありませんが、クラウドを使用するときは、なぜそんなに多くのメモリが必要なのでしょうか?
 
angevoyageur:
Metaquotesから何らかの返答があると面白いのですが。もし、16G RAMのマシンで最適化を実行するのに十分でないなら、何か調査する必要があります。私がよく理解している場合、あなたは何の問題もないローカルに最適化を実行するとき、なぜその後、クラウドを使用しているときにそんなに多くのメモリの必要性があるのでしょうか?

全く分かりません。私のローカルマシンは8GBのi7プロセッサで、MT5が8つのローカルエージェントをインストールしました(明らかに4コアプロセッサですが、ハイパースレッディングにより、WindowsとMT5はもちろん8コアプロセッサと見なします)。最適化が実行されているとき、エージェントはそれぞれ約400MBのメモリを使用しているようで、明らかに8つのエージェントに必要なメモリは約3.2GBとなります。32GBには到底及びませんが...。

もう一つ、この問題の根本的な原因かもしれないと思ったのは、1つの「悪い」クラウドエージェントが全体の最適化を終了させるという事実です。実際、クラウドサーバーが 最適化ジョブのエージェントを割り当てるとき(メモリ要件が明示されていない)、同じ「悪い」エージェントが選択されるということが起こっているのでしょう。OnInit() でメモリ要件が指定されると、"悪い" エージェントは、それらが動作しているボックスが要件を満たさないので回避され、良いエージェントだけが選択されます。考えてみると、おそらくこちらの方が多いのではないでしょうか。

そうそう、この問題をMetaQuotesに登録したのですが、まだ何の返事もありません。

 

OnInit(または他の関数)が遅いエージェントでも10分以上実行されると、MQL5クラウドネットワークにとって有害な無限ループと見なされます(ローカルとリモートエージェントにはそのような制限はありません)。

このような状況に対して、OnInit関数にINIT_AGENT_NOT_SUITABLEというリターンコードを 実装しています。これを使うことで、クラウドネットワークユーザーは、テスト実行の最初の段階で、不適当なエージェントをチェックし、拒否することができます。

このコメントは、サービスデスクのチケットに対する正式な返信と考えることができます。上記の情報はご存知だと思います。

なお。どのような場合でも、最も遅いPCでも実行に10分以上かかる機能は、異常、非効率、非最適と見なされます。

 
MetaQuotes:

OnInit(または他の関数)が遅いエージェントでも10分以上実行されると、MQL5クラウドネットワークにとって有害な無限ループと見なされます(ローカルとリモートエージェントにはこのような制限はありません)。

このような状況に対して、OnInit関数にINIT_AGENT_NOT_SUITABLEというリターンコードを 実装しています。これを使うことで、クラウドネットワークユーザーは、テスト実行の最初の段階で、不適当なエージェントをチェックし、拒否することができます。

このコメントは、サービスデスクのチケットに対する正式な返信と考えることができます。上記の情報はご存知だと思います。

なお。いずれにせよ、どのような機能であっても、その実行が最も遅いPCでも10分以上かかる場合は、異常、非効率、非最適と判断されます。

MetaQuotesさん、こんにちは。

まず最初に、コメントありがとうございます。

私が直面している問題(この投稿を振り返ると、他の人もそうであるようです)は、私のローカルエージェントを使用して最適化を実行した場合、最適化は正常に実行されること、つまり、最適化が進むにつれて各エージェントの「完了率」ステータスが着実に増加することです。もし、私の Expert の OnTick() イベントハンドラに、完了までに 1 分以上(10 分はともかく)かかるコードがあれば、「完了率」のステータスは、その時点で一時停止するのではないでしょうか?もし、私のコードにクラウドエージェントのエラーにあるような無限ループが含まれている場合、これらのステータスパーセントに10分以上の休止が見られるはずではないでしょうか?

 

OnInit() や OnTick() の「無限ループ」エラーの原因である、SymbolInfoInteger() コマンドを発見したようです。SymbolInfoDouble()やSymbolInfoTick()が同じ問題を引き起こすかどうかは、まだこれ以上実験する機会がないので分かりません。もしこれを試したい方がいらっしゃいましたら、オプティマイザーでクラウドエージェントを使用して以下のExpertを実行してみてください。

/+------------------------------------------------------------------+
//|                                              MultiSymbolTest.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
input double var1 = 45;
input double var2 = 54;

input bool onInit = true;
input bool onTick = false;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() { 

    
    if (onInit) {
    
        string pairsToTrade[] = {"AUDUSD","EURJPY","EURUSD","GBPUSD","AUDJPY","USDJPY","AUDCAD"};
        for (int i=0; i<ArraySize(pairsToTrade); i++) {
            int digits = SymbolInfoInteger(pairsToTrade[i], SYMBOL_DIGITS);
            if (digits == -1)
                return(INIT_FAILED);
        }
    }           

    // Return...
    return(INIT_SUCCEEDED);
}



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void OnTick() {

    if (onTick) {
    
        string pairsToTrade[] = {"AUDUSD","EURJPY","EURUSD","GBPUSD","AUDJPY","USDJPY","AUDCAD"};
        for (int i=0; i<ArraySize(pairsToTrade); i++) {
            int digits = SymbolInfoInteger(pairsToTrade[i], SYMBOL_DIGITS);
            if (digits == -1)
                return;
        }
    }           

    ExpertRemove();
}    

OnInit() と OnTick() のどちらをテストしたいかを選択し、var1 と var2 に十分なスタート/ステップ/ストップの値を与えて、約1000の組み合わせを生成し(おそらくもっと少なくても良いですが、私が使用しているのはこれです)、オプティマイザーを起動します。約10分後、「無限ループが検出されました」というエラーが表示されるはずです。

OnTick()の最後にExpertRemove()を置いたのは、OnTick()の1回の繰り返しでエラーが発生 することを示すためです。

もちろん、サービスデスクにも報告したのですが...。

 
ああ、言い忘れましたが、何らかの理由で、私が上に提供したメモリの修正は、ほとんどの場合、問題を解決するようですが、すべてではありません。これがどのように/なぜ/何のために働くのか、私は知りません。MT5の奥底にある何かをくすぐっているのでしょう... :)
 

私はこの問題を確認することができます。

2013.05.20 14:22:31 MQL5 Cloud Europe 2 genetic pass (0, 22) tested with error "endless loop detected in OnInit function, expert rejected byMQL5 Cloud Network" in 602 sec (PR140)。

 
考える必要がある...