イベントの流れ イベントの制御やアイドリングストップはどのように行うのですか?(+解決済み) - ページ 5

 
Yedelkin:

なるほど、TheXpertが 波を立てて、問題が発生したんですね。

本当に残念なことです。人とコミュニケーションが取れないのは私のせい?

Expert Advisorのメモリ消費量は固定で、もし

(1) バッファエミュレーションなし

(2)履歴にオブジェクトを描画しない。

(3)メモリ割り当ての バグがないこと。しかし、これは通常deinitで見られることです。

(4) インデックスと連動したバグがないこと。インジケータがフルサイズのバッファを持つ場合、それはバグである。

(1)または(2)の燃焼がある場合、テスター+ディスパッチャーで簡単に追跡できます。サイズコントロールで処理されます。

イベント単体では全くメモリを食わない(昇順)したがって、Expert Advisorに問題がない場合、問題は間違いなくインジケータにあります。

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
TheXpert:

EAでは、以下の場合、メモリ消費量が固定されます。

(1) バッファエミュレーションがない。

(2)履歴にオブジェクトの描画がないこと。

(3)メモリ割り当ての バグがないこと。しかし、これは通常、デインテレーションで見られることです。

(4) インダクタを使った作業のバグがないこと。インジケータがフルサイズのバッファを持つ場合、それはバグである。

(1)または(2)であれば、テスターとディスパッチャでオーバーロードをトレースすることは容易である。サイズコントロールで処理する場合もあります。

イベント自体は全くメモリを消費しない(昇順)。したがって、Expert Advisorに問題がない場合、問題はInsulatorにあることは間違いありません。

このような詳細なご回答をいただき、誠にありがとうございました。よく考えてみます。(1)~(3)は間違いなくNGです。

(4)について、「インジケータがバッファをフルサイズにする場合」とはどういう意味か、推測で終わらせず、説明してください。

(1)または(2)の燃焼があれば、テスター+マネージャーで簡単にトレースできる」についてですが、テスターをプログラムの速度測定だけでなく、消費量の測定にも使おうということでしょうか。こんな簡単な解決策、思いつきもしなかったよ。

さらにExpert Advisor を動的オブジェクトで構築した場合、固定メモリを持つことができないことが判明しました。 一方、動的オブジェクトで不正な動作をしたという報告はなく、何度 Expert Advisor を削除して起動したことでしょう。

とにかく、私のブレーンストーミングは、一緒に動いているプログラムのボリュームを分離できないなら、別々に動かして消費量の増加を見るしかないという、つまらないアイデアを提案しました。Expert Advisor はカスタム・インジケータからではなく、独自のチャート上のティックから起動する必要があるとします。テスターで音量を測るというヒントを考慮すると、問題なさそうです。ロシュが記事を参考にしたのはそういう意味かも...?しかし、記事を読み返してみると、そのようなことは思いもよらなかった。手がかりがないわけではない!

TheXpert です。

あなたは私を狂わせます。人とコミュニケーションがとれないのも、私のせい?

罪悪感は罪悪感、波動は波動 :)

そして、私の極度のマナー違反についてのご指摘はすでに把握し、事前にお詫びしております :) それでも、私のマナー違反は、人のために話すよりも、自分のために話す方が生産的であることを教えてくれています :)私たちは国家公安委員会ではありません :)

 
Yedelkin:

(4)について、推測で迷わないために、「インジケータがフルサイズのバッファを持つ場合」とはどういうことか、説明してください。

ここで言いたいのは、例えばチャートに100000本のバーがあり、Expert Advisorが100000本すべてのバーをバッファとして引っ張っている場合、それは正しいことではないということです。

(1)(2)であれば、テスター+ディスパッチャーで簡単にトレースできる」についてですが、テスターをプログラムの速度測定だけでなく、消費量の測定にも使うということでしょうか。こんな簡単な解決策、思いつきもしなかったよ。

まあ...テスターを起動し、どこか(例えばWindowsのタスクマネージャ)でメモリの割り当てを 監視するということですね。あまり信頼できる方法ではありませんが、EAに問題がある場合、ほとんどの場合、メモリの焼き付きが非常に高くなります。

