グラフィカル・オブジェクトのことだと思っていた。クラス・オブジェクトの ことだとわかったんだ。
あなたの記事はとても良かった😁.でも、おっしゃる通り、パフォーマンスの問題にはちょっとした問題が絡んでいます。ほとんどの場合、何の影響もありませんし、何の問題もなく生活できます。しかし、変動が大きい時には、OnCalculateが受ける呼び出しの数のために、システムがクラッシュしたり、非常に遅くなったりすることがあります。しかし、問題は関数にあるのではなく、関数内で行われる相互作用にあります。なぜなら、呼び出されるたびに、MetaTraderはインジケータのバッファを読み込むことを余儀なくされ、その数が多い場合は問題が発生する可能性があるからです。これを解決する1つの方法は、OnTimeへのコールを使用することで、計算イベントごとではなく、あらかじめ定義された期間にわたってコールが実行されるため、負荷が少し軽くなります。手動または半自動で操作するのであれば、各計算は例えば200ミリ秒以内に実行されるから問題ないだろう。しかし、OnTimeイベントが計算スレッドに影響を与える可能性があるため、インジケーターでOnTimeイベントを使用するのはあまり適していません。これを実現する一つの方法は、OnCalculate自体で計算を強制し、CopyBufferコールを行う必要がないようにすることです。もうひとつ、OnCalculate関数の 次の行を修正することで、プロセッサーの消費サイクルを数マシンサイクル減らすことができる:
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int limit = MathMax(0, prev_calculated-1);
という行を修正することです:
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int limit = (prev_calculated <= 0 ? 0 : prev_calculated - 1);
たいしたことではないと思われるかもしれないが、この場合に三項演算子を使うと、関数を呼び出すよりも効率が良くなる。このような些細なことが、ボラティリティの高い時には大きな違いを生む.😁👍

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事「オブジェクトを使用して複雑な指標を簡単に」はパブリッシュされました:
この記事では、複数のプロットやバッファを扱ったり複数のソースからのデータを組み合わせたりするときに発生する問題を回避しながら、複雑な指標を作成する方法を紹介します。
指標の最終結果は次のようになります。
作者: Manuel Alejandro Cercos Perez