そこで、ブレーンストーミングの結果、「一緒に動かすプログラムのボリュームを分けられないなら、別々に動かしてどちらが消費量が多いか見てみよう」という一見くだけたアイディアが生まれました。

まあ、実際にそうやって開発されたわけですが......。
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

つまり、例えば、オブジェクトをクリックすると、イベントCHARTEVENT_OBJECT_CLICK はすぐには来ず、キューから以前のイベントをすべて取り出してから来ます。
そして、ご理解の通り、キューにはEventChartCustomが ぎっしりと詰め込まれています。

...

アレックス、 私も今、少し似たような問題を抱えています。つまり、EA初期化直後はすべて正常に動作しています。しばらくの間、ターミナルに全く入らず、あるユーザー情報パネルから別のユーザー情報パネルに切り替えようとすると、プログラムが「止まって」しまいます。スイッチが入るまで、数秒間フリーズすることもあります。同じケースなのでしょうか?

別の問題で忙しく、まだ試していませんが、私自身は解決策を見つけられなかったので、ぜひ試してみます。とりあえず1つだけ疑問があります。

この例では、OnChartEvent()関数に5つのパラメータがあります。アイビューって

ulong event_idle=0; bool bidle;
//---
void OnChartEvent(int iview, int id, long lparam, double dparam, string sparam)
  {
    if(id==CHARTEVENT_CUSTOM+VM_IDLE)
      {
        if(event_idle>(ulong)lparam || bidle) // если последнее посланное больше чем пришедшее, то сразу выходим
          {
           bidle=event_idle > (ulong)lparam;
           //---
           if(bidle) return;
           //---
           event_idle=0;
          } 
        event_idle++;
        ChartRedraw(m_chart); // обновили чарт
        EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика
        return; 
      }
    EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика

    /*
        обработка остальных событий
    */
  }
 
tol64:

アレックス、 私も今、少し似たような問題を抱えています。つまり、EA初期化直後はすべて正常に動作しています。しばらくの間、ターミナルに全く入らず、あるユーザー情報パネルから別のユーザー情報パネルに切り替えようとすると、プログラムが「止まって」しまいます。スイッチが入るまで、数秒間フリーズすることもあります。同じケースなのでしょうか?

はい、それです。OnChartEventの 呼び出しの間に複数のEventChartが 送信されている。私が提案した、入ってきたイベント番号を解析するアドオンを作れば、問題は解決します。

この例では、OnChartEvent()関数に5つのパラメータがあります。iviewとは

うっかり関数のヘッダーに 入っちゃった。気にしないでください。

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
人のエネルギーがこんなにあるなんて......)え、私の17年間はどこに!?
 

tol64:

sergeev:
...

そのため、例えば、オブジェクトをクリックすると、CHARTEVENT_OBJECT_CLICK イベントは すぐには来ず、 以前のイベントがすべてキューから 削除された後に来ることになります。
そして、ご理解の通り、イベントキューはEventChartCustomで詰まって います

皆さん、さあ、この記事の 1.1項を読んでみてください。そこで議論された内容が今日発表されたのだから、正式なものと考えてよいだろう。さて、EventChartCustom 関数によるキューの「前」イベントと「聴覚遮断」のような現象は(この場合)ありえません。 ...あるいは、Handbookからの新しい情報に対する公式の反論が必要 です。

TheXpert さん、わかりやすい説明ありがとうございます。

 
Yedelkin:

皆さん、さあ、この記事の 1.1項を読んでみてください。そこで議論された内容が今日発表されたのだから、正式なものと考えてよいだろう。さて、EventChartCustom 関数によってキューに「前の」イベント-イベントや「聴覚遮断」のような現象が(この場合)今あるはずがない。 ...あるいは、ハンドブックからの新しい情報の公式反論が必要 である。

は、まるでサーカスのような光景が繰り広げられているのでしょうか。
 
sergeev:
これは何かのサーカスのようなものなのでしょうか?

サーカスのように見えるのであれば、遠慮なく削除するか、それなりの回答をしてみてください。

 
と新しい質問をまだしていないのですか?